diff options
author | David Monahan <david.monahan@arm.com> | 2023-03-22 16:48:58 +0000 |
---|---|---|
committer | David Monahan <david.monahan@arm.com> | 2023-03-22 16:48:58 +0000 |
commit | ae050524109f1ce827962665436ef7430f2ac479 (patch) | |
tree | a087fe0c77570971dd7979f2757426c24e91afc7 /23.02/namespacearmnn.xhtml | |
parent | 8d2ca734165a068478df7cffa46185680b05cd20 (diff) | |
download | armnn-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.xhtml | 18359 |
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&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&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&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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> @@ -264,7 +267,7 @@ Classes</h2></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> @@ -424,7 +427,7 @@ Classes</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td><td class="mdescRight">NOTE: this is an abstract class to encapsulate the element wise operations, it does not implement: std::unique_ptr<IWorkload> <a class="el" href="classarmnn_1_1_layer.xhtml#a08d1e10a45f15cd0bd02557be35a3864">Layer::CreateWorkload(const IWorkloadFactory& 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& 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"> </td><td class="mdescRight">NOTE: this is an abstract class to encapsulate the element wise operations, it does not implement: std::unique_ptr<IWorkload> <a class="el" href="classarmnn_1_1_layer.xhtml#a08d1e10a45f15cd0bd02557be35a3864">Layer::CreateWorkload(const IWorkloadFactory& 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& 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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </td></tr> @@ -565,7 +568,7 @@ Classes</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> @@ -702,7 +705,7 @@ Classes</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </td></tr> @@ -945,7 +948,7 @@ Classes</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </td></tr> @@ -981,7 +984,7 @@ Classes</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> @@ -1199,12 +1202,12 @@ Classes</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> @@ -1257,7 +1260,7 @@ Classes</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> @@ -1276,7 +1279,7 @@ Classes</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> @@ -1349,7 +1352,7 @@ Classes</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_activation_descriptor_01_4.xhtml">StringifyLayerParameters< ActivationDescriptor ></a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> @@ -1765,7 +1768,7 @@ Classes</h2></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </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  </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </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"> </td></tr> @@ -1945,17 +1948,17 @@ Typedefs</h2></td></tr> <tr class="memitem:a308ba160745ba35e1de8d698d0139eb4"><td class="memItemLeft" align="right" valign="top">using </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"> </td></tr> <tr class="memitem:ac14705405cbcdd580df613de6766fe65"><td class="memItemLeft" align="right" valign="top">using </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"> </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"> </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"> </td></tr> <tr class="memitem:a3647f60510bc8ddaced01c51b0ee8714"><td class="memItemLeft" align="right" valign="top">using </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"> </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"> </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"> </td></tr> <tr class="memitem:ae6c5f1b51bd32133c4dcc632045d6b58"><td class="memItemLeft" align="right" valign="top">using </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"> </td></tr> <tr class="memitem:a7863c179ff92feec660c48ab7b95ae55"><td class="memItemLeft" align="right" valign="top">using </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"> </td></tr> <tr class="memitem:a003d213dd28b0b8c0f26fbf268ccb975"><td class="memItemLeft" align="right" valign="top">using </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"> </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"> </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"> </td></tr> <tr class="memitem:a60291543fe872b795e71e05bcd835fd1"><td class="memItemLeft" align="right" valign="top">using </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"> </td></tr> @@ -1972,7 +1975,7 @@ Typedefs</h2></td></tr> <tr class="memitem:a150468a02bd7b2d2d061c4aaaee939f0"><td class="memItemLeft" align="right" valign="top">using </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">IRuntimePtr</a> = std::unique_ptr< <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)></td></tr> <tr class="separator:a150468a02bd7b2d2d061c4aaaee939f0"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a2d3a708a26ac6d77bf8f15506e89a25a"><td class="memItemLeft" align="right" valign="top">using </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2d3a708a26ac6d77bf8f15506e89a25a">IGpuAccTunedParametersPtr</a> = std::shared_ptr< <a class="el" href="classarmnn_1_1_i_gpu_acc_tuned_parameters.xhtml">IGpuAccTunedParameters</a> ></td></tr> -<tr class="memdesc:a2d3a708a26ac6d77bf8f15506e89a25a"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a5b05f3b7208ec7cea3338e30057c0bac"><td class="memItemLeft" align="right" valign="top">using </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"> </td></tr> @@ -1987,17 +1990,17 @@ Typedefs</h2></td></tr> <tr class="memitem:a5a665483e56a688e9f8180accdf72d80"><td class="memItemLeft" align="right" valign="top">using </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5a665483e56a688e9f8180accdf72d80">IBackendUniquePtr</a> = std::unique_ptr< <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)></td></tr> <tr class="separator:a5a665483e56a688e9f8180accdf72d80"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ab8cf8f9fb6792e654c2d8d8382f6f01b"><td class="memItemLeft" align="right" valign="top">using </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"> </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"> </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"> </td></tr> <tr class="memitem:a1c5ec805688cb558465a82a8d9f56a90"><td class="memItemLeft" align="right" valign="top">using </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"> </td></tr> <tr class="memitem:ac68a434f0e78e33726bfb22a39ec813f"><td class="memItemLeft" align="right" valign="top">using </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"> </td></tr> <tr class="memitem:a15f3ad9b5e4e3d46b0a6dda246a7bc28"><td class="memItemLeft" align="right" valign="top">using </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a15f3ad9b5e4e3d46b0a6dda246a7bc28">DebugCallbackFunction</a> = std::function< 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)></td></tr> -<tr class="memdesc:a15f3ad9b5e4e3d46b0a6dda246a7bc28"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a4b3cb628c15e1eea1b09ec848e9ae8c4"><td class="memItemLeft" align="right" valign="top">using </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"> </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"> </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"> </td></tr> <tr class="memitem:a51611ed886390df47733157d0c105453"><td class="memItemLeft" align="right" valign="top">using </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a51611ed886390df47733157d0c105453">InferenceTimingPair</a> = std::pair< <a class="el" href="namespacearmnn.xhtml#a4b3cb628c15e1eea1b09ec848e9ae8c4">HighResolutionClock</a>, <a class="el" href="namespacearmnn.xhtml#a4b3cb628c15e1eea1b09ec848e9ae8c4">HighResolutionClock</a> ></td></tr> <tr class="separator:a51611ed886390df47733157d0c105453"><td class="memSeparator" colspan="2"> </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"> </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"> </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"> </td></tr> <tr class="memitem:a10c50bc964cc8cc559eebcd7df5a8af3"><td class="memItemLeft" align="right" valign="top">enum  </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"> </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"> </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"> </td></tr> <tr class="memitem:aff209afc1dc598da399e3e78617ce016"><td class="memItemLeft" align="right" valign="top">enum  </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"> </td></tr> <tr class="memitem:a67a0db04d321a74b7e7fcfd3f1a3f70b"><td class="memItemLeft" align="right" valign="top">enum  </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"> </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"> </td></tr> <tr class="memitem:ad8ed01ff3ff33333d8e19db4d2818bb6"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> { <br />   <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  </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"> </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"> </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"> </td></tr> <tr class="memitem:a8e72227ebe5ac505cf44790f2e6eb488"><td class="memItemLeft" align="right" valign="top">enum  </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"> </td></tr> <tr class="memitem:a3888429b6ebc79f9a7df549e5e4d9a2f"><td class="memItemLeft" align="right" valign="top">enum  </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"> </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"> </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"> </td></tr> <tr class="memitem:a14d24d90ab4ba2956e92e27890ba4c91"><td class="memItemLeft" align="right" valign="top">enum  </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"> </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"> </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"> </td></tr> <tr class="memitem:abe18a5033f2ab9c0de82c676b48f5437"><td class="memItemLeft" align="right" valign="top">enum  </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"> </td></tr> <tr class="memitem:adf57837d00e8352d9b5cc5ab1fb5fee9"><td class="memItemLeft" align="right" valign="top">enum  </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"> </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"> </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"> </td></tr> <tr class="memitem:a14fcd7f88d11cea0a018269dca5f9277"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277">MemorySource</a> : uint32_t { <br />   <a class="el" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277aec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0, @@ -2282,8 +2284,8 @@ Enumerations</h2></td></tr> <br />   <a class="el" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e">Gralloc</a> = 8 <br /> - }<tr class="memdesc:a14fcd7f88d11cea0a018269dca5f9277"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a7100de49939c3e393101f78d425a98c6"><td class="memItemLeft" align="right" valign="top">enum  </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"> </td></tr> <tr class="memitem:ab24d74259a053475f6040dd701a01952"><td class="memItemLeft" align="right" valign="top">enum  </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"> </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"> </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"> </td></tr> <tr class="memitem:a56943a0946e5f15e5e58054b8e7a04a4"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> { <br />   <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"> </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"> </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"> </td></tr> <tr class="memitem:a93a3ba385cad27c4774e5fe64c025d3d"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a> { <br />   <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> </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> &backend)</td></tr> -<tr class="memdesc:a6d9d90e2ace1cd49789835b0073196a3"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:abd839f0f103c1ae19a4b38d59b869108"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abd839f0f103c1ae19a4b38d59b869108">HasCapability</a> (const std::string &name, const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &capabilities)</td></tr> -<tr class="memdesc:abd839f0f103c1ae19a4b38d59b869108"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a8439e8b224a1fb7abdf449c8e6775469"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8439e8b224a1fb7abdf449c8e6775469">HasCapability</a> (const std::string &name, const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &backend)</td></tr> -<tr class="memdesc:a8439e8b224a1fb7abdf449c8e6775469"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:ae702febbc6139e20b2b8c4f03ff89b01"><td class="memItemLeft" align="right" valign="top">bool </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> &capability, const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &capabilities)</td></tr> -<tr class="memdesc:ae702febbc6139e20b2b8c4f03ff89b01"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a78fe085e22e9822075ad791aa5cc34d5"><td class="memItemLeft" align="right" valign="top">bool </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> &backendOption, const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &backend)</td></tr> -<tr class="memdesc:a78fe085e22e9822075ad791aa5cc34d5"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a71c3bdadfe1c69aba2cbf054bff47744"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.xhtml">BackendOptions::BackendOption</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a71c3bdadfe1c69aba2cbf054bff47744">GetCapability</a> (const std::string &backendCapabilityName, const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &capabilities)</td></tr> -<tr class="memdesc:a71c3bdadfe1c69aba2cbf054bff47744"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a8d70f94d3f0ffb06067a66c49b2f8689"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.xhtml">BackendOptions::BackendOption</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8d70f94d3f0ffb06067a66c49b2f8689">GetCapability</a> (const std::string &backendCapabilityName, const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &backend)</td></tr> -<tr class="memdesc:a8d70f94d3f0ffb06067a66c49b2f8689"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:ae266ee8bf362cbf8a88ab6e6b389791a"><td class="memItemLeft" align="right" valign="top">unsigned int </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> &backend)</td></tr> -<tr class="memdesc:ae266ee8bf362cbf8a88ab6e6b389791a"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a6bab17bfd45c2fa4592c431bc25ad10e"><td class="memItemLeft" align="right" valign="top">constexpr char const * </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"> </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"> </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"> </td></tr> <tr class="memitem:a5b0313cb554380d6e4dfb24c31f9e605"><td class="memItemLeft" align="right" valign="top">std::ostream & </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5b0313cb554380d6e4dfb24c31f9e605">operator<<</a> (std::ostream &os, const std::vector< <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a> > &compute)</td></tr> -<tr class="memdesc:a5b0313cb554380d6e4dfb24c31f9e605"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a127a59fdf5e6d2fa74f87f9265de958b"><td class="memItemLeft" align="right" valign="top">std::ostream & </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a127a59fdf5e6d2fa74f87f9265de958b">operator<<</a> (std::ostream &os, const std::set< <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a> > &compute)</td></tr> -<tr class="memdesc:a127a59fdf5e6d2fa74f87f9265de958b"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a345acf4e0dc087eee3f9688029ee6328"><td class="memItemLeft" align="right" valign="top">std::ostream & </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a345acf4e0dc087eee3f9688029ee6328">operator<<</a> (std::ostream &os, const <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a> &compute)</td></tr> -<tr class="memdesc:a345acf4e0dc087eee3f9688029ee6328"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:afc46634e26857d037ee80bb5a74ef28a"><td class="memItemLeft" align="right" valign="top">std::ostream & </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#afc46634e26857d037ee80bb5a74ef28a">operator<<</a> (std::ostream &os, const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &id)</td></tr> <tr class="separator:afc46634e26857d037ee80bb5a74ef28a"><td class="memSeparator" colspan="2"> </td></tr> @@ -2481,7 +2483,7 @@ Functions</h2></td></tr> <tr class="separator:a872803f5667392efc3c8e5607bd453ad"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a733ae6b70d0bfa43433c3e7606992328"><td class="memTemplParams" colspan="2">template<typename TensorShapeIt > </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> </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"> </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"> </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"> </td></tr> <tr class="memitem:ae4ab3bf0697ad13316a6bcba0a8fade5"><td class="memTemplParams" colspan="2">template<typename ExceptionType > </td></tr> <tr class="memitem:ae4ab3bf0697ad13316a6bcba0a8fade5"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae4ab3bf0697ad13316a6bcba0a8fade5">ConditionalThrow</a> (bool condition, const std::string &message)</td></tr> @@ -2491,157 +2493,157 @@ Functions</h2></td></tr> <tr class="separator:a6ed414c05eb6d4c89e0e4a475a0479c0"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ae57b7f9e2cb7080bf10b28d1f72b558e"><td class="memTemplParams" colspan="2">template<typename ExceptionType , typename ComparedType > </td></tr> <tr class="memitem:ae57b7f9e2cb7080bf10b28d1f72b558e"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae57b7f9e2cb7080bf10b28d1f72b558e">ConditionalThrowIfNotEqual</a> (const std::string &message, const ComparedType &leftHandSide, const ComparedType &rightHandSide)</td></tr> -<tr class="memdesc:ae57b7f9e2cb7080bf10b28d1f72b558e"><td class="mdescLeft"> </td><td class="mdescRight">ComparedType must support: operator==(const ComparedType&) operator<<(ostream&, const ComparedType&) <a href="#ae57b7f9e2cb7080bf10b28d1f72b558e">More...</a><br /></td></tr> +<tr class="memdesc:ae57b7f9e2cb7080bf10b28d1f72b558e"><td class="mdescLeft"> </td><td class="mdescRight">ComparedType must support: operator==(const ComparedType&) operator<<(ostream&, const ComparedType&) <a href="namespacearmnn.xhtml#ae57b7f9e2cb7080bf10b28d1f72b558e">More...</a><br /></td></tr> <tr class="separator:ae57b7f9e2cb7080bf10b28d1f72b558e"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a82e98ef05fd67036d1195ba17174d685"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> </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> &network, const std::vector< <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> > &backendPreferences, const <a class="el" href="classarmnn_1_1_i_device_spec.xhtml">IDeviceSpec</a> &deviceSpec, const <a class="el" href="structarmnn_1_1_optimizer_options.xhtml">OptimizerOptions</a> &options=<a class="el" href="structarmnn_1_1_optimizer_options.xhtml">OptimizerOptions</a>(), <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > &> messages=<a class="el" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>())</td></tr> -<tr class="memdesc:a82e98ef05fd67036d1195ba17174d685"><td class="mdescLeft"> </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"> </td></tr> -<tr class="memitem:a25ff4c2830094e33a67f0963a3e4b24c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> </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> &inGraph, const std::vector< <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> > &backendPreferences, const <a class="el" href="classarmnn_1_1_i_device_spec.xhtml">IDeviceSpec</a> &deviceSpec, const <a class="el" href="structarmnn_1_1_optimizer_options.xhtml">OptimizerOptions</a> &options, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > &> messages=<a class="el" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>())</td></tr> -<tr class="memdesc:a25ff4c2830094e33a67f0963a3e4b24c"><td class="mdescLeft"> </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"> </td></tr> +<tr class="memitem:a2783360b253135639f4c63cfcaed6d48"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> </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> &network, const std::vector< <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> > &backendPreferences, const <a class="el" href="classarmnn_1_1_i_device_spec.xhtml">IDeviceSpec</a> &deviceSpec, const <a class="el" href="structarmnn_1_1_optimizer_options.xhtml">OptimizerOptions</a> &options=<a class="el" href="structarmnn_1_1_optimizer_options.xhtml">OptimizerOptions</a>(), <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > messages=<a class="el" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>())</td></tr> +<tr class="memdesc:a2783360b253135639f4c63cfcaed6d48"><td class="mdescLeft"> </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"> </td></tr> +<tr class="memitem:a4c79e02d43c1fac7d2f073663ef9ca5d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> </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> &inGraph, const std::vector< <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> > &backendPreferences, const <a class="el" href="classarmnn_1_1_i_device_spec.xhtml">IDeviceSpec</a> &deviceSpec, const <a class="el" href="structarmnn_1_1_optimizer_options.xhtml">OptimizerOptions</a> &options, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > messages=<a class="el" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>())</td></tr> +<tr class="memdesc:a4c79e02d43c1fac7d2f073663ef9ca5d"><td class="mdescLeft"> </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"> </td></tr> <tr class="memitem:a6e7dc8639c4b2f0a93031afff5182735"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a6e7dc8639c4b2f0a93031afff5182735"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:ab5569e5b664498e011e8bd92cc3cc5b2"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:ab5569e5b664498e011e8bd92cc3cc5b2"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a49b7a701c6a0c569015309102221c702"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &mean, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &var, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &beta, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gamma, const <a class="el" href="structarmnn_1_1_batch_normalization_descriptor.xhtml">BatchNormalizationDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a49b7a701c6a0c569015309102221c702"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:abb893c7adb7b64d0964bd244c46dd06b"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml">BatchToSpaceNdDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:abb893c7adb7b64d0964bd244c46dd06b"><td class="mdescLeft"> </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"> </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"> </td></tr> -<tr class="memitem:a757df85e956e425c1a082d35a98ca4a9"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *> inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a757df85e956e425c1a082d35a98ca4a9"><td class="mdescLeft"> </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"> </td></tr> +<tr class="memitem:ac8b3d64c6b38fe4bc59bd05959577fb6"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> * > inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> +<tr class="memdesc:ac8b3d64c6b38fe4bc59bd05959577fb6"><td class="mdescLeft"> </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"> </td></tr> <tr class="memitem:a0d2ad1212c8773f36160ef6e5e7db61f"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a0d2ad1212c8773f36160ef6e5e7db61f"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:af9decd6720482e602efc6ac5ef7dab50"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:af9decd6720482e602efc6ac5ef7dab50"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a080c11383c6a29b4295ae359cde5c19c"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a080c11383c6a29b4295ae359cde5c19c"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:aff785aa7c076b1d2f51f76fa0f0647e4"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> &descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &weights, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> > &biases, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:aff785aa7c076b1d2f51f76fa0f0647e4"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:aa6503439334e0a79181a51e084b0268f"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:aa6503439334e0a79181a51e084b0268f"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a87f06345ddd902d027eb8f792ca8cdb4"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">DepthwiseConvolution2dDescriptor</a> &descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &weights, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> > &biases, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a87f06345ddd902d027eb8f792ca8cdb4"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a1b4b4304198668d3af8e9d0c40d9343d"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a1b4b4304198668d3af8e9d0c40d9343d"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a3378acd6bc867577ee4bf1657945f1b5"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a3378acd6bc867577ee4bf1657945f1b5"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a5cdadf3ef2695b145f6861c919234e65"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a5cdadf3ef2695b145f6861c919234e65"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a4539c40ac5e36641f8ec10b88d658db1"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="structarmnn_1_1_fake_quantization_descriptor.xhtml">FakeQuantizationDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a4539c40ac5e36641f8ec10b88d658db1"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a2b6003e1d9226301e4badcac0b53c0ef"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a2b6003e1d9226301e4badcac0b53c0ef"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a0a72d1f8a0d43ee551c7ac654f8816fa"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &weights, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &biases, const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.xhtml">FullyConnectedDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a0a72d1f8a0d43ee551c7ac654f8816fa"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a1b71293424668995f13d6682af815938"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a1b71293424668995f13d6682af815938"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a3512b2f24950886288c5d01df1488f15"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a3512b2f24950886288c5d01df1488f15"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a57862de9b939281d1fe0242a8f04ead9"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_l2_normalization_descriptor.xhtml">L2NormalizationDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a57862de9b939281d1fe0242a8f04ead9"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a2c62d8aa5aeab36458f9ecfa5db1f785"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &outputStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &cellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &scratchBuffer, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &outputStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_lstm_descriptor.xhtml">LstmDescriptor</a> &descriptor, const <a class="el" href="structarmnn_1_1_lstm_input_params_info.xhtml">LstmInputParamsInfo</a> &paramsInfo, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a2c62d8aa5aeab36458f9ecfa5db1f785"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a977729771e5ab4263e933f785fa532a6"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnSupported=nullptr, size_t reasonIfUnSupportedMaxLength=0)</td></tr> -<tr class="memdesc:a977729771e5ab4263e933f785fa532a6"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a79698fa98352bffccc6723de84677680"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_mean_descriptor.xhtml">MeanDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a79698fa98352bffccc6723de84677680"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a1401f21967557c5f70830e06f9b10d4d"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a1401f21967557c5f70830e06f9b10d4d"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a8c24c4caabe9282b927f8777d7ca993f"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a8c24c4caabe9282b927f8777d7ca993f"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a29bdc2efd75bb437f4292dd9fcb5c89a"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a29bdc2efd75bb437f4292dd9fcb5c89a"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a9624be7520f71d00bfb769d94e0b088b"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a9624be7520f71d00bfb769d94e0b088b"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a23d54c0b96b63178811174d5e7b2d328"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_normalization_descriptor.xhtml">NormalizationDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a23d54c0b96b63178811174d5e7b2d328"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a60699e7f86e142739ccddd43c20c4fc0"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a60699e7f86e142739ccddd43c20c4fc0"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:ae467c9a579c8fb41427227a1c1e1cb4c"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:ae467c9a579c8fb41427227a1c1e1cb4c"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:ab4c606b53ae4d03aec1fcfe537c757ef"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_permute_descriptor.xhtml">PermuteDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:ab4c606b53ae4d03aec1fcfe537c757ef"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a3b4773564c3fd8c88e697ffe0afbe10d"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a3b4773564c3fd8c88e697ffe0afbe10d"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a36d55a20000a7b50f7369c3ceeca46bd"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &alpha, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a36d55a20000a7b50f7369c3ceeca46bd"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:af4f2d40a67380e91bd7ed0c1bcc4658f"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:af4f2d40a67380e91bd7ed0c1bcc4658f"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a237992b29706fe1c1653dae916ea67ef"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &previousCellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &previousOutputIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.xhtml">QuantizedLstmInputParamsInfo</a> &paramsInfo, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a237992b29706fe1c1653dae916ea67ef"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:aefa2e47c23dc8faac4b7edb12b5d1c2c"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_reduce_descriptor.xhtml">ReduceDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:aefa2e47c23dc8faac4b7edb12b5d1c2c"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:af5014cbc003abcf201d4372b0012734c"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="structarmnn_1_1_reshape_descriptor.xhtml">ReshapeDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:af5014cbc003abcf201d4372b0012734c"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a0c70182e7d26983945ae75229d607cce"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_resize_descriptor.xhtml">ResizeDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a0c70182e7d26983945ae75229d607cce"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a9d6e15bfef3872d70d5a3b74a25ac788"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a9d6e15bfef3872d70d5a3b74a25ac788"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a242f6c2f0376aaacd7d65a6f1498dea9"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_softmax_descriptor.xhtml">SoftmaxDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a242f6c2f0376aaacd7d65a6f1498dea9"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a55f4c243c58ee7a084f4a674d3c69948"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml">SpaceToBatchNdDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a55f4c243c58ee7a084f4a674d3c69948"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a32e51e4810a549b4a15d59ba73c64d2c"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.xhtml">SpaceToDepthDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a32e51e4810a549b4a15d59ba73c64d2c"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:adf1e16300483fadf9fd19299ca8a67c4"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const std::vector< std::reference_wrapper< <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> >> &outputs, const <a class="el" href="structarmnn_1_1_views_descriptor.xhtml">ViewsDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:adf1e16300483fadf9fd19299ca8a67c4"><td class="mdescLeft"> </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"> </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"> </td></tr> -<tr class="memitem:a10e8442be2b8596afd5770e98b904caa"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *> inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_stack_descriptor.xhtml">StackDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a10e8442be2b8596afd5770e98b904caa"><td class="mdescLeft"> </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"> </td></tr> +<tr class="memitem:a1ef301853035778cebf30782cae7b86d"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> * > inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_stack_descriptor.xhtml">StackDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> +<tr class="memdesc:a1ef301853035778cebf30782cae7b86d"><td class="mdescLeft"> </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"> </td></tr> <tr class="memitem:a8fdc5d28344915ccc0503e2e62b597ab"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.xhtml">StridedSliceDescriptor</a> &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a8fdc5d28344915ccc0503e2e62b597ab"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a1a74a4ecd0f25e6031ef05210a0cfe51"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:a1a74a4ecd0f25e6031ef05210a0cfe51"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:ae8a3ee5f60ae5ae2df15626eaf727ed0"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output1, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:ae8a3ee5f60ae5ae2df15626eaf727ed0"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:ac6cc8e0bd35d229486fe6d844d88e0d4"><td class="memItemLeft" align="right" valign="top">bool </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> &backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml">TransposeConvolution2dDescriptor</a> &descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &weights, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> > &biases, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr> -<tr class="memdesc:ac6cc8e0bd35d229486fe6d844d88e0d4"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a71f2cc06b097cb5c4f0a1f48130a823b"><td class="memItemLeft" align="right" valign="top">std::string </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"> </td></tr> @@ -2663,7 +2665,7 @@ Functions</h2></td></tr> <tr class="separator:a84f86b4de5adf0b164e811c87051a0ee"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a77780137c47f528921f6537447060f05"><td class="memTemplParams" colspan="2">template<typename T , class... Args> </td></tr> <tr class="memitem:a77780137c47f528921f6537447060f05"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a77780137c47f528921f6537447060f05">MakeOptional</a> (Args &&... args)</td></tr> -<tr class="memdesc:a77780137c47f528921f6537447060f05"><td class="mdescLeft"> </td><td class="mdescRight">Utility template that constructs an object of type T in-place and wraps it inside an Optional<T> object. <a href="#a77780137c47f528921f6537447060f05">More...</a><br /></td></tr> +<tr class="memdesc:a77780137c47f528921f6537447060f05"><td class="mdescLeft"> </td><td class="mdescRight">Utility template that constructs an object of type T in-place and wraps it inside an Optional<T> object. <a href="namespacearmnn.xhtml#a77780137c47f528921f6537447060f05">More...</a><br /></td></tr> <tr class="separator:a77780137c47f528921f6537447060f05"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:addb6b14dd1b632263ffe77430259a7c4"><td class="memItemLeft" align="right" valign="top">const char * </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"> </td></tr> @@ -2695,7 +2697,7 @@ Functions</h2></td></tr> <tr class="memitem:a637fea04314a9870c1dc4355c1bed429"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a637fea04314a9870c1dc4355c1bed429">StrEqual</a> (const char *strA, const char(&strB)[N])</td></tr> <tr class="separator:a637fea04314a9870c1dc4355c1bed429"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a65645fa03bf8cddfb9d8a9f83beeb6e8"><td class="memItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">armnn::Compute</a> </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"> </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"> </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"> </td></tr> <tr class="memitem:a81b5ff8545adad19a1c9d4ca076d552c"><td class="memItemLeft" align="right" valign="top">constexpr const char * </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"> </td></tr> @@ -2722,11 +2724,11 @@ Functions</h2></td></tr> <tr class="separator:aa6d7532e14af97577c054f96d0cf23b3"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ad773a034fb9983e15f3094b4c5c7c30c"><td class="memTemplParams" colspan="2">template<typename QuantizedType > </td></tr> <tr class="memitem:ad773a034fb9983e15f3094b4c5c7c30c"><td class="memTemplItemLeft" align="right" valign="top">QuantizedType </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"> </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"> </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"> </td></tr> <tr class="memitem:a855293b1be0581fb61ef6a1c5b027d0f"><td class="memTemplParams" colspan="2">template<typename QuantizedType > </td></tr> <tr class="memitem:a855293b1be0581fb61ef6a1c5b027d0f"><td class="memTemplItemLeft" align="right" valign="top">float </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"> </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"> </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"> </td></tr> <tr class="memitem:a9667bea652e3a5ef81fea59b71513ced"><td class="memItemLeft" align="right" valign="top">void </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> &info, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> dataType)</td></tr> <tr class="separator:a9667bea652e3a5ef81fea59b71513ced"><td class="memSeparator" colspan="2"> </td></tr> @@ -2762,11 +2764,11 @@ Functions</h2></td></tr> <tr class="separator:a1b5cfb3269fecb1dda8d0aee3c8212e6"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa4e89c644c511e255f6a7ecbd5d14686"><td class="memTemplParams" colspan="2">template<typename DestType , typename SourceType > </td></tr> <tr class="memitem:aa4e89c644c511e255f6a7ecbd5d14686"><td class="memTemplItemLeft" align="right" valign="top">DestType </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"> </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"> </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"> </td></tr> <tr class="memitem:a6baab222db3195a0bd77f488a81fd316"><td class="memTemplParams" colspan="2">template<typename DestType , typename SourceType > </td></tr> <tr class="memitem:a6baab222db3195a0bd77f488a81fd316"><td class="memTemplItemLeft" align="right" valign="top">auto </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6baab222db3195a0bd77f488a81fd316">PolymorphicPointerDowncast</a> (const SourceType &value)</td></tr> -<tr class="memdesc:a6baab222db3195a0bd77f488a81fd316"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:ac895f6f6897ce335b7b433201bae0b48"><td class="memItemLeft" align="right" valign="top">std::chrono::high_resolution_clock::time_point </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"> </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>< Function, Iterator > </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"> </td></tr> <tr class="memitem:aa59f7a819c3e29d10ffc41e5c0616872"><td class="memItemLeft" align="right" valign="top">void </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"> </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"> </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"> </td></tr> <tr class="memitem:ad734960f7ae60a86b74f6722f6c14332"><td class="memItemLeft" align="right" valign="top">bool </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"> </td></tr> @@ -2793,260 +2795,260 @@ Functions</h2></td></tr> <tr class="memitem:ac4fb1513cf6f4f3f40ab3d6559ec4067"><td class="memTemplParams" colspan="2">template<typename T > </td></tr> <tr class="memitem:ac4fb1513cf6f4f3f40ab3d6559ec4067"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:afb1e69829289fb07cc349c0884f27abd"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:afb1e69829289fb07cc349c0884f27abd"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:afb1e69829289fb07cc349c0884f27abd"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:acc630e11a5baa28ad5723568a7a60109"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:acc630e11a5baa28ad5723568a7a60109"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:acc630e11a5baa28ad5723568a7a60109"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a324e860c347972fce7a1c07531bed06e"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a324e860c347972fce7a1c07531bed06e"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a324e860c347972fce7a1c07531bed06e"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a317945cbed8d24f155e43d976a355c14"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a317945cbed8d24f155e43d976a355c14"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a317945cbed8d24f155e43d976a355c14"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:ae22db3ab5196edbb2e4e5244adc512e3"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:ae22db3ab5196edbb2e4e5244adc512e3"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:ae22db3ab5196edbb2e4e5244adc512e3"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a87ffe3fb58ec36989d343e53e23fb0f8"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a87ffe3fb58ec36989d343e53e23fb0f8"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a87ffe3fb58ec36989d343e53e23fb0f8"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a0bce3e1a80419bc6966f60c8f2db9b92"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a0bce3e1a80419bc6966f60c8f2db9b92"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a0bce3e1a80419bc6966f60c8f2db9b92"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:af99801cff508d065bede5283a0ea1dc9"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:af99801cff508d065bede5283a0ea1dc9"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:af99801cff508d065bede5283a0ea1dc9"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a43b8024cb70c07116be132ca28b12a21"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a43b8024cb70c07116be132ca28b12a21"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a43b8024cb70c07116be132ca28b12a21"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a300c356944bb1e9d2dff6191d1c3501c"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a300c356944bb1e9d2dff6191d1c3501c"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a300c356944bb1e9d2dff6191d1c3501c"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a307007c2249288fe158bfdfaf9e1c413"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a307007c2249288fe158bfdfaf9e1c413"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a307007c2249288fe158bfdfaf9e1c413"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a4471d39d8390fc550c1f8688639e66f5"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a4471d39d8390fc550c1f8688639e66f5"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a4471d39d8390fc550c1f8688639e66f5"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:af8df06bed5f1257864645e45948afa5c"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:af8df06bed5f1257864645e45948afa5c"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:af8df06bed5f1257864645e45948afa5c"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:ab2f52d0c728933e36f581a07676d9fe9"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:ab2f52d0c728933e36f581a07676d9fe9"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:ab2f52d0c728933e36f581a07676d9fe9"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a8aa8025b92a7d302536ab63c1f0ea99c"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a8aa8025b92a7d302536ab63c1f0ea99c"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a8aa8025b92a7d302536ab63c1f0ea99c"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:ad596268fcd03c87a4b6fde86f4732546"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:ad596268fcd03c87a4b6fde86f4732546"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:ad596268fcd03c87a4b6fde86f4732546"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a939154289f544a02baec0735b27b8894"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a939154289f544a02baec0735b27b8894"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a939154289f544a02baec0735b27b8894"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a26a46c27bca08b5bd26abba341f1d795"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a26a46c27bca08b5bd26abba341f1d795"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a26a46c27bca08b5bd26abba341f1d795"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a95e2d190d7483017b4f4841dd07776e5"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a95e2d190d7483017b4f4841dd07776e5"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a95e2d190d7483017b4f4841dd07776e5"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a22772d461066f995cd72d13066b0f46d"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a22772d461066f995cd72d13066b0f46d"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a22772d461066f995cd72d13066b0f46d"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a955b1001b8c57c60ce443a1e31468f20"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a955b1001b8c57c60ce443a1e31468f20"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a955b1001b8c57c60ce443a1e31468f20"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a72f7601d11f32c8d9ccb49a80fcf662a"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a72f7601d11f32c8d9ccb49a80fcf662a"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a72f7601d11f32c8d9ccb49a80fcf662a"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a4acae0cdcdfab8e941af5c4e42e58cb3"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a4acae0cdcdfab8e941af5c4e42e58cb3"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a4acae0cdcdfab8e941af5c4e42e58cb3"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a12fdb9a7f3cb197316e3e67e036216dc"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a12fdb9a7f3cb197316e3e67e036216dc"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a12fdb9a7f3cb197316e3e67e036216dc"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a575f5487e62465b6b9edbc447a26f32f"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a575f5487e62465b6b9edbc447a26f32f"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a575f5487e62465b6b9edbc447a26f32f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:aa689e4a3aa77e9d9e5851f566c5eb8b3"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:aa689e4a3aa77e9d9e5851f566c5eb8b3"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:aa689e4a3aa77e9d9e5851f566c5eb8b3"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a548fb17a9bff172e751ae4bd3add62b5"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a548fb17a9bff172e751ae4bd3add62b5"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a548fb17a9bff172e751ae4bd3add62b5"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:af786ed151cee66263c0ce890d11d15c9"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:af786ed151cee66263c0ce890d11d15c9"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:af786ed151cee66263c0ce890d11d15c9"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:adef1c8c63daa9d348a29e74eac33a054"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:adef1c8c63daa9d348a29e74eac33a054"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:adef1c8c63daa9d348a29e74eac33a054"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a57bcf309be7adcc91001834979f87bde"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a57bcf309be7adcc91001834979f87bde"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a57bcf309be7adcc91001834979f87bde"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a36f16b97bcb662caaa4eae24ea16cccf"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a36f16b97bcb662caaa4eae24ea16cccf"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a36f16b97bcb662caaa4eae24ea16cccf"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a78bb83e7a83c970a54ffe923386a79d0"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a78bb83e7a83c970a54ffe923386a79d0"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a78bb83e7a83c970a54ffe923386a79d0"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:afb6f9bd4f43118749a0336074bed7b35"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:afb6f9bd4f43118749a0336074bed7b35"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:afb6f9bd4f43118749a0336074bed7b35"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a0d08fb555c6d1cba705fd73b71797a28"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a0d08fb555c6d1cba705fd73b71797a28"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a0d08fb555c6d1cba705fd73b71797a28"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:ac2bd34e0328cda2e23ccb4c79fa72960"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:ac2bd34e0328cda2e23ccb4c79fa72960"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:ac2bd34e0328cda2e23ccb4c79fa72960"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a6b231c8a547d4030d9a4a1618810c20b"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a6b231c8a547d4030d9a4a1618810c20b"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a6b231c8a547d4030d9a4a1618810c20b"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:af079ba32db74f53aba1ad19193cd2a4b"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:af079ba32db74f53aba1ad19193cd2a4b"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:af079ba32db74f53aba1ad19193cd2a4b"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:aa17969606f64ea581c28431f2395e653"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:aa17969606f64ea581c28431f2395e653"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:aa17969606f64ea581c28431f2395e653"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a70f3d83f6d1e3918eab895c8083058fa"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a70f3d83f6d1e3918eab895c8083058fa"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a70f3d83f6d1e3918eab895c8083058fa"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a9e8199bdc39f928f694591a41d7aa0c0"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a9e8199bdc39f928f694591a41d7aa0c0"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a9e8199bdc39f928f694591a41d7aa0c0"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:ad32a13408ace1c1fa520ed64a2cbe70f"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:ad32a13408ace1c1fa520ed64a2cbe70f"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:ad32a13408ace1c1fa520ed64a2cbe70f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a40f1546c0fa69f318eeab4b29cc64b70"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a40f1546c0fa69f318eeab4b29cc64b70"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a40f1546c0fa69f318eeab4b29cc64b70"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a140713619ee498a149854a5376b8d072"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a140713619ee498a149854a5376b8d072"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a140713619ee498a149854a5376b8d072"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a7a6e68f66d1d3819640b0f2d46a55fd1"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a7a6e68f66d1d3819640b0f2d46a55fd1"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a7a6e68f66d1d3819640b0f2d46a55fd1"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:ab6f1994db909dcc399cb1f8bc50c2d3d"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:ab6f1994db909dcc399cb1f8bc50c2d3d"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:ab6f1994db909dcc399cb1f8bc50c2d3d"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a1e6b17606926b8f69dbeda7f7ff1df95"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a1e6b17606926b8f69dbeda7f7ff1df95"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a1e6b17606926b8f69dbeda7f7ff1df95"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:ade84059b48b38da3a233bed287864c5b"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:ade84059b48b38da3a233bed287864c5b"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:ade84059b48b38da3a233bed287864c5b"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a5afa84427b91f83f2977382da7a9c62f"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a5afa84427b91f83f2977382da7a9c62f"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a5afa84427b91f83f2977382da7a9c62f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a6e5eaa19ff232f11daa9a1c6caccf7fe"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a6e5eaa19ff232f11daa9a1c6caccf7fe"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a6e5eaa19ff232f11daa9a1c6caccf7fe"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a58a5defa35b12773a97760efadffef4f"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a58a5defa35b12773a97760efadffef4f"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a58a5defa35b12773a97760efadffef4f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:aaaaf64c0888ab25bfae770bd4c2ec34b"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:aaaaf64c0888ab25bfae770bd4c2ec34b"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:aaaaf64c0888ab25bfae770bd4c2ec34b"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a1da1712abdf8eb56a3fd34d09a30f88a"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a1da1712abdf8eb56a3fd34d09a30f88a"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a1da1712abdf8eb56a3fd34d09a30f88a"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a31bcd6f755df954a4d7b020a09499105"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a31bcd6f755df954a4d7b020a09499105"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a31bcd6f755df954a4d7b020a09499105"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a0c5d6fb244a3e38da85257afb91edd80"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a0c5d6fb244a3e38da85257afb91edd80"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a0c5d6fb244a3e38da85257afb91edd80"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a2419883b22222c7bad914095ae3a9ad2"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a2419883b22222c7bad914095ae3a9ad2"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a2419883b22222c7bad914095ae3a9ad2"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a6a17f58da2071720e3003a56a092aab3"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a6a17f58da2071720e3003a56a092aab3"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a6a17f58da2071720e3003a56a092aab3"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:aafc370ea363f0565c3a8bced1e37c79e"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:aafc370ea363f0565c3a8bced1e37c79e"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:aafc370ea363f0565c3a8bced1e37c79e"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a914ed6d4cdc4525ff0020148d4c4155c"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a914ed6d4cdc4525ff0020148d4c4155c"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a914ed6d4cdc4525ff0020148d4c4155c"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a3cbbb4e00618b072ace46751e660a295"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a3cbbb4e00618b072ace46751e660a295"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a3cbbb4e00618b072ace46751e660a295"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:af6af4b51e08d3e811620811ab5e0cd2d"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:af6af4b51e08d3e811620811ab5e0cd2d"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:af6af4b51e08d3e811620811ab5e0cd2d"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:ac2d31ced5505a9d05287f5b71d25e34a"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:ac2d31ced5505a9d05287f5b71d25e34a"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:ac2d31ced5505a9d05287f5b71d25e34a"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a81c31de4f532a95ab85ed6d999029332"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a81c31de4f532a95ab85ed6d999029332"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a81c31de4f532a95ab85ed6d999029332"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a24d3abbfc1ed81df673452c7148aa0cc"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a24d3abbfc1ed81df673452c7148aa0cc"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a24d3abbfc1ed81df673452c7148aa0cc"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:ab676aab9119d1417764849099a099ecf"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:ab676aab9119d1417764849099a099ecf"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:ab676aab9119d1417764849099a099ecf"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a1b5ff142f1d4420a8d83d9bcff1bfff4"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a1b5ff142f1d4420a8d83d9bcff1bfff4"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a1b5ff142f1d4420a8d83d9bcff1bfff4"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:ad640080ff4ea3e4f9ff05823e32ce15f"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:ad640080ff4ea3e4f9ff05823e32ce15f"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:ad640080ff4ea3e4f9ff05823e32ce15f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a9cc235c8c5e2ef3d2788cd558d676b0a"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a9cc235c8c5e2ef3d2788cd558d676b0a"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a9cc235c8c5e2ef3d2788cd558d676b0a"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a110b9fdf7f17a1d065cd59ebc4bb76f7"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a110b9fdf7f17a1d065cd59ebc4bb76f7"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a110b9fdf7f17a1d065cd59ebc4bb76f7"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:af44c8ebb1b55f4c42cc301d0bf030aa5"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:af44c8ebb1b55f4c42cc301d0bf030aa5"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:af44c8ebb1b55f4c42cc301d0bf030aa5"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a60af5a86cf0261d0bdf4312736ab4461"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a60af5a86cf0261d0bdf4312736ab4461"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a60af5a86cf0261d0bdf4312736ab4461"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a598dbe8e8dfddfede22b52ebd0d437cb"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a598dbe8e8dfddfede22b52ebd0d437cb"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a598dbe8e8dfddfede22b52ebd0d437cb"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:aac367be4f6169b13d3a8a9250d2283d6"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:aac367be4f6169b13d3a8a9250d2283d6"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:aac367be4f6169b13d3a8a9250d2283d6"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> </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"> </td></tr> -<tr class="memitem:a13c7d751e4d37f65a6d40c3c6e50d2b8"><td class="memTemplParams" colspan="2">template<typename T , typename V > </td></tr> -<tr class="memitem:a13c7d751e4d37f65a6d40c3c6e50d2b8"><td class="memTemplItemLeft" align="right" valign="top">void </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>< T &> optionalRef, V &&val)</td></tr> -<tr class="separator:a13c7d751e4d37f65a6d40c3c6e50d2b8"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:af6dbe371ec651a8e0063624fdf32afc0"><td class="memTemplParams" colspan="2">template<typename Float16Func , typename Float32Func , typename Uint8Func , typename Int32Func , typename BooleanFunc , typename ... Params> </td></tr> -<tr class="memitem:af6dbe371ec651a8e0063624fdf32afc0"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string &> reasonIfUnsupported, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataType, Float16Func float16FuncPtr, Float32Func float32FuncPtr, Uint8Func uint8FuncPtr, Int32Func int32FuncPtr, BooleanFunc booleanFuncPtr, Params &&... params)</td></tr> -<tr class="separator:af6dbe371ec651a8e0063624fdf32afc0"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aeaee60c3c6c67a7cf37bbef45b89fc0a"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> -<tr class="memitem:aeaee60c3c6c67a7cf37bbef45b89fc0a"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string &> reasonIfUnsupported, Params &&... params)</td></tr> -<tr class="separator:aeaee60c3c6c67a7cf37bbef45b89fc0a"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a6e64aab48baba12883c73e90bfd07e77"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> -<tr class="memitem:a6e64aab48baba12883c73e90bfd07e77"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string &> reasonIfUnsupported, Params &&... params)</td></tr> -<tr class="separator:a6e64aab48baba12883c73e90bfd07e77"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a621c8ffe11bba3d7ab304a9ad3feec2f"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> -<tr class="memitem:a621c8ffe11bba3d7ab304a9ad3feec2f"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string &> reasonIfUnsupported, Params &&... params)</td></tr> -<tr class="separator:a621c8ffe11bba3d7ab304a9ad3feec2f"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a02d627e25da543b79ee8a59a1193a426"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> -<tr class="memitem:a02d627e25da543b79ee8a59a1193a426"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string &> reasonIfUnsupported, Params &&... params)</td></tr> -<tr class="separator:a02d627e25da543b79ee8a59a1193a426"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a4e4802d0916cb8b7da508ab03ce1f163"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> -<tr class="memitem:a4e4802d0916cb8b7da508ab03ce1f163"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string &> reasonIfUnsupported, Params &&... params)</td></tr> -<tr class="separator:a4e4802d0916cb8b7da508ab03ce1f163"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a07ae80b502ab664f1aaf7d6c00725982"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> -<tr class="memitem:a07ae80b502ab664f1aaf7d6c00725982"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string &> reasonIfUnsupported, Params &&... params)</td></tr> -<tr class="separator:a07ae80b502ab664f1aaf7d6c00725982"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a0b55e509dd7e3bfea233a389a18c21e6"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> -<tr class="memitem:a0b55e509dd7e3bfea233a389a18c21e6"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string &> reasonIfUnsupported, Params &&... params)</td></tr> -<tr class="separator:a0b55e509dd7e3bfea233a389a18c21e6"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a216969fbba54df95de3e68435b8074d7"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> -<tr class="memitem:a216969fbba54df95de3e68435b8074d7"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string &> reasonIfUnsupported, Params &&... params)</td></tr> -<tr class="separator:a216969fbba54df95de3e68435b8074d7"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ad3d0087e2533d808debd5c959fb3901f"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> -<tr class="memitem:ad3d0087e2533d808debd5c959fb3901f"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string &> reasonIfUnsupported, Params &&... params)</td></tr> -<tr class="separator:ad3d0087e2533d808debd5c959fb3901f"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2febf8d85a92b69e4a677a7c632418ee"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> -<tr class="memitem:a2febf8d85a92b69e4a677a7c632418ee"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string &> reasonIfUnsupported, Params &&... params)</td></tr> -<tr class="separator:a2febf8d85a92b69e4a677a7c632418ee"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a8c88a8a91827e9ccc3cf3ce6b14fcd17"><td class="memTemplParams" colspan="2">template<typename T , typename V > </td></tr> +<tr class="memitem:a8c88a8a91827e9ccc3cf3ce6b14fcd17"><td class="memTemplItemLeft" align="right" valign="top">void </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>< T & > optionalRef, V &&val)</td></tr> +<tr class="separator:a8c88a8a91827e9ccc3cf3ce6b14fcd17"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a23a5267702f036fe70a34f91e6c07490"><td class="memTemplParams" colspan="2">template<typename Float16Func , typename Float32Func , typename Uint8Func , typename Int32Func , typename BooleanFunc , typename ... Params> </td></tr> +<tr class="memitem:a23a5267702f036fe70a34f91e6c07490"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string & > reasonIfUnsupported, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataType, Float16Func float16FuncPtr, Float32Func float32FuncPtr, Uint8Func uint8FuncPtr, Int32Func int32FuncPtr, BooleanFunc booleanFuncPtr, Params &&... params)</td></tr> +<tr class="separator:a23a5267702f036fe70a34f91e6c07490"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a1c60a2624c7cabd60237bbeec07c70a0"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> +<tr class="memitem:a1c60a2624c7cabd60237bbeec07c70a0"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string & > reasonIfUnsupported, Params &&... params)</td></tr> +<tr class="separator:a1c60a2624c7cabd60237bbeec07c70a0"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a589f726622788501df0463460dac63c1"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> +<tr class="memitem:a589f726622788501df0463460dac63c1"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string & > reasonIfUnsupported, Params &&... params)</td></tr> +<tr class="separator:a589f726622788501df0463460dac63c1"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a9b083e0201523891e08a2d86405c4e46"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> +<tr class="memitem:a9b083e0201523891e08a2d86405c4e46"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string & > reasonIfUnsupported, Params &&... params)</td></tr> +<tr class="separator:a9b083e0201523891e08a2d86405c4e46"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a5b1231d5607d2dc1909c1cec828ba415"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> +<tr class="memitem:a5b1231d5607d2dc1909c1cec828ba415"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string & > reasonIfUnsupported, Params &&... params)</td></tr> +<tr class="separator:a5b1231d5607d2dc1909c1cec828ba415"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:ae5039794f89bfaf2ebbe28fd35a815cf"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> +<tr class="memitem:ae5039794f89bfaf2ebbe28fd35a815cf"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string & > reasonIfUnsupported, Params &&... params)</td></tr> +<tr class="separator:ae5039794f89bfaf2ebbe28fd35a815cf"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a7560a9e76988007d33039df264aeed3f"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> +<tr class="memitem:a7560a9e76988007d33039df264aeed3f"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string & > reasonIfUnsupported, Params &&... params)</td></tr> +<tr class="separator:a7560a9e76988007d33039df264aeed3f"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a59aa54d3652ffbef6793f6447314cbd0"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> +<tr class="memitem:a59aa54d3652ffbef6793f6447314cbd0"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string & > reasonIfUnsupported, Params &&... params)</td></tr> +<tr class="separator:a59aa54d3652ffbef6793f6447314cbd0"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a8cd64bd8701401fe3dda7eab78011d8a"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> +<tr class="memitem:a8cd64bd8701401fe3dda7eab78011d8a"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string & > reasonIfUnsupported, Params &&... params)</td></tr> +<tr class="separator:a8cd64bd8701401fe3dda7eab78011d8a"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a55cbb728001f752173f5d4e34a874e83"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> +<tr class="memitem:a55cbb728001f752173f5d4e34a874e83"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string & > reasonIfUnsupported, Params &&... params)</td></tr> +<tr class="separator:a55cbb728001f752173f5d4e34a874e83"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:abc2b8312f25f2daa3cc277f1307b2067"><td class="memTemplParams" colspan="2">template<typename ... Params> </td></tr> +<tr class="memitem:abc2b8312f25f2daa3cc277f1307b2067"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string & > reasonIfUnsupported, Params &&... params)</td></tr> +<tr class="separator:abc2b8312f25f2daa3cc277f1307b2067"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a52928589effc0b9cbb170a93ea792d47"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a52928589effc0b9cbb170a93ea792d47">ValidateSourcesMatchOptimizedNetwork</a> (std::vector< <a class="el" href="structarmnn_1_1_backend_options.xhtml">BackendOptions</a> > optimizedOptions, const <a class="el" href="structarmnn_1_1_i_network_properties.xhtml">INetworkProperties</a> &networkProperties)</td></tr> -<tr class="memdesc:a52928589effc0b9cbb170a93ea792d47"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a5acae80f1d8fd03cdb3878bd356683d7"><td class="memItemLeft" align="right" valign="top">void </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> &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"> </td></tr> @@ -3057,30 +3059,30 @@ Functions</h2></td></tr> <tr class="memitem:a5f523aee1752323aeaf899085649320b"><td class="memTemplParams" colspan="2">template<LogSeverity Level> </td></tr> <tr class="memitem:a5f523aee1752323aeaf899085649320b"><td class="memTemplItemLeft" align="right" valign="top">void </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"> </td></tr> -<tr class="memitem:a7658f93d899c8646515a29370e6aa994"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7658f93d899c8646515a29370e6aa994">ReportError</a> (const std::string &errorMessage, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > &> errorMessages)</td></tr> -<tr class="separator:a7658f93d899c8646515a29370e6aa994"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a38e626422579decc13e3ee37da1a84c9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a38e626422579decc13e3ee37da1a84c9">ReportWarning</a> (const std::string &warningMessage, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > &> warningMessages)</td></tr> -<tr class="separator:a38e626422579decc13e3ee37da1a84c9"><td class="memSeparator" colspan="2"> </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> </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> &backendSettings, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > &> errMessages)</td></tr> -<tr class="separator:ae50fff9aa2a1ce46392d8641c10aa3bc"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:af002111f64aee648e3258247075cae36"><td class="memItemLeft" align="right" valign="top">bool </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>< std::vector< std::string > &> errMessages)</td></tr> -<tr class="separator:af002111f64aee648e3258247075cae36"><td class="memSeparator" colspan="2"> </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> </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> &backendSettings, <a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &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< <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> > &availablePreferredBackends, std::string &reasonIfUnsupported, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > &> errMessages)</td></tr> -<tr class="separator:a56f168327453ea4461cbc1c0ac7f15b6"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a3cf1cee98e0ed8b54263ec7279f6ec69"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3cf1cee98e0ed8b54263ec7279f6ec69">ReportError</a> (const std::string &errorMessage, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > errorMessages)</td></tr> +<tr class="separator:a3cf1cee98e0ed8b54263ec7279f6ec69"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a070307e9ee0f7969f7d4320145d1dddb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a070307e9ee0f7969f7d4320145d1dddb">ReportWarning</a> (const std::string &warningMessage, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > warningMessages)</td></tr> +<tr class="separator:a070307e9ee0f7969f7d4320145d1dddb"><td class="memSeparator" colspan="2"> </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> </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> &backendSettings, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > errMessages)</td></tr> +<tr class="separator:aeee4e55e6ad4fe12b2168f9fd1e88141"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a8bf1222ae8931bf663fa076b3e3b6f0e"><td class="memItemLeft" align="right" valign="top">bool </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>< std::vector< std::string > & > errMessages)</td></tr> +<tr class="separator:a8bf1222ae8931bf663fa076b3e3b6f0e"><td class="memSeparator" colspan="2"> </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> </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> &backendSettings, <a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &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< <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> > &availablePreferredBackends, std::string &reasonIfUnsupported, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > errMessages)</td></tr> +<tr class="separator:abd660675ae5a9df777dcdb30c50224f6"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a2b8ec686784330e8f20e4444f1ed7e98"><td class="memItemLeft" align="right" valign="top">std::vector< <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> > </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"> </td></tr> -<tr class="memitem:a3a26a0174216ded9353ca943a66709dc"><td class="memItemLeft" align="right" valign="top">void </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>< std::vector< std::string > &> errMessages, <a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a> &result, <a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &backendSettings, std::vector< <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> > &availablePreferredBackends)</td></tr> -<tr class="separator:a3a26a0174216ded9353ca943a66709dc"><td class="memSeparator" colspan="2"> </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> </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> &backendSettings, <a class="el" href="classarmnn_1_1_graph.xhtml#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> &firstLayer, <a class="el" href="classarmnn_1_1_graph.xhtml#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> &lastLayer, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > &> errMessages)</td></tr> -<tr class="separator:a224df72b3d7a3bba8609bc167286e3f7"><td class="memSeparator" colspan="2"> </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> </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> &backendSettings, <a class="el" href="classarmnn_1_1_subgraph_view.xhtml#a308b86dbdd0a745cef76904674c9850f">SubgraphView::IConnectableLayerIterator</a> &firstLayer, <a class="el" href="classarmnn_1_1_subgraph_view.xhtml#a308b86dbdd0a745cef76904674c9850f">SubgraphView::IConnectableLayerIterator</a> &lastLayer, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > &> errMessages)</td></tr> -<tr class="separator:a42b993acd5865dfb937686b9760801e1"><td class="memSeparator" colspan="2"> </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> </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> &backendSettings, <a class="el" href="classarmnn_1_1_subgraph_view.xhtml">SubgraphView</a> &subgraph, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > &> errMessages)</td></tr> -<tr class="separator:a48e4d70ae8893f6f1a8ebfced5b03a07"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:af52a698836d638d0a71263c6c1496a05"><td class="memItemLeft" align="right" valign="top">void </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>< std::vector< std::string > & > errMessages, <a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a> &result, <a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &backendSettings, std::vector< <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> > &availablePreferredBackends)</td></tr> +<tr class="separator:af52a698836d638d0a71263c6c1496a05"><td class="memSeparator" colspan="2"> </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> </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> &backendSettings, <a class="el" href="classarmnn_1_1_graph.xhtml#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> &firstLayer, <a class="el" href="classarmnn_1_1_graph.xhtml#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> &lastLayer, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > errMessages)</td></tr> +<tr class="separator:a839ad76f1f52a70b540805b231f05d9c"><td class="memSeparator" colspan="2"> </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> </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> &backendSettings, <a class="el" href="classarmnn_1_1_subgraph_view.xhtml#a308b86dbdd0a745cef76904674c9850f">SubgraphView::IConnectableLayerIterator</a> &firstLayer, <a class="el" href="classarmnn_1_1_subgraph_view.xhtml#a308b86dbdd0a745cef76904674c9850f">SubgraphView::IConnectableLayerIterator</a> &lastLayer, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > errMessages)</td></tr> +<tr class="separator:a4a0c704ab68e6741579b60b681e5d919"><td class="memSeparator" colspan="2"> </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> </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> &backendSettings, <a class="el" href="classarmnn_1_1_subgraph_view.xhtml">SubgraphView</a> &subgraph, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > errMessages)</td></tr> +<tr class="separator:a0ea4ff80d0075ff847e96dc12e734368"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a1ec6b4c20ed294a96cf94c33c24caaf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> </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> &handleFactoryRegistry, <a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &backendSettings)</td></tr> <tr class="separator:a1ec6b4c20ed294a96cf94c33c24caaf5"><td class="memSeparator" colspan="2"> </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> </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> &backendSettings, <a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &backends, const <a class="el" href="namespacearmnn.xhtml#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> &modelOptions, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > &> errMessages)</td></tr> -<tr class="separator:a9f31d956861d8277fa5f8fb877dbbb6c"><td class="memSeparator" colspan="2"> </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> </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> &backendSettings, <a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &backends, const <a class="el" href="namespacearmnn.xhtml#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> &modelOptions, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > errMessages)</td></tr> +<tr class="separator:ac39f2b15d34d3e2fc74d586fc3e26231"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a5ee4a1cca55f69b31e625c786655ed1a"><td class="memItemLeft" align="right" valign="top">bool </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> &registry)</td></tr> <tr class="separator:a5ee4a1cca55f69b31e625c786655ed1a"><td class="memSeparator" colspan="2"> </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> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5f34318a121e010053655204df94720c">CalculateSlotOptionForInput</a> (<a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &backends, <a class="el" href="classarmnn_1_1_output_slot.xhtml">OutputSlot</a> &slot, <a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &registry, bool importEnabled)</td></tr> @@ -3091,8 +3093,8 @@ Functions</h2></td></tr> <tr class="separator:ad52508167694d6d259525b3eec1a4267"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a738d3243c1dc564304d78908c6112e4f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016">EdgeStrategy</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a738d3243c1dc564304d78908c6112e4f">CalculateEdgeStrategy</a> (<a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &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> &layer, const <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &connectedLayer, <a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &registry, bool importEnabled)</td></tr> <tr class="separator:a738d3243c1dc564304d78908c6112e4f"><td class="memSeparator" colspan="2"> </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> </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> &optGraph, <a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &backends, <a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &registry, bool importEnabled, bool exportEnabled, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > &> errMessages)</td></tr> -<tr class="separator:abdde0870cf702c8284c9693c68093fd3"><td class="memSeparator" colspan="2"> </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> </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> &optGraph, <a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &backends, <a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &registry, bool importEnabled, bool exportEnabled, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > errMessages)</td></tr> +<tr class="separator:acbf7c9a630f03ece800f807d946239ab"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ad31c56533e4f9f9f51719599fbfcf7bb"><td class="memItemLeft" align="right" valign="top">std::vector< <a class="el" href="classarmnn_1_1_convert_fp16_to_fp32_layer.xhtml">ConvertFp16ToFp32Layer</a> * > </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> &graph, <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &layer, bool expectCorrectInputType)</td></tr> <tr class="separator:ad31c56533e4f9f9f51719599fbfcf7bb"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:abf625e50a5eaeafce5b39580dc95a9d3"><td class="memItemLeft" align="right" valign="top">std::vector< <a class="el" href="classarmnn_1_1_convert_fp32_to_fp16_layer.xhtml">ConvertFp32ToFp16Layer</a> * > </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> &graph, <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &layer)</td></tr> @@ -3122,8 +3124,8 @@ Functions</h2></td></tr> <tr class="separator:a20f74b679d59b52e9fae3bbef8f10ffb"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ae9034dd6e9c5bed6badf4f7513339f74"><td class="memItemLeft" align="right" valign="top">void </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> &detailsObject, std::string layerDetailsStr)</td></tr> <tr class="separator:ae9034dd6e9c5bed6badf4f7513339f74"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a50805c29c35b9903c2dea301d8091711"><td class="memItemLeft" align="right" valign="top">void </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> &parentObject, std::map< const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *, std::vector< const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *>> descendantsMap)</td></tr> -<tr class="separator:a50805c29c35b9903c2dea301d8091711"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a7d4e24d8e296ccced976d626e08b742a"><td class="memItemLeft" align="right" valign="top">void </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> &parentObject, std::map< const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *, std::vector< const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> * >> descendantsMap)</td></tr> +<tr class="separator:a7d4e24d8e296ccced976d626e08b742a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a2386397752b62040e3b0647e8bc4dc70"><td class="memTemplParams" colspan="2">template<typename DescriptorType > </td></tr> <tr class="memitem:a2386397752b62040e3b0647e8bc4dc70"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2386397752b62040e3b0647e8bc4dc70">ProfilingUpdateDescriptions</a> (const std::string &name, const DescriptorType &desc, const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &infos, const arm::pipe::ProfilingGuid guid)</td></tr> <tr class="separator:a2386397752b62040e3b0647e8bc4dc70"><td class="memSeparator" colspan="2"> </td></tr> @@ -3185,9 +3187,9 @@ Functions</h2></td></tr> <tr class="memitem:a189b5dedbf7a3cbcbe7760ac72c7b07d"><td class="memTemplParams" colspan="2">template<typename LayerType > </td></tr> <tr class="memitem:a189b5dedbf7a3cbcbe7760ac72c7b07d"><td class="memTemplItemLeft" align="right" valign="top">std::vector< <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> * > </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> &optimizationViews, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="structarmnn_1_1_reduce_descriptor.xhtml">ReduceDescriptor</a> &desc)</td></tr> <tr class="separator:a189b5dedbf7a3cbcbe7760ac72c7b07d"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a8134b220b50f01163c5fcd8d2d4524a2"><td class="memTemplParams" colspan="2">template<typename LayerType > </td></tr> -<tr class="memitem:a8134b220b50f01163c5fcd8d2d4524a2"><td class="memTemplItemLeft" align="right" valign="top">void </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> &optimizationViews, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, std::vector< <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> *> &layers)</td></tr> -<tr class="separator:a8134b220b50f01163c5fcd8d2d4524a2"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:abecdb9c231b9ced02bec27a1ca54184f"><td class="memTemplParams" colspan="2">template<typename LayerType > </td></tr> +<tr class="memitem:abecdb9c231b9ced02bec27a1ca54184f"><td class="memTemplItemLeft" align="right" valign="top">void </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> &optimizationViews, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, std::vector< <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> * > &layers)</td></tr> +<tr class="separator:abecdb9c231b9ced02bec27a1ca54184f"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a3ca05ac77af0a0444ff34c1319094f6d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a> </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> &value, <a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a> defaultValue)</td></tr> <tr class="separator:a3ca05ac77af0a0444ff34c1319094f6d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ab562537b5c1ef1e6cde9db9f5fa322bd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab562537b5c1ef1e6cde9db9f5fa322bd">ConfigureTuner</a> (arm_compute::CLTuner &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< unsigned int > </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> &desc, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &input)</td></tr> <tr class="separator:a8cbabc875597b3bed0ccdc0adb289fde"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a44a3b98b37a25c995aa9e4dae7d7b456"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a> (const int &armnnAxis, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &tensor)</td></tr> -<tr class="memdesc:a44a3b98b37a25c995aa9e4dae7d7b456"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:aa1e65a4dea8c65b76423e121b880d059"><td class="memItemLeft" align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa1e65a4dea8c65b76423e121b880d059">ComputePositiveAxis</a> (const int &axis, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &tensor)</td></tr> -<tr class="memdesc:aa1e65a4dea8c65b76423e121b880d059"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a855760e957668804d33c0691a802496e"><td class="memItemLeft" align="right" valign="top">arm_compute::Conv3dInfo </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"> </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"> </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"> </td></tr> <tr class="memitem:a3f2c9ea2505a2cac1d05e17e989aff2b"><td class="memItemLeft" align="right" valign="top">arm_compute::Conv3dInfo </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"> </td></tr> @@ -3239,13 +3241,13 @@ Functions</h2></td></tr> <tr class="memitem:a03ab984d93d0f240f31274499b72e6b0"><td class="memItemLeft" align="right" valign="top">arm_compute::ReductionOperation </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> &descriptor)</td></tr> <tr class="separator:a03ab984d93d0f240f31274499b72e6b0"><td class="memSeparator" colspan="2"> </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> </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> &input, const std::vector< uint32_t > &vAxis, const bool keepDims)</td></tr> -<tr class="memdesc:a9d43aa01b882d8776ab9403eea3cf779"><td class="mdescLeft"> </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"> </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"> </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>< <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> > </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>< <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> > weightsType)</td></tr> <tr class="separator:ada0fb4f79f3673b4ebd94a42175bf78d"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:acea2d8c53b441e24b6d60b090fda37c9"><td class="memTemplParams" colspan="2">template<typename F > </td></tr> -<tr class="memitem:acea2d8c53b441e24b6d60b090fda37c9"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string &> reasonIfUnsupported, const char *reason)</td></tr> -<tr class="separator:acea2d8c53b441e24b6d60b090fda37c9"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:aa588395c0d3b0074091b497835aaa309"><td class="memTemplParams" colspan="2">template<typename F > </td></tr> +<tr class="memitem:aa588395c0d3b0074091b497835aaa309"><td class="memTemplItemLeft" align="right" valign="top">bool </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>< std::string & > reasonIfUnsupported, const char *reason)</td></tr> +<tr class="separator:aa588395c0d3b0074091b497835aaa309"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a5980f7b42f4df041efebdc6ae242f686"><td class="memTemplParams" colspan="2">template<typename T > </td></tr> <tr class="memitem:a5980f7b42f4df041efebdc6ae242f686"><td class="memTemplItemLeft" align="right" valign="top">bool </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"> </td></tr> @@ -3256,8 +3258,8 @@ Functions</h2></td></tr> <tr class="separator:a7c8192a429fc68220e4fc308062a02ba"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aedc54936fd5ebb2d5697c8001532401a"><td class="memItemLeft" align="right" valign="top">const std::vector< std::string > </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"> </td></tr> -<tr class="memitem:aa1002c35597679b4f6624827524af04e"><td class="memItemLeft" align="right" valign="top">void </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> &optimizationViews, std::map< <a class="el" href="_types_8hpp.xhtml#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>, <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> *> untouched)</td></tr> -<tr class="separator:aa1002c35597679b4f6624827524af04e"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a5afd10e5e84ebf5cb8cfc8707492eda7"><td class="memItemLeft" align="right" valign="top">void </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> &optimizationViews, std::map< <a class="el" href="_types_8hpp.xhtml#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>, <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> * > untouched)</td></tr> +<tr class="separator:a5afd10e5e84ebf5cb8cfc8707492eda7"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ae4b69405416c09ee6878e01d27c9450b"><td class="memTemplParams" colspan="2">template<typename LayerType > </td></tr> <tr class="memitem:ae4b69405416c09ee6878e01d27c9450b"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> * </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> &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"> </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> </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> &weightInfo, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout)</td></tr> <tr class="separator:a1e8288eac7e909fdb58b6113d816763a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:af35f79341ec6c10a8bd4c8caf0585ffb"><td class="memItemLeft" align="right" valign="top">std::tuple< <a class="el" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>, unsigned int > </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> &inputInfo, const <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout, void *permuteBuffer)</td></tr> -<tr class="memdesc:af35f79341ec6c10a8bd4c8caf0585ffb"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:ac4aa9e41515b354234645f115c49de32"><td class="memItemLeft" align="right" valign="top">std::tuple< <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>, unsigned int > </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> &weightInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &inputInfo, const <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout)</td></tr> -<tr class="memdesc:ac4aa9e41515b354234645f115c49de32"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:aa22a82f5240a0eb0d61135345080aa2d"><td class="memItemLeft" align="right" valign="top">std::tuple< <a class="el" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>, unsigned int > </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> &inputInfo, const <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> &dataLayout, void *permuteBuffer)</td></tr> -<tr class="memdesc:aa22a82f5240a0eb0d61135345080aa2d"><td class="mdescLeft"> </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"> </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"> </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> </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"> </td></tr> <tr class="memitem:ad69ffa576a596b9eb20ab6a41420c541"><td class="memItemLeft" align="right" valign="top">int32_t </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"> </td></tr> <tr class="memitem:ac40d3e4035af5fbe68d9e126a8d6367c"><td class="memItemLeft" align="right" valign="top">std::map< std::string, unsigned int > </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"> </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"> </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"> </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> </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"> </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"> </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"> </td></tr> <tr class="memitem:a92c91193007aa49f4732d6dba5397f8d"><td class="memTemplParams" colspan="2">template<typename CopyFunc > </td></tr> <tr class="memitem:a92c91193007aa49f4732d6dba5397f8d"><td class="memTemplItemLeft" align="right" valign="top">void </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"> </td></tr> -<tr class="memitem:afb5b53a8b0c01d4f27830bef0f25ca09"><td class="memTemplParams" colspan="2">template<typename SrcTensorHandleType , typename DstTensorHandleType , typename DescriptorType > </td></tr> -<tr class="memitem:afb5b53a8b0c01d4f27830bef0f25ca09"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#afb5b53a8b0c01d4f27830bef0f25ca09">GatherTensorHandlePairs</a> (const DescriptorType &descriptor, std::vector< std::pair< SrcTensorHandleType *, DstTensorHandleType *>> &tensorHandlePairs)</td></tr> -<tr class="separator:afb5b53a8b0c01d4f27830bef0f25ca09"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a844d7fa4dde82e1c6b0606e1c68890bb"><td class="memTemplParams" colspan="2">template<typename SrcTensorHandleType , typename DstTensorHandleType , typename DescriptorType > </td></tr> +<tr class="memitem:a844d7fa4dde82e1c6b0606e1c68890bb"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a844d7fa4dde82e1c6b0606e1c68890bb">GatherTensorHandlePairs</a> (const DescriptorType &descriptor, std::vector< std::pair< SrcTensorHandleType *, DstTensorHandleType * >> &tensorHandlePairs)</td></tr> +<tr class="separator:a844d7fa4dde82e1c6b0606e1c68890bb"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:adfe10e7086e3e3b98927cf84aee03dd0"><td class="memItemLeft" align="right" valign="top">constexpr const char * </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"> </td></tr> <tr class="memitem:ac845f99ae84c2fcf016b676769da7c51"><td class="memItemLeft" align="right" valign="top">flatbuffers::Offset< ClContext > </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac845f99ae84c2fcf016b676769da7c51">CreateClContext</a> (flatbuffers::FlatBufferBuilder &_fbb, flatbuffers::Offset< flatbuffers::Vector< flatbuffers::Offset< armnn::Program >>> programs=0)</td></tr> @@ -3350,8 +3352,8 @@ Functions</h2></td></tr> <tr class="separator:a02e646180897aca9fcbc02d16efdd784"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:af6f6476c5d1c4c85153020f5229ebd14"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </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> &input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_comparison_descriptor.xhtml">ComparisonDescriptor</a> &descriptor)</td></tr> <tr class="separator:af6f6476c5d1c4c85153020f5229ebd14"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a7782f0809076f14363eacb4a38964b9f"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7782f0809076f14363eacb4a38964b9f">ClConcatWorkloadValidate</a> (const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *> &inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> &descriptor)</td></tr> -<tr class="separator:a7782f0809076f14363eacb4a38964b9f"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a0784b1fdac2844c5d6f331ab6e9af547"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0784b1fdac2844c5d6f331ab6e9af547">ClConcatWorkloadValidate</a> (const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> * > &inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> &descriptor)</td></tr> +<tr class="separator:a0784b1fdac2844c5d6f331ab6e9af547"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a2f5c2e8794174361f2308f4a0d3f9c73"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </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> &output)</td></tr> <tr class="separator:a2f5c2e8794174361f2308f4a0d3f9c73"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a46efae0191388fd33db4e95c5d79e2be"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </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> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output)</td></tr> @@ -3446,8 +3448,8 @@ Functions</h2></td></tr> <tr class="separator:a3ac8a60f837b19b20987e4fd238ce0cd"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a34e66b74a990db4b29ea4f904c69d7d9"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </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> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output)</td></tr> <tr class="separator:a34e66b74a990db4b29ea4f904c69d7d9"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a8c9fec997dbb5db4cdb433c36d075782"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8c9fec997dbb5db4cdb433c36d075782">ClStackWorkloadValidate</a> (const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *> &inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_stack_descriptor.xhtml">StackDescriptor</a> &descriptor)</td></tr> -<tr class="separator:a8c9fec997dbb5db4cdb433c36d075782"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a776783e716aa3dd5975c72696d0b7abb"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a776783e716aa3dd5975c72696d0b7abb">ClStackWorkloadValidate</a> (const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> * > &inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_stack_descriptor.xhtml">StackDescriptor</a> &descriptor)</td></tr> +<tr class="separator:a776783e716aa3dd5975c72696d0b7abb"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a157e0508f6d6d08e3ca4cf6c661242e6"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </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> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.xhtml">StridedSliceDescriptor</a> &descriptor)</td></tr> <tr class="separator:a157e0508f6d6d08e3ca4cf6c661242e6"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:afa9933f1d9de469ffba5ba0fcee769f8"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </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> &input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &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"> </td></tr> <tr class="memitem:a0eec4a463a166fad55307d9f26ba3a68"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0eec4a463a166fad55307d9f26ba3a68">InitializeArmComputeClTensorData</a> (arm_compute::CLTensor &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"> </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> </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> &clError, const <a class="el" href="structarmnn_1_1_check_location.xhtml">CheckLocation</a> &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> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2192b5ff59aacdb27f8b0238323915dc">WrapClError</a> (const cl::Error &clError, const <a class="el" href="structarmnn_1_1_check_location.xhtml">CheckLocation</a> &location)</td></tr> <tr class="separator:a2192b5ff59aacdb27f8b0238323915dc"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aff5bee79757341daf750c7dd7c123a15"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aff5bee79757341daf750c7dd7c123a15">RunClFunction</a> (arm_compute::IFunction &function, const <a class="el" href="structarmnn_1_1_check_location.xhtml">CheckLocation</a> &location)</td></tr> <tr class="separator:aff5bee79757341daf750c7dd7c123a15"><td class="memSeparator" colspan="2"> </td></tr> @@ -3478,8 +3480,8 @@ Functions</h2></td></tr> <tr class="separator:ae9f37e0b5f15afd89a29788a319da9ec"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a3a34a305e5187f3a3c67030d3bebbdb0"><td class="memItemLeft" align="right" valign="top">constexpr const char * </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"> </td></tr> -<tr class="memitem:a2b49ca67b57ecb9d830213169ff5e7db"><td class="memItemLeft" align="right" valign="top">bool </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> &type, const std::vector< <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> > &infos, const <a class="el" href="structarmnn_1_1_base_descriptor.xhtml">BaseDescriptor</a> &descriptor, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< <a class="el" href="structarmnn_1_1_lstm_input_params_info.xhtml">LstmInputParamsInfo</a> > &lstmParamsInfo, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< <a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.xhtml">QuantizedLstmInputParamsInfo</a> > &quantizedLstmParamsInfo, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::string &> reasonIfUnsupported, const <a class="el" href="classarmnn_1_1_neon_layer_support.xhtml">NeonLayerSupport</a> &support)</td></tr> -<tr class="separator:a2b49ca67b57ecb9d830213169ff5e7db"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a8c69ca5000838df92215ca5053141cf6"><td class="memItemLeft" align="right" valign="top">bool </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> &type, const std::vector< <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> > &infos, const <a class="el" href="structarmnn_1_1_base_descriptor.xhtml">BaseDescriptor</a> &descriptor, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< <a class="el" href="structarmnn_1_1_lstm_input_params_info.xhtml">LstmInputParamsInfo</a> > &lstmParamsInfo, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< <a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.xhtml">QuantizedLstmInputParamsInfo</a> > &quantizedLstmParamsInfo, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::string & > reasonIfUnsupported, const <a class="el" href="classarmnn_1_1_neon_layer_support.xhtml">NeonLayerSupport</a> &support)</td></tr> +<tr class="separator:a8c69ca5000838df92215ca5053141cf6"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aad5d4888304a57fb22c4608dc5d94dc1"><td class="memItemLeft" align="right" valign="top">constexpr const char * </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"> </td></tr> <tr class="memitem:afc773aec6f845adc0cc547ce475dfe3f"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </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> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output)</td></tr> @@ -3502,8 +3504,8 @@ Functions</h2></td></tr> <tr class="separator:a2ee21869ffad00d6344afffb0a9baba1"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ae412e8e64d6a6dde3ace908b59c29c06"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </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> &input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_comparison_descriptor.xhtml">ComparisonDescriptor</a> &descriptor)</td></tr> <tr class="separator:ae412e8e64d6a6dde3ace908b59c29c06"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a8a219633e750d6daffcef3b641fa11f3"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8a219633e750d6daffcef3b641fa11f3">NeonConcatWorkloadValidate</a> (const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *> &inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> &descriptor)</td></tr> -<tr class="separator:a8a219633e750d6daffcef3b641fa11f3"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a3653413d74a951674c88db372d217baa"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3653413d74a951674c88db372d217baa">NeonConcatWorkloadValidate</a> (const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> * > &inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> &descriptor)</td></tr> +<tr class="separator:a3653413d74a951674c88db372d217baa"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:afb681fd9b8afe0b236d51b6c868ae660"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </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> &output)</td></tr> <tr class="separator:afb681fd9b8afe0b236d51b6c868ae660"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a45691b0c4a46c239b4986cfed95de13b"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </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> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> &descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &weights, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> > &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 </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> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_mean_descriptor.xhtml">MeanDescriptor</a> &descriptor)</td></tr> <tr class="separator:ae74e210a3f716c1f5f32663a8ec66345"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ab81159ebfa638af1b91fe1e8c5de1955"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </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> &input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output)</td></tr> -<tr class="memdesc:ab81159ebfa638af1b91fe1e8c5de1955"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:ad512520e809bfed4fbd3db9fbc241263"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </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> &input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &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"> </td></tr> @@ -3597,8 +3599,8 @@ Functions</h2></td></tr> <tr class="separator:aab5ea316b3decb05430323d847e3a773"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a5fadc539a1a3c35c4a6138bf6e970e4c"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </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> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output)</td></tr> <tr class="separator:a5fadc539a1a3c35c4a6138bf6e970e4c"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a65c83c74bdbd66cdd547d331998952eb"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a65c83c74bdbd66cdd547d331998952eb">NeonStackWorkloadValidate</a> (const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *> &inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_stack_descriptor.xhtml">StackDescriptor</a> &descriptor)</td></tr> -<tr class="separator:a65c83c74bdbd66cdd547d331998952eb"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:add549d4deb11580fc32d17fb38b309b4"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#add549d4deb11580fc32d17fb38b309b4">NeonStackWorkloadValidate</a> (const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> * > &inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_stack_descriptor.xhtml">StackDescriptor</a> &descriptor)</td></tr> +<tr class="separator:add549d4deb11580fc32d17fb38b309b4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac71d08bf1257807c112b4d019802acc3"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </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> &input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &output, const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.xhtml">StridedSliceDescriptor</a> &descriptor)</td></tr> <tr class="separator:ac71d08bf1257807c112b4d019802acc3"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:abc968e1323027f9e42cbc7642800d5ce"><td class="memItemLeft" align="right" valign="top">arm_compute::Status </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> &input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &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<typename QueueDescriptorType > </td></tr> <tr class="memitem:ad05c0670c947d35d39b3b0217e9975cf"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad05c0670c947d35d39b3b0217e9975cf">IsOperationQueueDescriptor</a> (const QueueDescriptorType &)</td></tr> <tr class="separator:ad05c0670c947d35d39b3b0217e9975cf"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a93e7b76d19b33076b2a4eae44014d5ea"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a93e7b76d19b33076b2a4eae44014d5ea"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a93e7b76d19b33076b2a4eae44014d5ea"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool </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> &)</td></tr> <tr class="separator:a93e7b76d19b33076b2a4eae44014d5ea"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a05323af66b9f762e269a27562a2bbdd0"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a05323af66b9f762e269a27562a2bbdd0"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a05323af66b9f762e269a27562a2bbdd0"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool </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> &)</td></tr> <tr class="separator:a05323af66b9f762e269a27562a2bbdd0"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a91332212b6a2cc9c0ea32af03c600b4f"><td class="memTemplParams" colspan="2">template<> </td></tr> +<tr class="memitem:a91332212b6a2cc9c0ea32af03c600b4f"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> <tr class="memitem:a91332212b6a2cc9c0ea32af03c600b4f"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool </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> &)</td></tr> <tr class="separator:a91332212b6a2cc9c0ea32af03c600b4f"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a7636fbbc4f8ea2d0cf9f3ac2d12a4c62"><td class="memItemLeft" align="right" valign="top">float </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"> </td></tr> <tr class="memitem:a8746512fab5ec10c2c57800c66311ba7"><td class="memItemLeft" align="right" valign="top">void </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> &dataLayout, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &inputTensorInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &outputTensorInfo, const std::vector< unsigned int > &blockShape, const std::vector< std::pair< unsigned int, unsigned int >> &cropsData, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > &inputDecoder, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< float > &outputEncoder)</td></tr> <tr class="separator:a8746512fab5ec10c2c57800c66311ba7"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aa58cffc192978865f4fc8d3b39f62460"><td class="memItemLeft" align="right" valign="top">void </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> &data, std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *> inputs, std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *> outputs)</td></tr> -<tr class="separator:aa58cffc192978865f4fc8d3b39f62460"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a83b1d61a12c9e1911c2b6d79c35ef551"><td class="memItemLeft" align="right" valign="top">void </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> &data, std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> * > inputs, std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> * > outputs)</td></tr> +<tr class="separator:a83b1d61a12c9e1911c2b6d79c35ef551"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a9750dc088a62ed91b79f636dfaa2d9a1"><td class="memItemLeft" align="right" valign="top">void </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> &rInputShape, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > &rInputDecoder, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &rOutputShape, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< float > &rOutputEncoder, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &rFilterShape, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > &rFilterDecoder, bool biasEnabled, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > *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"> </td></tr> <tr class="memitem:af98115cd07776d3fa8424434d2a7a897"><td class="memItemLeft" align="right" valign="top">void </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> &rInputShape, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > &rInputDecoder, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &rOutputShape, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< float > &rOutputEncoder, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &rFilterShape, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > &rFilterDecoder, bool biasEnabled, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > *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<typename T > </td></tr> <tr class="memitem:a1545cb162c5a64d75d9c0c05e8ea387c"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr< <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< T > > </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> &info, const void *data=nullptr)</td></tr> <tr class="separator:a1545cb162c5a64d75d9c0c05e8ea387c"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:adb59a379c467b6d48874e946183b4d21"><td class="memTemplParams" colspan="2">template<> </td></tr> -<tr class="memitem:adb59a379c467b6d48874e946183b4d21"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr< <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > > </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> &info, const void *data)</td></tr> -<tr class="separator:adb59a379c467b6d48874e946183b4d21"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a59c4fab5981602d8117d0b024eafd9ec"><td class="memTemplParams" colspan="2">template<> </td></tr> -<tr class="memitem:a59c4fab5981602d8117d0b024eafd9ec"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr< <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< bool > > </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> &info, const void *data)</td></tr> -<tr class="separator:a59c4fab5981602d8117d0b024eafd9ec"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a21c5697c38df92463d1e767db8a95267"><td class="memTemplParams" colspan="2">template<> </td></tr> -<tr class="memitem:a21c5697c38df92463d1e767db8a95267"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr< <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< int32_t > > </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> &info, const void *data)</td></tr> -<tr class="separator:a21c5697c38df92463d1e767db8a95267"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a8cb12db00d6e4ab4ac5ccfa6e7a69374"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> +<tr class="memitem:a8cb12db00d6e4ab4ac5ccfa6e7a69374"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr< <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > > </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> &info, const void *data)</td></tr> +<tr class="separator:a8cb12db00d6e4ab4ac5ccfa6e7a69374"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ab023d9a7687e35c0f108458a094c1f56"><td class="memItemLeft" align="right" valign="top">void </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> &inputInfo, const <a class="el" href="namespacearmnn.xhtml#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a> &descriptor, const void *inputData, void *outputData, unsigned int dataTypeSize)</td></tr> <tr class="separator:ab023d9a7687e35c0f108458a094c1f56"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:acae7e910f899ae67340c9ce29e406a86"><td class="memItemLeft" align="right" valign="top">void </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>< float > &inputDecoder, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< float > &outputEncoder, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &outputInfo)</td></tr> @@ -3729,20 +3725,14 @@ Functions</h2></td></tr> <tr class="memitem:a56867cc5245724ab56953604b1eec9ee"><td class="memTemplParams" colspan="2">template<typename T > </td></tr> <tr class="memitem:a56867cc5245724ab56953604b1eec9ee"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr< <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< T > > </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> &info, void *data=nullptr)</td></tr> <tr class="separator:a56867cc5245724ab56953604b1eec9ee"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a363da7c8d642ea382e3bd2f1c6283d52"><td class="memTemplParams" colspan="2">template<> </td></tr> -<tr class="memitem:a363da7c8d642ea382e3bd2f1c6283d52"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr< <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< float > > </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> &info, void *data)</td></tr> -<tr class="separator:a363da7c8d642ea382e3bd2f1c6283d52"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a6fcd01a9cdee158d3022ad089c27c078"><td class="memTemplParams" colspan="2">template<> </td></tr> -<tr class="memitem:a6fcd01a9cdee158d3022ad089c27c078"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr< <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< bool > > </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> &info, void *data)</td></tr> -<tr class="separator:a6fcd01a9cdee158d3022ad089c27c078"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ae5cb90ec4c498ed366d2ca03a270ab91"><td class="memTemplParams" colspan="2">template<> </td></tr> -<tr class="memitem:ae5cb90ec4c498ed366d2ca03a270ab91"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr< <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< int32_t > > </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> &info, void *data)</td></tr> -<tr class="separator:ae5cb90ec4c498ed366d2ca03a270ab91"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a01cdb4291025316036201d689811255f"><td class="memItemLeft" align="right" valign="top">template<> </td></tr> +<tr class="memitem:a01cdb4291025316036201d689811255f"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr< <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< float > > </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> &info, void *data)</td></tr> +<tr class="separator:a01cdb4291025316036201d689811255f"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a88bebdfe6309aa2cd6831cfa73c296f0"><td class="memItemLeft" align="right" valign="top">void </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>< float > &output, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &desiredOutputShape, const float value)</td></tr> -<tr class="memdesc:a88bebdfe6309aa2cd6831cfa73c296f0"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a435f9350a94adfbb0d5b9abb5f430914"><td class="memItemLeft" align="right" valign="top">void </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> &rInputShape, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > &rInputDecoder, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &rOutputShape, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< float > &rOutputEncoder, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &rWeightsShape, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > &rWeightDecoder, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > *rBiasDecoder, bool biasEnabled, unsigned int K, bool transposeWeights)</td></tr> -<tr class="memdesc:a435f9350a94adfbb0d5b9abb5f430914"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:a4f1a1b88b01d8dfda3803776e0778a49"><td class="memItemLeft" align="right" valign="top">void </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> &paramsInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &indicesInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &outputInfo, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > &params, const int32_t *indices, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< float > &output, const int32_t axis_int)</td></tr> <tr class="separator:a4f1a1b88b01d8dfda3803776e0778a49"><td class="memSeparator" colspan="2"> </td></tr> @@ -3757,10 +3747,10 @@ Functions</h2></td></tr> <tr class="memitem:a3c62b52d21e28088f040a4b6c2a06022"><td class="memItemLeft" align="right" valign="top">void </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> &inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &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> &data)</td></tr> <tr class="separator:a3c62b52d21e28088f040a4b6c2a06022"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ae2e93e304cf516841c521e3eaee025cd"><td class="memItemLeft" align="right" valign="top">void </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>< float > &rInputDecoder, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< float > &rOutputEncoder, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &outputInfo, const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> &params)</td></tr> -<tr class="memdesc:ae2e93e304cf516841c521e3eaee025cd"><td class="mdescLeft"> </td><td class="mdescRight">Computes the Pooling2d operation. <a href="#ae2e93e304cf516841c521e3eaee025cd">More...</a><br /></td></tr> +<tr class="memdesc:ae2e93e304cf516841c521e3eaee025cd"><td class="mdescLeft"> </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"> </td></tr> <tr class="memitem:a69acbef24cd1cc572b93fc3e1e6ac030"><td class="memItemLeft" align="right" valign="top">void </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>< float > &rInputDecoder, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< float > &rOutputEncoder, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &outputInfo, const <a class="el" href="structarmnn_1_1_pooling3d_descriptor.xhtml">Pooling3dDescriptor</a> &params)</td></tr> -<tr class="memdesc:a69acbef24cd1cc572b93fc3e1e6ac030"><td class="mdescLeft"> </td><td class="mdescRight">Computes the Pooling3d operation. <a href="#a69acbef24cd1cc572b93fc3e1e6ac030">More...</a><br /></td></tr> +<tr class="memdesc:a69acbef24cd1cc572b93fc3e1e6ac030"><td class="mdescLeft"> </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"> </td></tr> <tr class="memitem:a3be2f69aaf56e58a64ce62054c497fbc"><td class="memItemLeft" align="right" valign="top">void </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> &inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &alphaInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &outputInfo, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > &inputData, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > &alphaData, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< float > &outputData)</td></tr> <tr class="separator:a3be2f69aaf56e58a64ce62054c497fbc"><td class="memSeparator" colspan="2"> </td></tr> @@ -3776,7 +3766,7 @@ Functions</h2></td></tr> <tr class="separator:a3f8e72f86ecaf365978a993127ea5957"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa815fde54f6d8e8aa5b4f0301cf4178b"><td class="memTemplParams" colspan="2">template<typename TensorHandleType = RefTensorHandle> </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> & </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"> </td><td class="mdescRight">float32 helpers <a href="#aa815fde54f6d8e8aa5b4f0301cf4178b">More...</a><br /></td></tr> +<tr class="memdesc:aa815fde54f6d8e8aa5b4f0301cf4178b"><td class="mdescLeft"> </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"> </td></tr> <tr class="memitem:a2187ea15b1ae8c323a0cc5c211fc43d9"><td class="memTemplParams" colspan="2">template<typename DataType , typename PayloadType > </td></tr> <tr class="memitem:a2187ea15b1ae8c323a0cc5c211fc43d9"><td class="memTemplItemLeft" align="right" valign="top">const <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> * </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2187ea15b1ae8c323a0cc5c211fc43d9">GetInputTensorData</a> (unsigned int idx, const PayloadType &data)</td></tr> @@ -3804,7 +3794,7 @@ Functions</h2></td></tr> <tr class="separator:a85ace5e5f41a093622a8c04150d24c60"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a4144d7535639c617fca0d095379493f0"><td class="memTemplParams" colspan="2">template<typename T > </td></tr> <tr class="memitem:a4144d7535639c617fca0d095379493f0"><td class="memTemplItemLeft" align="right" valign="top">std::vector< float > </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> &info)</td></tr> -<tr class="memdesc:a4144d7535639c617fca0d095379493f0"><td class="mdescLeft"> </td><td class="mdescRight">u8 helpers <a href="#a4144d7535639c617fca0d095379493f0">More...</a><br /></td></tr> +<tr class="memdesc:a4144d7535639c617fca0d095379493f0"><td class="mdescLeft"> </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"> </td></tr> <tr class="memitem:a1204727d8ce3ee1e60daf08079eb892e"><td class="memTemplParams" colspan="2">template<typename T > </td></tr> <tr class="memitem:a1204727d8ce3ee1e60daf08079eb892e"><td class="memTemplItemLeft" align="right" valign="top">void </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> &info)</td></tr> @@ -3816,7 +3806,7 @@ Functions</h2></td></tr> <tr class="memitem:a044ea0cc993d4d1fbe4ec877b17b8d39"><td class="memItemLeft" align="right" valign="top">void </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> &inputInfo, const <a class="el" href="structarmnn_1_1_slice_descriptor.xhtml">SliceDescriptor</a> &descriptor, const void *inputData, void *outputData, unsigned int dataTypeSize)</td></tr> <tr class="separator:a044ea0cc993d4d1fbe4ec877b17b8d39"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa999ff2585ad75b95954a9323f63c32b"><td class="memItemLeft" align="right" valign="top">void </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>< float > &in, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< float > &out, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &inputTensorInfo, float beta, int axis)</td></tr> -<tr class="memdesc:aa999ff2585ad75b95954a9323f63c32b"><td class="mdescLeft"> </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"> </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"> </td></tr> <tr class="memitem:adafb0fd0a3f6435c2bdf41f971761ecf"><td class="memItemLeft" align="right" valign="top">unsigned int </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> &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> &dataLayout)</td></tr> <tr class="separator:adafb0fd0a3f6435c2bdf41f971761ecf"><td class="memSeparator" colspan="2"> </td></tr> @@ -3824,11 +3814,11 @@ Functions</h2></td></tr> <tr class="separator:a4a180e425d4c19b2cdea4ce5760180e1"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a5e1dc69443b64ad16b669388a6023f7a"><td class="memItemLeft" align="right" valign="top">void </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> &inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &outputInfo, const <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.xhtml">SpaceToDepthDescriptor</a> &params, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > &inputData, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< float > &outputData)</td></tr> <tr class="separator:a5e1dc69443b64ad16b669388a6023f7a"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a7cc1fc0ee4d88d16e9684a9c964718ce"><td class="memItemLeft" align="right" valign="top">void </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> &data, std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *> inputs, std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *> outputs)</td></tr> -<tr class="separator:a7cc1fc0ee4d88d16e9684a9c964718ce"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ac90715a0439d1e77922996a27ef3a534"><td class="memTemplParams" colspan="2">template<typename DataType > </td></tr> -<tr class="memitem:ac90715a0439d1e77922996a27ef3a534"><td class="memTemplItemLeft" align="right" valign="top">void </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> &data, std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *> inputs, std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *> outputs)</td></tr> -<tr class="separator:ac90715a0439d1e77922996a27ef3a534"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a3e6cbdbfb81dbcea27d219a6553838dc"><td class="memItemLeft" align="right" valign="top">void </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> &data, std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> * > inputs, std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> * > outputs)</td></tr> +<tr class="separator:a3e6cbdbfb81dbcea27d219a6553838dc"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a0fdab6fc39d90c5beea97f4ca0a584c4"><td class="memTemplParams" colspan="2">template<typename DataType > </td></tr> +<tr class="memitem:a0fdab6fc39d90c5beea97f4ca0a584c4"><td class="memTemplItemLeft" align="right" valign="top">void </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> &data, std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> * > inputs, std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> * > outputs)</td></tr> +<tr class="separator:a0fdab6fc39d90c5beea97f4ca0a584c4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac245fda400649db10eed0dc96c1b5c37"><td class="memItemLeft" align="right" valign="top">void </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> &data, std::vector< std::unique_ptr< <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float >>> &inputs, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< float > &output, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &outputInfo)</td></tr> <tr class="separator:ac245fda400649db10eed0dc96c1b5c37"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a86d7a7168ac00b75b4971f9aad623698"><td class="memItemLeft" align="right" valign="top">void </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> &inputInfo, const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.xhtml">StridedSliceDescriptor</a> &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 </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"> </td></tr> <tr class="memitem:a602ddc6408c3347ba4c1eba623003984"><td class="memItemLeft" align="right" valign="top">constexpr unsigned int </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"> </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"> </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"> </td></tr> <tr class="memitem:a61d2390e44601830cdc9b400b9910bbf"><td class="memItemLeft" align="right" valign="top">constexpr unsigned int </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"> </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"> </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"> </td></tr> <tr class="memitem:a43ecd194778b7653578044060ba8695e"><td class="memItemLeft" align="right" valign="top">constexpr std::size_t </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"> </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> {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">Sigmoid</a> = 0,</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e">TanH</a> = 1,</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b">Linear</a> = 2,</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">ReLu</a> = 3,</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">BoundedReLu</a> = 4, <span class="comment">///< min(a, max(b, input)) ReLu1 & ReLu6.</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <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>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735">LeakyReLu</a> = 6,</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a> = 7,</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a> = 8,</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304">Square</a> = 9,</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d">Elu</a> = 10,</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186">HardSwish</a> = 11</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> };</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 & 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> {</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">Sigmoid</a> = 0,</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e">TanH</a> = 1,</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b">Linear</a> = 2,</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">ReLu</a> = 3,</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">BoundedReLu</a> = 4, <span class="comment">///< min(a, max(b, input)) ReLu1 & ReLu6.</span></div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <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>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735">LeakyReLu</a> = 6,</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a> = 7,</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a> = 8,</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304">Square</a> = 9,</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d">Elu</a> = 10,</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186">HardSwish</a> = 11</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> };</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> {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a> = 0,</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 1</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> };</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> {</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a> = 0,</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 1</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> };</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>  : uint32_t</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> {<span class="comment"></span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <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> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="comment"> /// Asynchronous Execution.</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <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> </div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="comment">// add new enum values here</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> };</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>  : uint32_t</div> +<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> {<span class="comment"></span></div> +<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <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> <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> <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> <span class="comment"></span> </div> +<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="comment"> /// Asynchronous Execution.</span></div> +<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <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>  </div> +<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="comment">// add new enum values here</span></div> +<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> };</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> {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a04a75036e9d520bb983c5ed03b8d0182">trace</a>,</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d">debug</a>,</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>,</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>,</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>,</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4">fatal</a></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> };</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> {</div> +<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a04a75036e9d520bb983c5ed03b8d0182">trace</a>,</div> +<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d">debug</a>,</div> +<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>,</div> +<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>,</div> +<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>,</div> +<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4">fatal</a></div> +<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> };</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 </td><td class="fielddoc"></td></tr> <tr><td class="fieldname"><a id="a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d"></a>FallbackImportDisabled </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> {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <a class="code" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389">PaddingRequired</a> = 1,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <a class="code" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d">FallbackImportDisabled</a> = 2,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="comment">// add new enum values here</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <a class="code" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a280957607e14bb2ccc1155ae6569aee1">CapabilityClassMax</a> = 254</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> };</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> {</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <a class="code" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389">PaddingRequired</a> = 1,</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <a class="code" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d">FallbackImportDisabled</a> = 2,</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="comment">// add new enum values here</span></div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <a class="code" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a280957607e14bb2ccc1155ae6569aee1">CapabilityClassMax</a> = 254</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> };</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> {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5">Equal</a> = 0,</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a">Greater</a> = 1,</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937">GreaterOrEqual</a> = 2,</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b">Less</a> = 3,</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14">LessOrEqual</a> = 4,</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96">NotEqual</a> = 5</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> };</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> {</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5">Equal</a> = 0,</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a">Greater</a> = 1,</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937">GreaterOrEqual</a> = 2,</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b">Less</a> = 3,</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14">LessOrEqual</a> = 4,</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96">NotEqual</a> = 5</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> };</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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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> <span class="comment"> /// CPU Execution: Reference C++ kernels</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <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> <span class="comment"> /// CPU Execution: NEON: ArmCompute</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <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> <span class="comment"> /// GPU Execution: OpenCL: ArmCompute</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <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> };</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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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> <span class="comment"> /// CPU Execution: Reference C++ kernels</span></div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <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> <span class="comment"> /// CPU Execution: NEON: ArmCompute</span></div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <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> <span class="comment"> /// GPU Execution: OpenCL: ArmCompute</span></div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <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> };</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> {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a> = 1,</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a> = 2,</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">NDHWC</a> = 3,</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">NCDHW</a> = 4</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> };</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> {</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a> = 1,</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a> = 2,</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">NDHWC</a> = 3,</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">NCDHW</a> = 4</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> };</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> {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a> = 0,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a> = 1,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a> = 2,</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a> = 3,</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a> = 4,</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a> = 5,</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a> = 6,</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a> = 7,</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a> = 8,</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">Signed64</a> = 9,</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> };</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> {</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a> = 0,</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a> = 1,</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a> = 2,</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a> = 3,</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a> = 4,</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a> = 5,</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a> = 6,</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a> = 7,</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a> = 8,</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">Signed64</a> = 9,</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> };</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> {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc">NotSpecified</a> = 0,</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <a class="code" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681ab4b379bf7ded74c07595ccb85bc6fdc3">Specified</a> = 1,</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <a class="code" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681af60357a8d17e45793298323f1b372a74">Scalar</a> = 2</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> };</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> {</div> +<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc">NotSpecified</a> = 0,</div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <a class="code" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681ab4b379bf7ded74c07595ccb85bc6fdc3">Specified</a> = 1,</div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <a class="code" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681af60357a8d17e45793298323f1b372a74">Scalar</a> = 2</div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> };</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> {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <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> <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> <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> <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> <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> {</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <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> <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> <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> <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> <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> {</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  <a class="code" href="namespacearmnn.xhtml#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">LayerAdded</a>,</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <a class="code" href="namespacearmnn.xhtml#a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528">LayerErased</a></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> };</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> {</div> +<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  <a class="code" href="namespacearmnn.xhtml#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">LayerAdded</a>,</div> +<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <a class="code" href="namespacearmnn.xhtml#a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528">LayerErased</a></div> +<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> };</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> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <a class="code" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975">Measurement</a>,</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <a class="code" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aaa4ecfc70574394990cf17bd83df499f7">Event</a>,</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <a class="code" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aaf7a45ae663528701f33ee482ce67af62">ExecObjectDesc</a></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> };</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> {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <a class="code" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975">Measurement</a>,</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <a class="code" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aaa4ecfc70574394990cf17bd83df499f7">Event</a>,</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <a class="code" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aaf7a45ae663528701f33ee482ce67af62">ExecObjectDesc</a></div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> };</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> {</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="preprocessor">#define X(name) name,</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <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> <span class="preprocessor">#undef X</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <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>  <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> };</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> {</div> +<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="preprocessor">#define X(name) name,</span></div> +<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <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> <span class="preprocessor">#undef X</span></div> +<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <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>  <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> };</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> {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55">LogicalAnd</a> = 0,</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247">LogicalOr</a> = 1</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> };</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> {</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55">LogicalAnd</a> = 0,</div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247">LogicalOr</a> = 1</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> };</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> {</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">Trace</a>,</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <a class="code" href="namespacearmnn.xhtml#a181ecb133401da6ff2916c192ca04d48">Debug</a>,</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">Info</a>,</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">Warning</a>,</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">Error</a>,</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4">Fatal</a></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> };</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 &inputInfo, const T *inputData, LayerGuid guid, const std::string &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> {</div> +<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">Trace</a>,</div> +<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <a class="code" href="namespacearmnn.xhtml#a181ecb133401da6ff2916c192ca04d48">Debug</a>,</div> +<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">Info</a>,</div> +<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">Warning</a>,</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">Error</a>,</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4">Fatal</a></div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> };</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> {</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <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>  <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>  <span class="comment">// equivalent to blob or pooling memory management.</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <a class="code" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7">SingleAxisPacking</a> = 0,</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <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>  <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>  <span class="comment">// equivalent to offset or slab memory management.</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <a class="code" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f">MultiAxisPacking</a> = 1</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span> };</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> {</div> +<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <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>  <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>  <span class="comment">// equivalent to blob or pooling memory management.</span></div> +<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <a class="code" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7">SingleAxisPacking</a> = 0,</div> +<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  </div> +<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <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>  <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>  <span class="comment">// equivalent to offset or slab memory management.</span></div> +<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <a class="code" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f">MultiAxisPacking</a> = 1</div> +<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> };</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>  : uint32_t</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523">Malloc</a> = 1,</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a966e13d8aabbff3966a5cd28d67b4846">DmaBuf</a> = 2,</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a7f9067c59dd34aca0ad09a7f283ed1f8">DmaBufProtected</a> = 4,</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e">Gralloc</a> = 8</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> };</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>  : uint32_t</div> +<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> {</div> +<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,</div> +<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523">Malloc</a> = 1,</div> +<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a966e13d8aabbff3966a5cd28d67b4846">DmaBuf</a> = 2,</div> +<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a7f9067c59dd34aca0ad09a7f283ed1f8">DmaBufProtected</a> = 4,</div> +<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e">Gralloc</a> = 8</div> +<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> };</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> {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <a class="code" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">Across</a> = 0,</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <a class="code" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b">Within</a> = 1</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> };</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> {</div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <a class="code" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">Across</a> = 0,</div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <a class="code" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b">Within</a> = 1</div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> };</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> {<span class="comment"></span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment"> /// Krichevsky 2012: Local Brightness Normalization</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <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> <span class="comment"> /// Jarret 2009: Local Contrast Normalization</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <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> };</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> {<span class="comment"></span></div> +<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment"> /// Krichevsky 2012: Local Brightness Normalization</span></div> +<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <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> <span class="comment"> /// Jarret 2009: Local Contrast Normalization</span></div> +<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <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> };</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> {</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <a class="code" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">Floor</a> = 0,</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <a class="code" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb">Ceiling</a> = 1</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> };</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> {</div> +<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <a class="code" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">Floor</a> = 0,</div> +<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <a class="code" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb">Ceiling</a> = 1</div> +<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> };</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> {<span class="comment"></span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment"> /// The padding fields count, but are ignored</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <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> <span class="comment"> /// The padding fields don't count and are ignored</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <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> };</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&#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> {<span class="comment"></span></div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment"> /// The padding fields count, but are ignored</span></div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <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> <span class="comment"> /// The padding fields don't count and are ignored</span></div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <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> };</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> {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</a> = 0,</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00">Reflect</a> = 1,</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626">Symmetric</a> = 2</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> };</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> {</div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</a> = 0,</div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00">Reflect</a> = 1,</div> +<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626">Symmetric</a> = 2</div> +<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> };</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> {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 0,</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">Average</a> = 1,</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76">L2</a> = 2</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> };</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> {</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 0,</div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">Average</a> = 1,</div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76">L2</a> = 2</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> };</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> {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <a class="code" href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1fa497ab261a562e316736c2cb59b839d32">DetailsWithEvents</a> = 1,</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1fa566666dfc3a9a82da0d7b0816b19f278">DetailsOnly</a> = 2</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> };</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> {</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <a class="code" href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1fa497ab261a562e316736c2cb59b839d32">DetailsWithEvents</a> = 1,</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1fa566666dfc3a9a82da0d7b0816b19f278">DetailsOnly</a> = 2</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> };</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> {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a28d0edd045e05cf5af64e35ae0c4c6ef">Low</a> = 0,</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a87f8a6ab85c9ced3702b4ea641ad4bb5">Medium</a> = 1,</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a655d20c1ca69519ca647684edbb2db35">High</a> = 2</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> };</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> {</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a28d0edd045e05cf5af64e35ae0c4c6ef">Low</a> = 0,</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a87f8a6ab85c9ced3702b4ea641ad4bb5">Medium</a> = 1,</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a655d20c1ca69519ca647684edbb2db35">High</a> = 2</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> };</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> {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">Sum</a> = 0,</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 1,</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">Mean</a> = 2,</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a> = 3,</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">Prod</a> = 4</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> };</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> {</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">Sum</a> = 0,</div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 1,</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">Mean</a> = 2,</div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a> = 3,</div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">Prod</a> = 4</div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> };</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> {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">Bilinear</a> = 0,</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">NearestNeighbor</a> = 1</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> };</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> {</div> +<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">Bilinear</a> = 0,</div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">NearestNeighbor</a> = 1</div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> };</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> {<span class="comment"></span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment"> /// Validate all output shapes</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <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> <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> <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> };</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> {<span class="comment"></span></div> +<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment"> /// Validate all output shapes</span></div> +<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <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> <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> <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> };</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 </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> {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Success</a> = 0,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">Failure</a> = 1</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> };</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> {</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Success</a> = 0,</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">Failure</a> = 1</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> };</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> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754">None</a>,</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68">Rapid</a>,</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0">Normal</a>,</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f">Exhaustive</a></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> };</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> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754">None</a>,</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68">Rapid</a>,</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0">Normal</a>,</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f">Exhaustive</a></div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> };</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> {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a> = 0,</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0">Exp</a> = 1,</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a> = 2,</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4">Rsqrt</a> = 3,</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd">Neg</a> = 4,</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc">LogicalNot</a> = 5,</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b">Log</a> = 6,</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd">Sin</a> = 7</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> };</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> {</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a> = 0,</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0">Exp</a> = 1,</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a> = 2,</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4">Rsqrt</a> = 3,</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd">Neg</a> = 4,</div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc">LogicalNot</a> = 5,</div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b">Log</a> = 6,</div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd">Sin</a> = 7</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> };</div> </div><!-- fragment --> </div> </div> <h2 class="groupheader">Function Documentation</h2> -<a id="a7636fbbc4f8ea2d0cf9f3ac2d12a4c62"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">◆ </a></span>Activation() <span class="overload">[1/2]</span></h2> +<a id="ad10d72a6f8859949bbe6134c638ce171"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad10d72a6f8859949bbe6134c638ce171">◆ </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 </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > & </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>< float > & </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> & </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> </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> {</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <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>  </div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numElements; i++)</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  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>  ++in;</div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  ++out;</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  in -= numElements;</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  out -= numElements;</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> }</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< IType >::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< IType >::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> {</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keywordtype">float</span> output;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="comment">// Compute the result of the activation function.</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keywordflow">switch</span> (<span class="keyword">function</span>)</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">case</span> ActivationFunction::Linear:</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  output = a * in + b;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  }</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">case</span> ActivationFunction::Sigmoid:</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  output = 1.f / (1.f + expf(-in));</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  }</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">case</span> ActivationFunction::ReLu:</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  output = std::max(0.f, in);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  }</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">case</span> ActivationFunction::BoundedReLu:</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  output = std::min(a, std::max(b, in));</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">case</span> ActivationFunction::SoftReLu:</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  output = logf(1.0f + expf(in));</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">case</span> ActivationFunction::LeakyReLu:</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  output = in > 0.0f ? in : (in * a);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">case</span> ActivationFunction::Abs:</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  output = in < 0 ? -in : in;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">case</span> ActivationFunction::Sqrt:</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  output = sqrtf(in);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">case</span> ActivationFunction::Square:</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  output = in * in;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">case</span> ActivationFunction::TanH:</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  output = a * tanhf(b * in);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  }</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">case</span> ActivationFunction::Elu:</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  output = (in >= 0) ? in : a * (expf(in) - 1);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">case</span> ActivationFunction::HardSwish:</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <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>  <span class="comment">// relu6(x) = min(max(x,0),6)</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  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>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported activation function"</span>);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">return</span> output;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</div></div><!-- fragment --> </div> </div> -<a id="ad10d72a6f8859949bbe6134c638ce171"></a> -<h2 class="memtitle"><span class="permalink"><a href="#ad10d72a6f8859949bbe6134c638ce171">◆ </a></span>Activation() <span class="overload">[2/2]</span></h2> +<a id="a7636fbbc4f8ea2d0cf9f3ac2d12a4c62"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">◆ </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>< float > & </td> + <td class="paramtype">float </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>< float > & </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> & </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> </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< IType >::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< IType >::Set()</a>.</p> -<div class="fragment"><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <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> </div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numElements; i++)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  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>  ++in;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  ++out;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  in -= numElements;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  out -= numElements;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> }</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< float > &in, Encoder< float > &out, const TensorInfo &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> {</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keywordtype">float</span> output;</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="comment">// Compute the result of the activation function.</span></div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keywordflow">switch</span> (<span class="keyword">function</span>)</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">case</span> ActivationFunction::Linear:</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  {</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  output = a * in + b;</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  }</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">case</span> ActivationFunction::Sigmoid:</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  {</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  output = 1.f / (1.f + expf(-in));</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  }</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">case</span> ActivationFunction::ReLu:</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  {</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  output = std::max(0.f, in);</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  }</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">case</span> ActivationFunction::BoundedReLu:</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  output = std::min(a, std::max(b, in));</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">case</span> ActivationFunction::SoftReLu:</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  {</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  output = logf(1.0f + expf(in));</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  }</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">case</span> ActivationFunction::LeakyReLu:</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  {</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  output = in > 0.0f ? in : (in * a);</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  }</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">case</span> ActivationFunction::Abs:</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  {</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  output = in < 0 ? -in : in;</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  }</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">case</span> ActivationFunction::Sqrt:</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  {</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  output = sqrtf(in);</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">case</span> ActivationFunction::Square:</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  {</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  output = in * in;</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">case</span> ActivationFunction::TanH:</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  {</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  output = a * tanhf(b * in);</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  }</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">case</span> ActivationFunction::Elu:</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  {</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  output = (in >= 0) ? in : a * (expf(in) - 1);</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  }</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">case</span> ActivationFunction::HardSwish:</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  {</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <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>  <span class="comment">// relu6(x) = min(max(x,0),6)</span></div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  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>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  }</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported activation function"</span>);</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  </div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">return</span> output;</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</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> {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numOutput; ++i)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <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>  <span class="keywordflow">if</span> (i < numSelected)</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <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>  detectionScores[i] = selectedScores[outputIndices[i]];</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  detectionClasses[i] = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">float</span>>(selectedClasses[outputIndices[i]]);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  detectionBoxes[boxIndex] = boxCorners[boxCornorIndex];</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  detectionBoxes[boxIndex + 1] = boxCorners[boxCornorIndex + 1];</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  detectionBoxes[boxIndex + 2] = boxCorners[boxCornorIndex + 2];</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  detectionBoxes[boxIndex + 3] = boxCorners[boxCornorIndex + 3];</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  detectionScores[i] = 0.0f;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  detectionClasses[i] = 0.0f;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  detectionBoxes[boxIndex] = 0.0f;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  detectionBoxes[boxIndex + 1] = 0.0f;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  detectionBoxes[boxIndex + 2] = 0.0f;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  detectionBoxes[boxIndex + 3] = 0.0f;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  }</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  }</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  numDetections[0] = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">float</span>>(numSelected);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> }</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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numOutput; ++i)</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  {</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <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>  <span class="keywordflow">if</span> (i < numSelected)</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  {</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <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>  detectionScores[i] = selectedScores[outputIndices[i]];</div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  detectionClasses[i] = armnn::numeric_cast<float>(selectedClasses[outputIndices[i]]);</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  detectionBoxes[boxIndex] = boxCorners[boxCornorIndex];</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  detectionBoxes[boxIndex + 1] = boxCorners[boxCornorIndex + 1];</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  detectionBoxes[boxIndex + 2] = boxCorners[boxCornorIndex + 2];</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  detectionBoxes[boxIndex + 3] = boxCorners[boxCornorIndex + 3];</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  {</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  detectionScores[i] = 0.0f;</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  detectionClasses[i] = 0.0f;</div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  detectionBoxes[boxIndex] = 0.0f;</div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  detectionBoxes[boxIndex + 1] = 0.0f;</div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  detectionBoxes[boxIndex + 2] = 0.0f;</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  detectionBoxes[boxIndex + 3] = 0.0f;</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  }</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  }</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  numDetections[0] = armnn::numeric_cast<float>(numSelected);</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> }</div> </div><!-- fragment --> -</div> -</div> -<a id="a5980f7b42f4df041efebdc6ae242f686"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a5980f7b42f4df041efebdc6ae242f686">◆ </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 </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> {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</div></div><!-- fragment --> </div> </div> <a id="a2a0bcfb4df0a03357b4cbb8d9e89a3da"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a2a0bcfb4df0a03357b4cbb8d9e89a3da">◆ </a></span>AllTypesAreEqualImpl() <span class="overload">[2/2]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a2a0bcfb4df0a03357b4cbb8d9e89a3da">◆ </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> {</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  static_assert(std::is_same<T, TensorInfo>::value, <span class="stringliteral">"Type T must be a TensorInfo"</span>);</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  </div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">return</span> (t1.GetDataType() == t2.GetDataType()) && <a class="code" href="namespacearmnn.xhtml#a2a0bcfb4df0a03357b4cbb8d9e89a3da">AllTypesAreEqualImpl</a>(t2, rest...);</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</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> {</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  static_assert(std::is_same<T, TensorInfo>::value, <span class="stringliteral">"Type T must be a TensorInfo"</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">return</span> (t1.GetDataType() == t2.GetDataType()) && <a class="code" href="namespacearmnn.xhtml#a2a0bcfb4df0a03357b4cbb8d9e89a3da">AllTypesAreEqualImpl</a>(t2, rest...);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</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">◆ </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 </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> {</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</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">◆ </a></span>Append() <span class="overload">[1/2]</span></h2> +<a id="a0c8a28b71e49c04596289ff281e58f1a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0c8a28b71e49c04596289ff281e58f1a">◆ </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 && </td> - <td class="paramname"><em>optimization</em> </td> + <td class="paramtype">Front && </td> + <td class="paramname"><em>front</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">Others &&... </td> + <td class="paramname"><em>others</em> </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> {</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  Append<Front>(optimizations, std::forward<Front>(front));</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <a class="code" href="namespacearmnn.xhtml#a0c8a28b71e49c04596289ff281e58f1a">Append</a><Others...>(optimizations, std::forward<Others>(others)...);</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> };</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> {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  optimizations.emplace_back(<span class="keyword">new</span> T(optimization));</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> };</div></div><!-- fragment --> </div> </div> -<a id="a0c8a28b71e49c04596289ff281e58f1a"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a0c8a28b71e49c04596289ff281e58f1a">◆ </a></span>Append() <span class="overload">[2/2]</span></h2> +<a id="a4907f6b88c3e72be6b8ae876de355e0a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4907f6b88c3e72be6b8ae876de355e0a">◆ </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 && </td> - <td class="paramname"><em>front</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">Others &&... </td> - <td class="paramname"><em>others</em> </td> + <td class="paramtype">T && </td> + <td class="paramname"><em>optimization</em> </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> {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  Append<Front>(optimizations, std::forward<Front>(front));</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <a class="code" href="namespacearmnn.xhtml#a0c8a28b71e49c04596289ff281e58f1a">Append</a><Others...>(optimizations, std::forward<Others>(others)...);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> };</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 &optimizations, Front &&front, Others &&... 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> {</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  optimizations.emplace_back(<span class="keyword">new</span> T(optimization));</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> };</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">◆ </a></span>ApplyBackendOptimizations()</h2> +<a id="ac39f2b15d34d3e2fc74d586fc3e26231"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac39f2b15d34d3e2fc74d586fc3e26231">◆ </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>< std::vector< std::string > &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > </td> <td class="paramname"><em>errMessages</em> </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> {</div> +<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  <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>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Optimizer_ApplyBackendOptimizations"</span>)</div> +<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  OptimizationResult result;</div> +<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  </div> +<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  <span class="comment">// Get the optimized graph</span></div> +<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  Graph& optGraph = optNetObjPtr->GetGraph();</div> +<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  </div> +<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  <span class="comment">// Run backend specific optimizations</span></div> +<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  for (auto&& selectedBackend : backendSettings.m_SelectedBackends)</div> +<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  {</div> +<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  <span class="keyword">auto</span> backendObjPtr = backends.find(selectedBackend)->second.get();</div> +<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  <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>  </div> +<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  <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>  {</div> +<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  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>  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>  }</div> +<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  </div> +<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  <span class="comment">// Select sub-graphs based on backend</span></div> +<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  SubgraphViewSelector::Subgraphs subgraphs =</div> +<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  SubgraphViewSelector::SelectSubgraphs(optGraph,</div> +<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  <span class="comment">// Select layers assigned to the requested backend</span></div> +<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  [&backendObjPtr](<span class="keyword">const</span> Layer& layer)</div> +<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  {</div> +<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  </div> +<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  <span class="keywordflow">return</span> layer.GetType() != LayerType::Input &&</div> +<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  layer.GetType() != LayerType::Output &&</div> +<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  layer.GetBackendId() == backendObjPtr->GetId();</div> +<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  });</div> +<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  <span class="keywordflow">if</span> (subgraphs.empty())</div> +<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  {</div> +<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  <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>  <span class="keywordflow">continue</span>;</div> +<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  }</div> +<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  </div> +<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  <span class="comment">// Try to optimize each sub-graph</span></div> +<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>& subgraph : subgraphs)</div> +<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  {</div> +<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  <span class="comment">// Try to optimize the current sub-graph</span></div> +<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(backendObjPtr->GetId(), <span class="stringliteral">"Optimizer_OptimizeSubgraph"</span>);</div> +<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  OptimizationViews optimizationViews = backendObjPtr->OptimizeSubgraphView(*subgraph, modelOptions);</div> +<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  <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>  </div> +<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  <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>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>& substitution : optimizationViews.GetSubstitutions())</div> +<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  {</div> +<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  <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>  SubgraphView& replacementSubgraph = substitution.m_ReplacementSubgraph;</div> +<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  SubgraphView& substitutableSubgraph = substitution.m_SubstitutableSubgraph;</div> +<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  optGraph.SubstituteSubgraph(substitutableSubgraph, replacementSubgraph);</div> +<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  </div> +<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  <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>  <span class="keyword">const</span> SubgraphView::IConnectableLayers& subgraphLayers = replacementSubgraph.GetIConnectableLayers();</div> +<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  std::for_each(subgraphLayers.begin(), subgraphLayers.end(), [&selectedBackend](IConnectableLayer* l)</div> +<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  {</div> +<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  ARMNN_ASSERT(l);</div> +<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  PolymorphicDowncast<Layer*>(l)->SetBackendId(selectedBackend);</div> +<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  });</div> +<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  }</div> +<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  </div> +<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  <span class="keywordflow">if</span> (!optimizationViews.GetFailedSubgraphs().empty())</div> +<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  {</div> +<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  std::stringstream warningMsg;</div> +<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  warningMsg << <span class="stringliteral">"Some sub-graph(s) failed to optimized on "</span> << backendObjPtr->GetId() << <span class="stringliteral">" backend."</span>;</div> +<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  <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>  </div> +<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  <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>  BackendSettings settingsCopy(backendSettings);</div> +<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  <span class="keywordflow">if</span> (!backendObjPtr->GetId().IsCpuRef())</div> +<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  {</div> +<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  <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>  settingsCopy.m_IgnoredBackends.insert(backendObjPtr->GetId());</div> +<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>  }</div> +<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  </div> +<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  <span class="keywordtype">int</span> count=0;</div> +<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>& failedSubgraph : optimizationViews.GetFailedSubgraphs())</div> +<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  {</div> +<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  <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>  std::stringstream subgraphMsg;</div> +<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  subgraphMsg << <span class="stringliteral">"Re-assigning backends to "</span> << failedSubgraph.GetIConnectableLayers().size()</div> +<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  << <span class="stringliteral">" layers inside sub-graph "</span> << count++;</div> +<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  <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>  </div> +<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  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>  settingsCopy,</div> +<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  *subgraph,</div> +<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  errMessages);</div> +<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  <span class="keywordflow">if</span> (reassignmentResult.m_Error)</div> +<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  {</div> +<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  <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>  result.m_Error = <span class="keyword">true</span>;</div> +<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  <span class="keywordflow">return</span> result;</div> +<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  }</div> +<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  }</div> +<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  }</div> +<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  }</div> +<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  }</div> +<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  </div> +<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <span class="keywordflow">return</span> result;</div> +<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> }</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> {</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  <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>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Optimizer_ApplyBackendOptimizations"</span>)</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  OptimizationResult result;</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> </div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  <span class="comment">// Get the optimized graph</span></div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  Graph& optGraph = optNetObjPtr->GetGraph();</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> </div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  <span class="comment">// Run backend specific optimizations</span></div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  for (auto&& selectedBackend : backendSettings.m_SelectedBackends)</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  {</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  <span class="keyword">auto</span> backendObjPtr = backends.find(selectedBackend)->second.get();</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  <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> </div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  <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>  {</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  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>  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>  }</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> </div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  <span class="comment">// Select sub-graphs based on backend</span></div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  SubgraphViewSelector::Subgraphs subgraphs =</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  SubgraphViewSelector::SelectSubgraphs(optGraph,</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  <span class="comment">// Select layers assigned to the requested backend</span></div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  [&backendObjPtr](<span class="keyword">const</span> Layer& layer)</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  {</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> </div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  <span class="keywordflow">return</span> layer.GetType() != LayerType::Input &&</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  layer.GetType() != LayerType::Output &&</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  layer.GetBackendId() == backendObjPtr->GetId();</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  });</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  <span class="keywordflow">if</span> (subgraphs.empty())</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  {</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  <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>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  }</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> </div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  <span class="comment">// Try to optimize each sub-graph</span></div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>& subgraph : subgraphs)</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  {</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  <span class="comment">// Try to optimize the current sub-graph</span></div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(backendObjPtr->GetId(), <span class="stringliteral">"Optimizer_OptimizeSubgraph"</span>);</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  OptimizationViews optimizationViews = backendObjPtr->OptimizeSubgraphView(*subgraph, modelOptions);</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  <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> </div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  <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>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>& substitution : optimizationViews.GetSubstitutions())</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  {</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  <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>  SubgraphView& replacementSubgraph = substitution.m_ReplacementSubgraph;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  SubgraphView& substitutableSubgraph = substitution.m_SubstitutableSubgraph;</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  optGraph.SubstituteSubgraph(substitutableSubgraph, replacementSubgraph);</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> </div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  <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>  <span class="keyword">const</span> SubgraphView::IConnectableLayers& subgraphLayers = replacementSubgraph.GetIConnectableLayers();</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  std::for_each(subgraphLayers.begin(), subgraphLayers.end(), [&selectedBackend](IConnectableLayer* l)</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  {</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  <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>  PolymorphicDowncast<Layer*>(l)->SetBackendId(selectedBackend);</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  });</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  }</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> </div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  <span class="keywordflow">if</span> (!optimizationViews.GetFailedSubgraphs().empty())</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  {</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  std::stringstream warningMsg;</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  warningMsg << <span class="stringliteral">"Some sub-graph(s) failed to optimized on "</span> << backendObjPtr->GetId() << <span class="stringliteral">" backend."</span>;</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  <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> </div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  <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>  BackendSettings settingsCopy(backendSettings);</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  <span class="keywordflow">if</span> (!backendObjPtr->GetId().IsCpuRef())</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  {</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  <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>  settingsCopy.m_IgnoredBackends.insert(backendObjPtr->GetId());</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>  }</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> </div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  <span class="keywordtype">int</span> count=0;</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>& failedSubgraph : optimizationViews.GetFailedSubgraphs())</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  {</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  <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>  std::stringstream subgraphMsg;</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  subgraphMsg << <span class="stringliteral">"Re-assigning backends to "</span> << failedSubgraph.GetIConnectableLayers().size()</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  << <span class="stringliteral">" layers inside sub-graph "</span> << count++;</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  <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> </div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  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>  settingsCopy,</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  *subgraph,</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  errMessages);</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  <span class="keywordflow">if</span> (reassignmentResult.m_Error)</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  {</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  <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>  result.m_Error = <span class="keyword">true</span>;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  }</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  }</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  }</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  }</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  }</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> </div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> }</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< Layer, PermuteDepthwiseConv2dWeightsImpl > 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 &&... 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< ConstantLayer, PermuteLayer, ConvertConstPermuteLayersToConstLayers > 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 &warningMessage, Optional< std::vector< std::string > &> 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 &backendSettings, SubgraphView &subgraph, Optional< std::vector< std::string > &> 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">◆ </a></span>ArgMinMax() <span class="overload">[1/3]</span></h2> +<a id="a1687cef9e4d417595f05519f3b67bf0f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1687cef9e4d417595f05519f3b67bf0f">◆ </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>< float > & </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 * </td> + <td class="paramtype">int32_t * </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< IType >::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> {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(outputTensorInfo);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  <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>  uAxis + 1,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  inputTensorInfo.GetNumDimensions());</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outer = 0; outer < outerElements; ++outer) {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inner = 0; inner < innerElements; ++inner) {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  in[outer * axisSize * innerElements + inner];</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1; i < axisSize; ++i) {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  in[(outer * axisSize * innerElements) + (i * innerElements) + inner];</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& 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>  <span class="keywordflow">if</span> ((<span class="keyword">function</span> == <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">armnn::ArgMinMaxFunction::Min</a> && value < tmpValue) ||</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  (<span class="keyword">function</span> == <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">armnn::ArgMinMaxFunction::Max</a> && value > tmpValue)) {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  tmpValue = value;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  tmpIndex = i;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  out[outer * innerElements + inner] = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><OUT>(tmpIndex);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  }</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</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 &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 &&...)</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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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">◆ </a></span>ArgMinMax() <span class="overload">[2/3]</span></h2> +<a id="a4ef59ef40b2161e37f3e5eb990a342ad"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4ef59ef40b2161e37f3e5eb990a342ad">◆ </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 * </td> + <td class="paramtype">int64_t * </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">◆ </a></span>ArgMinMax() <span class="overload">[3/3]</span></h2> +<a id="ad441be836a142e8935e0413f4a22c9ec"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad441be836a142e8935e0413f4a22c9ec">◆ </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>< float > & </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 * </td> + <td class="paramtype">OUT * </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> {</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(outputTensorInfo);</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  </div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  <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>  uAxis + 1,</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  inputTensorInfo.GetNumDimensions());</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outer = 0; outer < outerElements; ++outer) {</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inner = 0; inner < innerElements; ++inner) {</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  in[outer * axisSize * innerElements + inner];</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1; i < axisSize; ++i) {</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  in[(outer * axisSize * innerElements) + (i * innerElements) + inner];</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& 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>  <span class="keywordflow">if</span> ((<span class="keyword">function</span> == <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">armnn::ArgMinMaxFunction::Min</a> && value < tmpValue) ||</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  (<span class="keyword">function</span> == <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">armnn::ArgMinMaxFunction::Max</a> && value > tmpValue)) {</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  tmpValue = value;</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  tmpIndex = i;</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  out[outer * innerElements + inner] = armnn::numeric_cast<OUT>(tmpIndex);</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  }</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  }</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</div> +</div><!-- fragment --> +<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder< IType >::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> {</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">switch</span> (layer.GetType())</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  {</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">case</span> LayerType::Convolution2d:</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">case</span> LayerType::DepthwiseConvolution2d:</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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>  {</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <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>  layer.GetNumInputSlots() == 3);</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  }</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  {</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <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>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  }</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  }</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</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> {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">switch</span> (layer.GetType())</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">case</span> LayerType::Convolution2d:</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">case</span> LayerType::DepthwiseConvolution2d:</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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>  {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <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>  layer.GetNumInputSlots() == 3);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  }</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  {</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <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>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  }</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</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 &rInputShape, Decoder< float > &rInputDecoder, const TensorShape &rOutputShape, Encoder< float > &rOutputEncoder, const TensorShape &rWeightsShape, Decoder< float > &rWeightDecoder, Decoder< float > *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">◆ </a></span>AssignBackends() <span class="overload">[1/3]</span></h2> +<a id="a839ad76f1f52a70b540805b231f05d9c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a839ad76f1f52a70b540805b231f05d9c">◆ </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>< std::vector< std::string > &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > </td> <td class="paramname"><em>errMessages</em> </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> {</div> +<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Optimizer_AssignBackends"</span>);</div> +<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  OptimizationResult result;</div> +<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  </div> +<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <span class="keyword">auto</span> availablePreferredBackends = backendSettings.GetAvailablePreferredBackends();</div> +<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  <span class="keywordflow">if</span> (availablePreferredBackends.empty())</div> +<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  {</div> +<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  std::stringstream failureMsg;</div> +<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  failureMsg << <span class="stringliteral">"No preferred backends are available"</span>;</div> +<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <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>  </div> +<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  result.m_Error = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <span class="keywordflow">return</span> result;</div> +<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  }</div> +<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  </div> +<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <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>  {</div> +<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  <span class="keyword">auto</span> layer = PolymorphicDowncast<Layer*>(*it);</div> +<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  std::vector<DataType> inOutDataType = <a class="code" href="namespacearmnn.xhtml#a2b8ec686784330e8f20e4444f1ed7e98">GetLayerInOutDatatype</a>(layer);</div> +<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  </div> +<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  <span class="comment">// In AttemptBackendAssignment() we check:</span></div> +<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  <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>  <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>  <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>  <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>  <span class="keywordtype">bool</span> isFloat16 = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  <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>  {</div> +<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  <span class="keywordflow">if</span> (type == DataType::Float16)</div> +<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  {</div> +<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  isFloat16 = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  }</div> +<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  }</div> +<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  </div> +<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="keywordflow">if</span> (layer->GetBackendId() == <span class="stringliteral">"Unknown"</span> || isFloat16)</div> +<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  {</div> +<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  <a class="code" href="namespacearmnn.xhtml#af52a698836d638d0a71263c6c1496a05">AssignBackendsIConnectable</a>(optNetObjPtr,</div> +<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  *it,</div> +<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  errMessages,</div> +<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  result,</div> +<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  backendSettings,</div> +<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  availablePreferredBackends);</div> +<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  }</div> +<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  }</div> +<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  </div> +<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  <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>  {</div> +<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  <span class="keyword">auto</span> layer = PolymorphicDowncast<Layer*>(*it);</div> +<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  </div> +<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  <span class="keywordflow">if</span>(layer->GetType() == LayerType::Input)</div> +<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  {</div> +<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  BackendId connectedBackendId = layer->GetOutputSlot(0).GetConnection(0)->GetOwningLayer().GetBackendId();</div> +<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  layer->SetBackendId(connectedBackendId);</div> +<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  }</div> +<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  }</div> +<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  </div> +<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  <span class="keywordflow">return</span> result;</div> +<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> }</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> {</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Optimizer_AssignBackends"</span>);</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  OptimizationResult result;</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span> </div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <span class="keyword">auto</span> availablePreferredBackends = backendSettings.GetAvailablePreferredBackends();</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  <span class="keywordflow">if</span> (availablePreferredBackends.empty())</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  {</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  std::stringstream failureMsg;</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  failureMsg << <span class="stringliteral">"No preferred backends are available"</span>;</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <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> </div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  result.m_Error = <span class="keyword">true</span>;</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  }</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span> </div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <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>  {</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  <span class="keyword">auto</span> layer = PolymorphicDowncast<Layer*>(*it);</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  std::vector<DataType> inOutDataType = <a class="code" href="namespacearmnn.xhtml#a2b8ec686784330e8f20e4444f1ed7e98">GetLayerInOutDatatype</a>(layer);</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span> </div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  <span class="comment">// In AttemptBackendAssignment() we check:</span></div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  <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>  <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>  <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>  <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>  <span class="keywordtype">bool</span> isFloat16 = <span class="keyword">false</span>;</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  <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>  {</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  <span class="keywordflow">if</span> (type == DataType::Float16)</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  {</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  isFloat16 = <span class="keyword">true</span>;</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  }</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  }</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span> </div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="keywordflow">if</span> (layer->GetBackendId() == <span class="stringliteral">"Unknown"</span> || isFloat16)</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  {</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  <a class="code" href="namespacearmnn.xhtml#a3a26a0174216ded9353ca943a66709dc">AssignBackendsIConnectable</a>(optNetObjPtr,</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  *it,</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  errMessages,</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  result,</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  backendSettings,</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  availablePreferredBackends);</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  }</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  }</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span> </div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  <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>  {</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  <span class="keyword">auto</span> layer = PolymorphicDowncast<Layer*>(*it);</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span> </div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  <span class="keywordflow">if</span>(layer->GetType() == LayerType::Input)</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  {</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  BackendId connectedBackendId = layer->GetOutputSlot(0).GetConnection(0)->GetOwningLayer().GetBackendId();</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  layer->SetBackendId(connectedBackendId);</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  }</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  }</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span> </div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span> }</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 &errorMessage, Optional< std::vector< std::string > &> 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< std::vector< std::string > &> errMessages, OptimizationResult &result, BackendSettings &backendSettings, std::vector< BackendId > &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< DataType > 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">◆ </a></span>AssignBackends() <span class="overload">[2/3]</span></h2> +<a id="a0ea4ff80d0075ff847e96dc12e734368"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0ea4ff80d0075ff847e96dc12e734368">◆ </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> * </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> & </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> & </td> - <td class="paramname"><em>lastLayer</em>, </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_subgraph_view.xhtml">SubgraphView</a> & </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>< std::vector< std::string > &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > </td> <td class="paramname"><em>errMessages</em> </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> {</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Optimizer_AssignBackends"</span>);</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  OptimizationResult result;</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span> </div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  <span class="keyword">auto</span> availablePreferredBackends = backendSettings.GetAvailablePreferredBackends();</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <span class="keywordflow">if</span> (availablePreferredBackends.empty())</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  {</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  std::stringstream failureMsg;</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  failureMsg << <span class="stringliteral">"No preferred backends are available"</span>;</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  <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> </div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  result.m_Error = <span class="keyword">true</span>;</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  }</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span> </div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  <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>  {</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <a class="code" href="namespacearmnn.xhtml#a3a26a0174216ded9353ca943a66709dc">AssignBackendsIConnectable</a>(optNetObjPtr,</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  *it,</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  errMessages,</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  result,</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  backendSettings,</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  availablePreferredBackends);</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  }</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span> </div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  <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>  {</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  <span class="keyword">auto</span> layer = PolymorphicDowncast<Layer*>(*it);</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span> </div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  <span class="keywordflow">if</span>(layer->GetType() == LayerType::Input)</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  {</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  BackendId connectedBackendId = layer->GetOutputSlot(0).GetConnection(0)->GetOwningLayer().GetBackendId();</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  layer->SetBackendId(connectedBackendId);</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  }</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  }</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> </div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> }</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 &errorMessage, Optional< std::vector< std::string > &> 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< std::vector< std::string > &> errMessages, OptimizationResult &result, BackendSettings &backendSettings, std::vector< BackendId > &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> {</div> +<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  SubgraphView::IConnectableLayerIterator firstLayer = subgraph.beginIConnectable();</div> +<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  SubgraphView::IConnectableLayerIterator lastLayer = subgraph.endIConnectable();</div> +<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>  <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>  backendSettings,</div> +<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  firstLayer,</div> +<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  lastLayer,</div> +<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  errMessages);</div> +<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> }</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">◆ </a></span>AssignBackends() <span class="overload">[3/3]</span></h2> +<a id="a4a0c704ab68e6741579b60b681e5d919"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4a0c704ab68e6741579b60b681e5d919">◆ </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> * </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> & </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> & </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> & </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>< std::vector< std::string > &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > </td> <td class="paramname"><em>errMessages</em> </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> {</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  SubgraphView::IConnectableLayerIterator firstLayer = subgraph.beginIConnectable();</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  SubgraphView::IConnectableLayerIterator lastLayer = subgraph.endIConnectable();</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>  <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>  backendSettings,</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  firstLayer,</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  lastLayer,</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  errMessages);</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> }</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 &backendSettings, SubgraphView &subgraph, Optional< std::vector< std::string > &> 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> {</div> +<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Optimizer_AssignBackends"</span>);</div> +<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  OptimizationResult result;</div> +<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  </div> +<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  <span class="keyword">auto</span> availablePreferredBackends = backendSettings.GetAvailablePreferredBackends();</div> +<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <span class="keywordflow">if</span> (availablePreferredBackends.empty())</div> +<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  {</div> +<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  std::stringstream failureMsg;</div> +<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  failureMsg << <span class="stringliteral">"No preferred backends are available"</span>;</div> +<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  <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>  </div> +<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  result.m_Error = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  <span class="keywordflow">return</span> result;</div> +<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  }</div> +<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  </div> +<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  <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>  {</div> +<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <a class="code" href="namespacearmnn.xhtml#af52a698836d638d0a71263c6c1496a05">AssignBackendsIConnectable</a>(optNetObjPtr,</div> +<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  *it,</div> +<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  errMessages,</div> +<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  result,</div> +<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  backendSettings,</div> +<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  availablePreferredBackends);</div> +<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  }</div> +<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  </div> +<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  <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>  {</div> +<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  <span class="keyword">auto</span> layer = PolymorphicDowncast<Layer*>(*it);</div> +<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  </div> +<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  <span class="keywordflow">if</span>(layer->GetType() == LayerType::Input)</div> +<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  {</div> +<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  BackendId connectedBackendId = layer->GetOutputSlot(0).GetConnection(0)->GetOwningLayer().GetBackendId();</div> +<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  layer->SetBackendId(connectedBackendId);</div> +<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  }</div> +<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  }</div> +<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  </div> +<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  <span class="keywordflow">return</span> result;</div> +<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> }</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">◆ </a></span>AssignBackendsIConnectable()</h2> +<a id="af52a698836d638d0a71263c6c1496a05"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af52a698836d638d0a71263c6c1496a05">◆ </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>< std::vector< std::string > &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > </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> {</div> +<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="keyword">auto</span> ReturnError = [&](<span class="keyword">const</span> Layer* layer)</div> +<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  {</div> +<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <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>  };</div> +<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  </div> +<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  <span class="keyword">auto</span> layer = PolymorphicDowncast<Layer*>(it);</div> +<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  </div> +<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <span class="keywordflow">if</span> (layer->GetType() == LayerType::Input)</div> +<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  {</div> +<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="keywordflow">return</span>;</div> +<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  }</div> +<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  </div> +<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  std::vector<DataType> inOutDataType = <a class="code" href="namespacearmnn.xhtml#a2b8ec686784330e8f20e4444f1ed7e98">GetLayerInOutDatatype</a>(layer);</div> +<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  </div> +<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  std::string reasonIfUnsupported;</div> +<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  <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>  {</div> +<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <span class="comment">// don't bomb immediately, find all the quantized outputs</span></div> +<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="comment">// which haven't had a scale set and report them all back.</span></div> +<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  result.m_Error = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  }</div> +<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  </div> +<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="comment">// First try assign layer to hint backend</span></div> +<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="keywordflow">if</span> (layer->GetBackendHint().has_value() &&</div> +<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  backendSettings.IsBackendSupported(layer->GetBackendHint().value()) &&</div> +<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <a class="code" href="namespacearmnn.xhtml#abd660675ae5a9df777dcdb30c50224f6">AttemptBackendAssignment</a>(backendSettings,</div> +<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  optNetObjPtr->GetGraph(),</div> +<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  layer,</div> +<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  layer->GetBackendHint().value(),</div> +<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  inOutDataType[0],</div> +<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  inOutDataType[1],</div> +<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  availablePreferredBackends,</div> +<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  reasonIfUnsupported,</div> +<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  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>  {</div> +<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  found = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  backendSettings.m_SelectedBackends.insert(layer->GetBackendHint().value());</div> +<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  }</div> +<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  {</div> +<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  <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>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>& backend : availablePreferredBackends)</div> +<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  {</div> +<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <span class="keywordflow">if</span> (layer->GetBackendHint().has_value() &&</div> +<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  layer->GetBackendHint().value() == backend)</div> +<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  {</div> +<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  <span class="keywordflow">continue</span>; <span class="comment">//Don't re-test the backend hint</span></div> +<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  }</div> +<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  </div> +<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  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>  optNetObjPtr->GetGraph(),</div> +<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  layer,</div> +<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  backend,</div> +<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  inOutDataType[0],</div> +<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  inOutDataType[1],</div> +<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  availablePreferredBackends,</div> +<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  reasonIfUnsupported,</div> +<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  errMessages);</div> +<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  </div> +<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="keywordflow">if</span> (res.IsOk())</div> +<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  {</div> +<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  found = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  backendSettings.m_SelectedBackends.insert(backend);</div> +<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  }</div> +<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <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>  {</div> +<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  result = res; <span class="comment">// Cannot continue.</span></div> +<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="comment">// Note: we don't need to log the error as it would already</span></div> +<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <span class="comment">// be logged in AttemptBackendAssignment().</span></div> +<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  }</div> +<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  {</div> +<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(res.IsWarningOnly(), <span class="stringliteral">"OptimizationResult in unexpected state."</span>);</div> +<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  }</div> +<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  }</div> +<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  }</div> +<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  </div> +<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  <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>  <span class="keywordflow">if</span> (!found)</div> +<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  {</div> +<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <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>  <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>  <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>  <span class="comment">// conditions, currently they comprise MemCopy, Constant, Permute)</span></div> +<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a> layerType = layer->GetType();</div> +<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <span class="keywordflow">if</span> (!backendSettings.IsCpuRefUsed() && (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>  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>  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>  {</div> +<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  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>  layer->SetBackendId(cpuBackendId);</div> +<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  backendSettings.m_SelectedBackends.insert(cpuBackendId);</div> +<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  }</div> +<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  {</div> +<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  result = ReturnError(layer);</div> +<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  }</div> +<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  }</div> +<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  </div> +<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> }</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> {</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="keyword">auto</span> ReturnError = [&](<span class="keyword">const</span> Layer* layer)</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  {</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <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>  };</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span> </div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  <span class="keyword">auto</span> layer = PolymorphicDowncast<Layer*>(it);</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span> </div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <span class="keywordflow">if</span> (layer->GetType() == LayerType::Input)</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  {</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  }</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span> </div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  std::vector<DataType> inOutDataType = <a class="code" href="namespacearmnn.xhtml#a2b8ec686784330e8f20e4444f1ed7e98">GetLayerInOutDatatype</a>(layer);</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span> </div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  std::string reasonIfUnsupported;</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  <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>  {</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <span class="comment">// don't bomb immediately, find all the quantized outputs</span></div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="comment">// which haven't had a scale set and report them all back.</span></div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  result.m_Error = <span class="keyword">true</span>;</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  }</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span> </div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="comment">// First try assign layer to hint backend</span></div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="keywordflow">if</span> (layer->GetBackendHint().has_value() &&</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  backendSettings.IsBackendSupported(layer->GetBackendHint().value()) &&</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <a class="code" href="namespacearmnn.xhtml#a56f168327453ea4461cbc1c0ac7f15b6">AttemptBackendAssignment</a>(backendSettings,</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  optNetObjPtr->GetGraph(),</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  layer,</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  layer->GetBackendHint().value(),</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  inOutDataType[0],</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  inOutDataType[1],</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  availablePreferredBackends,</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  reasonIfUnsupported,</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  errMessages).IsOk())</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  {</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  found = <span class="keyword">true</span>;</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  backendSettings.m_SelectedBackends.insert(layer->GetBackendHint().value());</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  }</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  {</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  <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>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>& backend : availablePreferredBackends)</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  {</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <span class="keywordflow">if</span> (layer->GetBackendHint().has_value() &&</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  layer->GetBackendHint().value() == backend)</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  {</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  <span class="keywordflow">continue</span>; <span class="comment">//Don't re-test the backend hint</span></div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  }</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span> </div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  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>  optNetObjPtr->GetGraph(),</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  layer,</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  backend,</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  inOutDataType[0],</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  inOutDataType[1],</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  availablePreferredBackends,</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  reasonIfUnsupported,</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  errMessages);</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span> </div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="keywordflow">if</span> (res.IsOk())</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  {</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  found = <span class="keyword">true</span>;</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  backendSettings.m_SelectedBackends.insert(backend);</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  }</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <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>  {</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  result = res; <span class="comment">// Cannot continue.</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="comment">// Note: we don't need to log the error as it would already</span></div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <span class="comment">// be logged in AttemptBackendAssignment().</span></div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  }</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  {</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(res.IsWarningOnly(), <span class="stringliteral">"OptimizationResult in unexpected state."</span>);</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  }</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  }</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  }</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span> </div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  <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>  <span class="keywordflow">if</span> (!found)</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  {</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <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>  <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>  <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>  <span class="comment">// conditions, currently they comprise MemCopy, Constant, Permute)</span></div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a> layerType = layer->GetType();</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <span class="keywordflow">if</span> (!backendSettings.IsCpuRefUsed() && (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>  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>  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>  {</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  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>  layer->SetBackendId(cpuBackendId);</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  backendSettings.m_SelectedBackends.insert(cpuBackendId);</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  }</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  {</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  result = ReturnError(layer);</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  }</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  }</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span> </div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span> }</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 &backendSettings, Optional< std::vector< std::string > &> 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< DataType > 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< std::vector< std::string > &> 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 &backendSettings, Graph &graph, Layer *layer, BackendId backend, DataType dataTypeIn, DataType dataTypeOut, const std::vector< BackendId > &availablePreferredBackends, std::string &reasonIfUnsupported, Optional< std::vector< std::string > &> 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> {</div> +<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <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>  <a class="code" href="namespacearmnn.xhtml#afce94270d9c4a51cd0c4ac6a58af4e26">ForEachLayerInput</a>(layerInfos, layerInfo, [&](LayerSelectionInfo& parentInfo)</div> +<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  {</div> +<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="comment">// We can only attach ourselves to the subgraph from this input if there isn't a cut here.</span></div> +<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keywordflow">if</span> (layerInfo.m_IsSelected == parentInfo.m_IsSelected)</div> +<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  {</div> +<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="comment">// We also need to check that merging into this subgraph won't cause a dependency cycle between subgraphs.</span></div> +<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <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>  <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>  <span class="comment">//</span></div> +<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <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>  <span class="comment">// / \ |</span></div> +<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="comment">// 1 0 | We can'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>  <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>  <span class="comment">// X |</span></div> +<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  bool dependenciesOk = true;</div> +<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  ForEachLayerInput(layerInfos, layerInfo, [&](LayerSelectionInfo& otherParentInfo)</div> +<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  {</div> +<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <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>  <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>  if (otherParentInfo.m_Subgraph->HasAntecedent(parentInfo.m_Subgraph.get()))</div> +<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  {</div> +<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  dependenciesOk = false;</div> +<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div> +<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  });</div> +<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  </div> +<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keywordflow">if</span> (dependenciesOk)</div> +<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  {</div> +<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <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>  <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>  <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>  {</div> +<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  layerInfo.m_Subgraph = parentInfo.m_Subgraph;</div> +<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  }</div> +<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  {</div> +<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <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>  <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>  layerInfo.m_Subgraph->MergeWith(parentInfo.m_Subgraph.get());</div> +<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  }</div> +<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  }</div> +<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  }</div> +<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  });</div> +<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  </div> +<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="comment">// If we weren'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>  <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>  {</div> +<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  layerInfo.m_Subgraph = std::make_shared<PartialSubgraph>();</div> +<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div> +<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  </div> +<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <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>  <a class="code" href="namespacearmnn.xhtml#afce94270d9c4a51cd0c4ac6a58af4e26">ForEachLayerInput</a>(layerInfos, layerInfo, [&](LayerSelectionInfo& parentInfo)</div> +<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  {</div> +<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <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>  <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>  <span class="keywordflow">if</span> (!layerInfo.m_Subgraph->IsMergedWith(parentInfo.m_Subgraph.get()))</div> +<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  {</div> +<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  layerInfo.m_Subgraph->AddDirectAntecedent(parentInfo.m_Subgraph.get());</div> +<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  }</div> +<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  });</div> +<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> }</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> {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <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>  <a class="code" href="namespacearmnn.xhtml#afce94270d9c4a51cd0c4ac6a58af4e26">ForEachLayerInput</a>(layerInfos, layerInfo, [&](LayerSelectionInfo& parentInfo)</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  {</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="comment">// We can only attach ourselves to the subgraph from this input if there isn't a cut here.</span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keywordflow">if</span> (layerInfo.m_IsSelected == parentInfo.m_IsSelected)</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  {</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="comment">// We also need to check that merging into this subgraph won't cause a dependency cycle between subgraphs.</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <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>  <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>  <span class="comment">//</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <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>  <span class="comment">// / \ |</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="comment">// 1 0 | We can'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>  <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>  <span class="comment">// X |</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="comment">//</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  bool dependenciesOk = true;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  ForEachLayerInput(layerInfos, layerInfo, [&](LayerSelectionInfo& otherParentInfo)</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  {</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <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>  <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>  if (otherParentInfo.m_Subgraph->HasAntecedent(parentInfo.m_Subgraph.get()))</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  dependenciesOk = false;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  });</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keywordflow">if</span> (dependenciesOk)</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <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>  <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>  <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>  {</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  layerInfo.m_Subgraph = parentInfo.m_Subgraph;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  {</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <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>  <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>  layerInfo.m_Subgraph->MergeWith(parentInfo.m_Subgraph.get());</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  }</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  }</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  }</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  });</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="comment">// If we weren'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>  <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>  {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  layerInfo.m_Subgraph = std::make_shared<PartialSubgraph>();</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <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>  <a class="code" href="namespacearmnn.xhtml#afce94270d9c4a51cd0c4ac6a58af4e26">ForEachLayerInput</a>(layerInfos, layerInfo, [&](LayerSelectionInfo& parentInfo)</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <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>  <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>  <span class="keywordflow">if</span> (!layerInfo.m_Subgraph->IsMergedWith(parentInfo.m_Subgraph.get()))</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  layerInfo.m_Subgraph->AddDirectAntecedent(parentInfo.m_Subgraph.get());</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  }</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  });</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span> }</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 &layerInfos, LayerSelectionInfo &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">◆ </a></span>AttemptBackendAssignment()</h2> +<a id="abd660675ae5a9df777dcdb30c50224f6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abd660675ae5a9df777dcdb30c50224f6">◆ </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>< std::vector< std::string > &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > </td> <td class="paramname"><em>errMessages</em> </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> {</div> +<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  OptimizationResult result;</div> +<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  </div> +<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <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>  <span class="keyword">auto</span> ReturnError = [&](<span class="keyword">const</span> Layer* layer)</div> +<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  {</div> +<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <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>  };</div> +<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  </div> +<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <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>  <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>  layer->SetBackendId(backend);</div> +<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  </div> +<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <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>  <span class="comment">// is older than v8.2, we can check if the operator is supported by changing operator inputs & outputs</span></div> +<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <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>  <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>  std::string checkStr = <span class="stringliteral">"This CPU architecture does not support F16 data type, you need v8.2 or above"</span>;</div> +<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keywordflow">if</span> (!isLayerSupported ||</div> +<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  reasonIfUnsupported.find(checkStr) != std::string::npos)</div> +<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  {</div> +<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">if</span> (dataTypeIn == DataType::Float16 || dataTypeOut == DataType::Float16)</div> +<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  {</div> +<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <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>  && layer->GetType() != LayerType::ConvertFp32ToFp16</div> +<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  && layer->GetType() != LayerType::ConvertFp16ToFp32)</div> +<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  {</div> +<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <span class="keyword">auto</span> ConstantLayerFromFp16ToFp32 = [](Layer& layer)</div> +<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  {</div> +<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="keywordflow">if</span> (layer.GetType() == LayerType::Constant)</div> +<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  {</div> +<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  ConstantLayer* constantLayer = PolymorphicDowncast<ConstantLayer*>(&layer);</div> +<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  </div> +<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keyword">auto</span>& <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a> = constantLayer->m_LayerOutput->GetTensorInfo();</div> +<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  </div> +<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <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>  {</div> +<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  std::vector<float> newValues(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements());</div> +<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  </div> +<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <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>  constantLayer->m_LayerOutput->GetConstTensor<<a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</a>>(),</div> +<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements(),</div> +<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  newValues.data());</div> +<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  </div> +<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  TensorInfo newInfo(info);</div> +<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  newInfo.SetDataType(DataType::Float32);</div> +<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  ConstTensor newInput(newInfo, newValues);</div> +<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  constantLayer->m_LayerOutput.reset(<span class="keyword">new</span> ScopedTensorHandle(newInput));</div> +<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  </div> +<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  layer.GetOutputSlot(0).SetTensorInfo(newInfo);</div> +<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  }</div> +<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  }</div> +<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  };</div> +<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  </div> +<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <span class="keywordtype">bool</span> checkType = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  </div> +<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> inputSlot : layer->GetInputSlots())</div> +<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  {</div> +<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="keyword">auto</span> connectedOutputSlot = inputSlot.GetConnectedOutputSlot();</div> +<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="keywordflow">if</span> (connectedOutputSlot->GetOwningLayer().GetType() == LayerType::Constant)</div> +<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  {</div> +<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <span class="keywordflow">if</span> (connectedOutputSlot->GetNumConnections() == 1)</div> +<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  {</div> +<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  checkType = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  ConstantLayerFromFp16ToFp32(connectedOutputSlot->GetOwningLayer());</div> +<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  }</div> +<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  }</div> +<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  }</div> +<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  </div> +<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="comment">// Insert FP16 -> FP32 conversion layer before current layer</span></div> +<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  std::vector<ConvertFp16ToFp32Layer*> convertFp16ToFp32Layers;</div> +<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="keywordflow">if</span> (dataTypeIn == DataType::Float16)</div> +<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  {</div> +<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  convertFp16ToFp32Layers =</div> +<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <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>  }</div> +<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  </div> +<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="comment">// Insert FP32 -> FP16 conversion layer after current layer</span></div> +<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  std::vector<ConvertFp32ToFp16Layer*> convertFp32ToFp16Layers;</div> +<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <span class="keywordflow">if</span> (dataTypeOut == DataType::Float16)</div> +<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  {</div> +<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  convertFp32ToFp16Layers =</div> +<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <a class="code" href="namespacearmnn.xhtml#abf625e50a5eaeafce5b39580dc95a9d3">InsertConvertFp32ToFp16LayersAfter</a>(graph, *layer);</div> +<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  }</div> +<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  </div> +<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="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>  <span class="keyword">auto</span> AssignFirstSupportedBackend = [&](Layer* layer, BackendId preferredBackend)</div> +<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  {</div> +<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordtype">bool</span> supportedBackendFound = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  std::string reasonIfUnsupported;</div> +<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  </div> +<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="comment">// Try preferred backend first</span></div> +<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  layer->SetBackendId(preferredBackend);</div> +<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  <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>  EmptyOptional(),</div> +<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  reasonIfUnsupported))</div> +<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  {</div> +<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  supportedBackendFound = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  }</div> +<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  {</div> +<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>& backend : availablePreferredBackends)</div> +<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  {</div> +<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <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>  <span class="keywordflow">if</span> (backend == preferredBackend)</div> +<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  {</div> +<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="keywordflow">continue</span>;</div> +<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  }</div> +<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  </div> +<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  layer->SetBackendId(backend);</div> +<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <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>  EmptyOptional(),</div> +<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  reasonIfUnsupported))</div> +<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  {</div> +<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  supportedBackendFound = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  }</div> +<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  }</div> +<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  }</div> +<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  </div> +<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="keywordflow">return</span> supportedBackendFound;</div> +<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  };</div> +<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  </div> +<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="keywordflow">for</span> (ConvertFp16ToFp32Layer* convertLayer : convertFp16ToFp32Layers)</div> +<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  {</div> +<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  <span class="keywordflow">if</span> (!AssignFirstSupportedBackend(convertLayer, backend))</div> +<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  {</div> +<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  <span class="keywordflow">return</span> ReturnError(convertLayer);</div> +<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  }</div> +<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  }</div> +<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  </div> +<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  <span class="keywordflow">for</span> (ConvertFp32ToFp16Layer* convertLayer : convertFp32ToFp16Layers)</div> +<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  {</div> +<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  <span class="keywordflow">if</span> (!AssignFirstSupportedBackend(convertLayer, backend))</div> +<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  {</div> +<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  <span class="keywordflow">return</span> ReturnError(convertLayer);</div> +<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  }</div> +<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  }</div> +<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  </div> +<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  <span class="keywordflow">return</span> result;</div> +<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  }</div> +<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  }</div> +<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  </div> +<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  std::stringstream warningMsg;</div> +<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  warningMsg << <span class="stringliteral">"Layer of type "</span> << <a class="code" href="namespacearmnn.xhtml#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a>(layer->GetType())</div> +<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  << <span class="stringliteral">" is not supported on requested backend "</span> << layer->GetBackendId().Get()</div> +<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  << <span class="stringliteral">" for input data type "</span> << <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">GetDataTypeName</a>(dataTypeIn)</div> +<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  << <span class="stringliteral">" and output data type "</span> << <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">GetDataTypeName</a>(dataTypeOut)</div> +<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  << <span class="stringliteral">" (reason: "</span> << reasonIfUnsupported</div> +<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  << <span class="stringliteral">"), falling back to the next backend."</span>;</div> +<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  <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>  </div> +<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  <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>  }</div> +<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  {</div> +<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  <span class="keywordflow">return</span> result;</div> +<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  }</div> +<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> }</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> {</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  OptimizationResult result;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span> </div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <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>  <span class="keyword">auto</span> ReturnError = [&](<span class="keyword">const</span> Layer* layer)</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <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>  };</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span> </div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <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>  <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>  layer->SetBackendId(backend);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span> </div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <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>  <span class="comment">// is older than v8.2, we can check if the operator is supported by changing operator inputs & outputs</span></div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <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>  <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>  std::string checkStr = <span class="stringliteral">"This CPU architecture does not support F16 data type, you need v8.2 or above"</span>;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keywordflow">if</span> (!isLayerSupported ||</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  reasonIfUnsupported.find(checkStr) != std::string::npos)</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  {</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">if</span> (dataTypeIn == DataType::Float16 || dataTypeOut == DataType::Float16)</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  {</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <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>  && layer->GetType() != LayerType::ConvertFp32ToFp16</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  && layer->GetType() != LayerType::ConvertFp16ToFp32)</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  {</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <span class="keyword">auto</span> ConstantLayerFromFp16ToFp32 = [](Layer& layer)</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  {</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="keywordflow">if</span> (layer.GetType() == LayerType::Constant)</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  {</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  ConstantLayer* constantLayer = PolymorphicDowncast<ConstantLayer*>(&layer);</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span> </div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keyword">auto</span>& <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a> = constantLayer->m_LayerOutput->GetTensorInfo();</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span> </div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <span class="keywordflow">if</span> (info.GetDataType() == DataType::Float16)</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  {</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  std::vector<float> newValues(info.GetNumElements());</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span> </div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <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>  constantLayer->m_LayerOutput->GetConstTensor<<a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</a>>(),</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  info.GetNumElements(),</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  newValues.data());</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span> </div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  TensorInfo newInfo(info);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  newInfo.SetDataType(DataType::Float32);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  ConstTensor newInput(newInfo, newValues);</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  constantLayer->m_LayerOutput.reset(<span class="keyword">new</span> ScopedTensorHandle(newInput));</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span> </div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  layer.GetOutputSlot(0).SetTensorInfo(newInfo);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  }</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  }</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  };</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span> </div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <span class="keywordtype">bool</span> checkType = <span class="keyword">false</span>;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span> </div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> inputSlot : layer->GetInputSlots())</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  {</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="keyword">auto</span> connectedOutputSlot = inputSlot.GetConnectedOutputSlot();</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="keywordflow">if</span> (connectedOutputSlot->GetOwningLayer().GetType() == LayerType::Constant)</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  {</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <span class="keywordflow">if</span> (connectedOutputSlot->GetNumConnections() == 1)</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  {</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  checkType = <span class="keyword">true</span>;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  ConstantLayerFromFp16ToFp32(connectedOutputSlot->GetOwningLayer());</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  }</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  }</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span> </div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="comment">// Insert FP16 -> FP32 conversion layer before current layer</span></div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  std::vector<ConvertFp16ToFp32Layer*> convertFp16ToFp32Layers;</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="keywordflow">if</span> (dataTypeIn == DataType::Float16)</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  {</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  convertFp16ToFp32Layers =</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <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>  }</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span> </div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="comment">// Insert FP32 -> FP16 conversion layer after current layer</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  std::vector<ConvertFp32ToFp16Layer*> convertFp32ToFp16Layers;</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <span class="keywordflow">if</span> (dataTypeOut == DataType::Float16)</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  {</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  convertFp32ToFp16Layers =</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <a class="code" href="namespacearmnn.xhtml#abf625e50a5eaeafce5b39580dc95a9d3">InsertConvertFp32ToFp16LayersAfter</a>(graph, *layer);</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  }</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> </div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="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>  <span class="keyword">auto</span> AssignFirstSupportedBackend = [&](Layer* layer, BackendId preferredBackend)</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  {</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordtype">bool</span> supportedBackendFound = <span class="keyword">false</span>;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  std::string reasonIfUnsupported;</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span> </div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="comment">// Try preferred backend first</span></div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  layer->SetBackendId(preferredBackend);</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  <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>  EmptyOptional(),</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  reasonIfUnsupported))</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  {</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  supportedBackendFound = <span class="keyword">true</span>;</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  }</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  {</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>& backend : availablePreferredBackends)</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  {</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <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>  <span class="keywordflow">if</span> (backend == preferredBackend)</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  {</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  }</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span> </div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  layer->SetBackendId(backend);</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <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>  EmptyOptional(),</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  reasonIfUnsupported))</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  {</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  supportedBackendFound = <span class="keyword">true</span>;</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  }</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  }</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  }</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span> </div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="keywordflow">return</span> supportedBackendFound;</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  };</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span> </div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="keywordflow">for</span> (ConvertFp16ToFp32Layer* convertLayer : convertFp16ToFp32Layers)</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  {</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  <span class="keywordflow">if</span> (!AssignFirstSupportedBackend(convertLayer, backend))</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  {</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  <span class="keywordflow">return</span> ReturnError(convertLayer);</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  }</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  }</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span> </div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  <span class="keywordflow">for</span> (ConvertFp32ToFp16Layer* convertLayer : convertFp32ToFp16Layers)</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  {</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  <span class="keywordflow">if</span> (!AssignFirstSupportedBackend(convertLayer, backend))</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  {</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  <span class="keywordflow">return</span> ReturnError(convertLayer);</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  }</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  }</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span> </div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  }</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  }</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span> </div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  std::stringstream warningMsg;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  warningMsg << <span class="stringliteral">"Layer of type "</span> << <a class="code" href="namespacearmnn.xhtml#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a>(layer->GetType())</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  << <span class="stringliteral">" is not supported on requested backend "</span> << layer->GetBackendId().Get()</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  << <span class="stringliteral">" for input data type "</span> << <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">GetDataTypeName</a>(dataTypeIn)</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  << <span class="stringliteral">" and output data type "</span> << <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">GetDataTypeName</a>(dataTypeOut)</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  << <span class="stringliteral">" (reason: "</span> << reasonIfUnsupported</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  << <span class="stringliteral">"), falling back to the next backend."</span>;</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  <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> </div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  <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>  }</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  {</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  }</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span> }</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< ConvertFp32ToFp16Layer * > InsertConvertFp32ToFp16LayersAfter(Graph &graph, Layer &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< ConvertFp16ToFp32Layer * > InsertConvertFp16ToFp32LayersBefore(Graph &graph, Layer &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 &backendSettings, Optional< std::vector< std::string > &> 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 &warningMessage, Optional< std::vector< std::string > &> 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> {</div> +<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keyword">static</span> BackendRegistry instance;</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keywordflow">return</span> instance;</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> }</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> {</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keyword">static</span> BackendRegistry instance;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keywordflow">return</span> instance;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> }</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> {</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> TensorInfo& 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>  <span class="keyword">const</span> TensorShape inputShape = inputInfo.GetShape();</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  </div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < inputChannels; c++)</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  meanDecoder[c];</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  varianceDecoder[c];</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  betaDecoder[c];</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  gammaDecoder[c];</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <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>  <span class="keywordtype">float</span> add = beta - mult * mean;</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  </div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n = 0; n < inputBatches; n++)</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h < inputHeight; h++)</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  {</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < inputWidth; w++)</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  {</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <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>  inputDecoder[index];</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  outputEncoder[index];</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  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>  }</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  }</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</div> +</div><!-- fragment --> <p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder< IType >::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< LayerDescriptor >::m_Parameters</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder< IType >::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> {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> TensorInfo& 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>  <span class="keyword">const</span> TensorShape inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < inputChannels; c++)</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  meanDecoder[c];</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  varianceDecoder[c];</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  betaDecoder[c];</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  gammaDecoder[c];</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <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>  <span class="keywordtype">float</span> add = beta - mult * mean;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n = 0; n < inputBatches; n++)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h < inputHeight; h++)</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  {</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < inputWidth; w++)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <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>  inputDecoder[index];</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  outputEncoder[index];</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  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>  }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</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> {</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <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>  </div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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">"Expected Input with 4 Dimensions"</span>);</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  </div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <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>  </div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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">"Expected Output with 4 Dimensions"</span>);</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  </div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <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>  <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>  </div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(blockShape.size() > 0, <span class="stringliteral">"BlockShape must contain 1 or more entries"</span>);</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  </div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <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>  <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>  </div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(cropsData.size() > 0, <span class="stringliteral">"Crops must contain 1 or more entries"</span>);</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  </div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <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>  <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>  </div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inBatch = 0; inBatch < inputBatchSize; ++inBatch)</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  {</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <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>  <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>  </div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inH = 0; inH < 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>  <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>  </div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">if</span> (outH >= outputHeight)</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">continue</span>;</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  }</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  </div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inW = 0; inW < 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>  <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>  </div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">if</span> (outW >= outputWidth)</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  {</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">continue</span>;</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  </div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < channels; c++)</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  {</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <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>  <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>  </div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  outputEncoder[outOffset];</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  inputDecoder[inOffset];</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  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>  }</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  }</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  }</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</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< IType >::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< IType >::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> {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <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> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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">"Expected Input with 4 Dimensions"</span>);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <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> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(outputShape.GetNumDimensions() == 4, <span class="stringliteral">"Expected Output with 4 Dimensions"</span>);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <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>  <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> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <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>  <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>  <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> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(blockShape.size() > 0, <span class="stringliteral">"BlockShape must contain 1 or more entries"</span>);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <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>  <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> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(cropsData.size() > 0, <span class="stringliteral">"Crops must contain 1 or more entries"</span>);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <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>  <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> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inBatch = 0; inBatch < inputBatchSize; ++inBatch)</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <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>  <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> </div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inH = 0; inH < 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>  <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> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">if</span> (outH >= outputHeight)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inW = 0; inW < 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>  <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> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">if</span> (outW >= outputWidth)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < channels; c++)</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <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>  <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> </div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  outputEncoder[outOffset];</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  inputDecoder[inOffset];</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  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>  }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</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 & 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 &shape, unsigned int batch, unsigned int height, unsigned int width, unsigned int channels, const DataLayoutIndexed &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> {</div> +<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordtype">int</span> level = 0;</div> +<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">while</span> (eventPtr != <span class="keyword">nullptr</span>)</div> +<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  {</div> +<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  eventPtr = eventPtr->GetParentEvent();</div> +<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  level++;</div> +<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  }</div> +<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">return</span> level;</div> +<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> }</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> {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordtype">int</span> level = 0;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">while</span> (eventPtr != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  eventPtr = eventPtr->GetParentEvent();</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  level++;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">return</span> level;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> }</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> {</div> +<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>  <span class="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div> +<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(toBackend != backends.end(), <span class="stringliteral">"Backend id not found for the connected layer"</span>);</div> +<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>  </div> +<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>  <span class="keyword">auto</span> dstPrefs = toBackend->second.get()->GetHandleFactoryPreferences();</div> +<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>  </div> +<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>  <span class="comment">// Legacy API check for backward compatibility</span></div> +<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>  <span class="keywordflow">if</span> (srcFactoryId == ITensorHandleFactory::LegacyFactoryId || dstPrefs.empty())</div> +<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>  {</div> +<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>  <span class="keywordflow">if</span> (layer.GetBackendId() != connectedLayer.GetBackendId())</div> +<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>  {</div> +<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>  <span class="keywordflow">return</span> EdgeStrategy::CopyToTarget;</div> +<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>  }</div> +<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>  {</div> +<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>  <span class="keywordflow">return</span> EdgeStrategy::DirectCompatibility;</div> +<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>  }</div> +<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>  }</div> +<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>  </div> +<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>  <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>  <span class="comment">// Dst Output layers don't require copy because they use import or map/unmap</span></div> +<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>  <span class="keywordflow">if</span> (connectedLayer.GetType() == LayerType::Output)</div> +<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>  {</div> +<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>  <span class="keywordflow">return</span> EdgeStrategy::DirectCompatibility;</div> +<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>  }</div> +<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>  </div> +<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>  <span class="comment">// Search for direct match in prefs</span></div> +<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& pref : dstPrefs)</div> +<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>  {</div> +<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>  <span class="keywordflow">if</span> (pref == srcFactoryId)</div> +<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>  {</div> +<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>  <span class="keywordflow">return</span> EdgeStrategy::DirectCompatibility;</div> +<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>  }</div> +<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>  }</div> +<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>  </div> +<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>  <span class="comment">// Search for export/import options</span></div> +<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>  ITensorHandleFactory* srcFactory = registry.GetFactory(srcFactoryId);</div> +<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>  <span class="keywordflow">if</span> (srcFactory->GetExportFlags() != 0 && importEnabled)</div> +<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>  {</div> +<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& pref : dstPrefs)</div> +<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>  {</div> +<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>  ITensorHandleFactory* dstFactory = registry.GetFactory(pref);</div> +<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>  </div> +<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>  <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>  <span class="keywordflow">if</span> (!dstFactory) {</div> +<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>  <span class="keywordflow">continue</span>;</div> +<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>  }</div> +<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>  <span class="keywordflow">if</span> ((dstFactory->GetImportFlags() & srcFactory->GetExportFlags()) != 0)</div> +<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>  {</div> +<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>  <span class="keyword">auto</span> srcCapability = srcFactory->GetCapabilities(&layer, &layer, CapabilityClass::PaddingRequired);</div> +<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>  <span class="keyword">auto</span> dstCapability = dstFactory->GetCapabilities(&connectedLayer,</div> +<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>  &connectedLayer,</div> +<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>  CapabilityClass::PaddingRequired);</div> +<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>  <span class="keyword">auto</span> srcFallback = srcFactory->GetCapabilities(&layer, &layer, CapabilityClass::FallbackImportDisabled);</div> +<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>  <span class="keyword">auto</span> dstFallback = dstFactory->GetCapabilities(&connectedLayer,</div> +<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>  &connectedLayer,</div> +<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>  CapabilityClass::FallbackImportDisabled);</div> +<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>  <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>  <span class="keywordflow">if</span> (srcCapability.empty() && dstCapability.empty() && srcFallback.empty() && dstFallback.empty())</div> +<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>  {</div> +<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>  <span class="keywordflow">return</span> EdgeStrategy::ExportToTarget;</div> +<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>  }</div> +<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>  }</div> +<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>  }</div> +<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>  }</div> +<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>  </div> +<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>  <span class="comment">// Search for copy options via map/unmap</span></div> +<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>  <span class="keywordflow">if</span> (srcFactory->SupportsMapUnmap())</div> +<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>  {</div> +<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& pref : dstPrefs)</div> +<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>  {</div> +<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>  ITensorHandleFactory* dstFactory = registry.GetFactory(pref);</div> +<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>  <span class="keywordflow">if</span> (dstFactory && dstFactory->SupportsMapUnmap())</div> +<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>  {</div> +<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>  <span class="keywordflow">return</span> EdgeStrategy::CopyToTarget;</div> +<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>  }</div> +<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>  }</div> +<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>  }</div> +<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>  </div> +<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>  <span class="keywordflow">return</span> EdgeStrategy::Undefined;</div> +<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> }</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> {</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>  <span class="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(toBackend != backends.end(), <span class="stringliteral">"Backend id not found for the connected layer"</span>);</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> </div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>  <span class="keyword">auto</span> dstPrefs = toBackend->second.get()->GetHandleFactoryPreferences();</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> </div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>  <span class="comment">// Legacy API check for backward compatibility</span></div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>  <span class="keywordflow">if</span> (srcFactoryId == ITensorHandleFactory::LegacyFactoryId || dstPrefs.empty())</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>  {</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>  <span class="keywordflow">if</span> (layer.GetBackendId() != connectedLayer.GetBackendId())</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>  {</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>  <span class="keywordflow">return</span> EdgeStrategy::CopyToTarget;</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>  }</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>  {</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>  <span class="keywordflow">return</span> EdgeStrategy::DirectCompatibility;</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>  }</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>  }</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> </div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>  <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>  <span class="comment">// Dst Output layers don't require copy because they use import or map/unmap</span></div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>  <span class="keywordflow">if</span> (connectedLayer.GetType() == LayerType::Output)</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>  {</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>  <span class="keywordflow">return</span> EdgeStrategy::DirectCompatibility;</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>  }</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span> </div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>  <span class="comment">// Search for direct match in prefs</span></div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& pref : dstPrefs)</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>  {</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>  <span class="keywordflow">if</span> (pref == srcFactoryId)</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>  {</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>  <span class="keywordflow">return</span> EdgeStrategy::DirectCompatibility;</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>  }</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>  }</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> </div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>  <span class="comment">// Search for export/import options</span></div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>  ITensorHandleFactory* srcFactory = registry.GetFactory(srcFactoryId);</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>  <span class="keywordflow">if</span> (srcFactory->GetExportFlags() != 0 && importEnabled)</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>  {</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& pref : dstPrefs)</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>  {</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>  ITensorHandleFactory* dstFactory = registry.GetFactory(pref);</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> </div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>  <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>  <span class="keywordflow">if</span> (!dstFactory) {</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>  }</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>  <span class="keywordflow">if</span> ((dstFactory->GetImportFlags() & srcFactory->GetExportFlags()) != 0)</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>  {</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>  <span class="keyword">auto</span> srcCapability = srcFactory->GetCapabilities(&layer, &layer, CapabilityClass::PaddingRequired);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>  <span class="keyword">auto</span> dstCapability = dstFactory->GetCapabilities(&connectedLayer,</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>  &connectedLayer,</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>  CapabilityClass::PaddingRequired);</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>  <span class="keyword">auto</span> srcFallback = srcFactory->GetCapabilities(&layer, &layer, CapabilityClass::FallbackImportDisabled);</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>  <span class="keyword">auto</span> dstFallback = dstFactory->GetCapabilities(&connectedLayer,</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>  &connectedLayer,</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>  CapabilityClass::FallbackImportDisabled);</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>  <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>  <span class="keywordflow">if</span> (srcCapability.empty() && dstCapability.empty() && srcFallback.empty() && dstFallback.empty())</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>  {</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>  <span class="keywordflow">return</span> EdgeStrategy::ExportToTarget;</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>  }</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>  }</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>  }</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>  }</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> </div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>  <span class="comment">// Search for copy options via map/unmap</span></div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>  <span class="keywordflow">if</span> (srcFactory->SupportsMapUnmap())</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>  {</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& pref : dstPrefs)</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>  {</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>  ITensorHandleFactory* dstFactory = registry.GetFactory(pref);</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>  <span class="keywordflow">if</span> (dstFactory && dstFactory->SupportsMapUnmap())</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>  {</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>  <span class="keywordflow">return</span> EdgeStrategy::CopyToTarget;</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>  }</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>  }</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>  }</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> </div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>  <span class="keywordflow">return</span> EdgeStrategy::Undefined;</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> }</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> {</div> +<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  std::vector<unsigned int> paramsShape;</div> +<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < inputInfo0.GetNumDimensions(); ++i)</div> +<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  {</div> +<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  paramsShape.push_back(inputInfo0.GetShape()[i]);</div> +<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  }</div> +<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  </div> +<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  std::vector<unsigned int> indicesShape;</div> +<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < inputInfo1.GetNumDimensions(); ++i)</div> +<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  {</div> +<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  indicesShape.push_back(inputInfo1.GetShape()[i]);</div> +<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  }</div> +<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  </div> +<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  std::map<std::string, unsigned int> keyIndices;</div> +<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  </div> +<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="comment">// N: number of batches</span></div> +<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  keyIndices[<span class="stringliteral">"N"</span>] = 1;</div> +<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  </div> +<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <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>  keyIndices[<span class="stringliteral">"ND"</span>] = indicesShape.back();</div> +<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  </div> +<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <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>  keyIndices[<span class="stringliteral">"W"</span>] =</div> +<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(std::accumulate(std::begin(indicesShape),</div> +<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  std::end(indicesShape) - 1,</div> +<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  1,</div> +<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  std::multiplies<>() ));</div> +<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="comment">// K: range of each index</span></div> +<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  keyIndices[<span class="stringliteral">"K"</span>] =</div> +<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(std::accumulate(std::begin(paramsShape),</div> +<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  std::begin(paramsShape) + <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(keyIndices[<span class="stringliteral">"ND"</span>]),</div> +<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  1,</div> +<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  std::multiplies<>() ));</div> +<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="comment">// C: number of channels for each index</span></div> +<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  keyIndices[<span class="stringliteral">"C"</span>] =</div> +<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(std::accumulate(std::begin(paramsShape) + <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(keyIndices[<span class="stringliteral">"ND"</span>]),</div> +<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  std::end(paramsShape),</div> +<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  1,</div> +<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  std::multiplies<>() ));</div> +<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  </div> +<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">return</span> keyIndices;</div> +<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</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> {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  std::vector<unsigned int> paramsShape;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < inputInfo0.GetNumDimensions(); ++i)</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  paramsShape.push_back(inputInfo0.GetShape()[i]);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  }</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  std::vector<unsigned int> indicesShape;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < inputInfo1.GetNumDimensions(); ++i)</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  indicesShape.push_back(inputInfo1.GetShape()[i]);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  std::map<std::string, unsigned int> keyIndices;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="comment">// N: number of batches</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  keyIndices[<span class="stringliteral">"N"</span>] = 1;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <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>  keyIndices[<span class="stringliteral">"ND"</span>] = indicesShape.back();</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <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>  keyIndices[<span class="stringliteral">"W"</span>] =</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(std::accumulate(std::begin(indicesShape),</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  std::end(indicesShape) - 1,</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  1,</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  std::multiplies<>() ));</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="comment">// K: range of each index</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  keyIndices[<span class="stringliteral">"K"</span>] =</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(std::accumulate(std::begin(paramsShape),</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  std::begin(paramsShape) + static_cast<int>(keyIndices[<span class="stringliteral">"ND"</span>]),</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  1,</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  std::multiplies<>() ));</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="comment">// C: number of channels for each index</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  keyIndices[<span class="stringliteral">"C"</span>] =</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(std::accumulate(std::begin(paramsShape) + static_cast<int>(keyIndices[<span class="stringliteral">"ND"</span>]),</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  std::end(paramsShape),</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  1,</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  std::multiplies<>() ));</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">return</span> keyIndices;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</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> {</div> +<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>  <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>  Layer& layer = outputSlot.GetOwningLayer();</div> +<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>  <span class="keyword">auto</span> frmBackend = backends.find(layer.GetBackendId());</div> +<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>  <span class="keywordflow">if</span> (frmBackend == backends.end() ||</div> +<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>  !frmBackend->second->SupportsTensorAllocatorAPI())</div> +<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>  {</div> +<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>  <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</div> +<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>  }</div> +<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>  </div> +<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>  <span class="keywordtype">bool</span> outputConnection = <span class="keyword">false</span>;</div> +<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& connection : outputSlot.GetConnections())</div> +<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  {</div> +<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>  <span class="keyword">const</span> Layer& connectedLayer = connection->GetOwningLayer();</div> +<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>  <span class="keywordflow">if</span> (connectedLayer.GetType() == LayerType::Output)</div> +<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  {</div> +<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>  outputConnection = <span class="keyword">true</span>;</div> +<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>  }</div> +<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  }</div> +<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>  </div> +<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  IBackendInternal* srcBackend = frmBackend->second.get();</div> +<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>  <span class="keyword">auto</span> srcPrefs = srcBackend->GetHandleFactoryPreferences();</div> +<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>  </div> +<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>  <span class="comment">// Initialize the scores</span></div> +<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>  std::map<ITensorHandleFactory::FactoryId, int> factoryScores;</div> +<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& pref : srcPrefs)</div> +<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>  {</div> +<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>  <span class="keywordflow">if</span> (exportEnabled)</div> +<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>  {</div> +<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>  ITensorHandleFactory* factory = registry.GetFactory(pref);</div> +<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>  <span class="keywordflow">if</span> (outputConnection)</div> +<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>  {</div> +<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>  <span class="comment">// Check if this is fallback case</span></div> +<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>  <span class="keywordtype">bool</span> fallbackConnection = <span class="keyword">false</span>;</div> +<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& inputSlot : layer.GetInputSlots())</div> +<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>  {</div> +<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>  <span class="keywordflow">if</span> (inputSlot.GetConnectedOutputSlot()->GetOwningLayer().GetBackendId() != layer.GetBackendId())</div> +<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>  {</div> +<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  fallbackConnection = <span class="keyword">true</span>;</div> +<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>  }</div> +<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>  }</div> +<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>  <span class="keywordflow">if</span> (fallbackConnection)</div> +<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>  {</div> +<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>  <span class="keyword">auto</span> factoryCap = factory->GetCapabilities(&layer, &layer, CapabilityClass::FallbackImportDisabled);</div> +<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  <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>  <span class="keywordflow">if</span> (!factoryCap.empty())</div> +<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>  {</div> +<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>  <span class="keywordflow">continue</span>;</div> +<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>  }</div> +<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  }</div> +<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (factory->GetExportFlags() == 0)</div> +<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>  {</div> +<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>  <span class="keywordflow">continue</span>;</div> +<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>  }</div> +<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>  }</div> +<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>  <span class="keywordflow">if</span> (!outputConnection)</div> +<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>  {</div> +<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>  <span class="keyword">auto</span> factoryCap = factory->GetCapabilities(&layer, &layer, CapabilityClass::FallbackImportDisabled);</div> +<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>  <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>  <span class="keywordflow">if</span> (!factoryCap.empty())</div> +<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>  {</div> +<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>  <span class="keywordflow">continue</span>;</div> +<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>  }</div> +<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>  }</div> +<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>  </div> +<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>  }</div> +<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>  {</div> +<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>  <span class="comment">// Only consider factories that support map/unmap</span></div> +<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>  ITensorHandleFactory* factory = registry.GetFactory(pref);</div> +<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>  <span class="keywordflow">if</span> (!factory->SupportsMapUnmap())</div> +<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>  {</div> +<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>  <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>  <span class="keywordflow">continue</span>;</div> +<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>  }</div> +<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>  }</div> +<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>  </div> +<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>  </div> +<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>  <span class="keyword">auto</span> it = factoryScores.find(pref);</div> +<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>  <span class="keywordflow">if</span> (it == factoryScores.end())</div> +<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>  {</div> +<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>  <span class="comment">// Add new score to the table</span></div> +<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>  factoryScores[pref] = 0;</div> +<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>  }</div> +<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>  }</div> +<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>  </div> +<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>  <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>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& connection : outputSlot.GetConnections())</div> +<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>  {</div> +<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>  <span class="keyword">const</span> Layer& connectedLayer = connection->GetOwningLayer();</div> +<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>  </div> +<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>  <span class="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div> +<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(toBackend != backends.end(), <span class="stringliteral">"Backend id not found for the connected layer"</span>);</div> +<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>  </div> +<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>  <span class="keyword">auto</span> dstPrefs = toBackend->second.get()->GetHandleFactoryPreferences();</div> +<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& src : srcPrefs)</div> +<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>  {</div> +<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>  <span class="keywordflow">if</span> (factoryScores.find(src) == factoryScores.end()) <span class="comment">// Don't consider excluded factories</span></div> +<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>  {</div> +<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>  <span class="keywordflow">continue</span>;</div> +<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>  }</div> +<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>  </div> +<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& dst : dstPrefs)</div> +<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>  {</div> +<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>  <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>  {</div> +<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>  <span class="comment">// Copy avoided, increase the score</span></div> +<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>  factoryScores[src]++;</div> +<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>  }</div> +<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>  }</div> +<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>  }</div> +<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>  }</div> +<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>  </div> +<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>  <span class="comment">// Find the lowest score</span></div> +<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>  <span class="keywordtype">int</span> minScore = std::numeric_limits<int>::max();</div> +<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>  <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>  {</div> +<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>  minScore = std::min(minScore, it.second);</div> +<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>  }</div> +<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>  </div> +<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>  <span class="comment">// Collect factories matching the best(lowest) score</span></div> +<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>  std::vector<ITensorHandleFactory::FactoryId> optimalFactories;</div> +<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>  <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>  {</div> +<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>  <span class="keywordflow">if</span> (it.second == minScore)</div> +<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>  {</div> +<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>  optimalFactories.push_back(it.first);</div> +<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>  }</div> +<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>  }</div> +<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>  </div> +<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  <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>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& srcPref : srcPrefs)</div> +<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>  {</div> +<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& comp : optimalFactories)</div> +<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>  {</div> +<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>  <span class="keywordflow">if</span> (comp == srcPref)</div> +<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>  {</div> +<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>  <span class="keywordflow">return</span> comp;</div> +<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>  }</div> +<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>  }</div> +<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>  }</div> +<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>  </div> +<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>  <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</div> +<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> }</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> {</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>  <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>  Layer& layer = outputSlot.GetOwningLayer();</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>  <span class="keyword">auto</span> frmBackend = backends.find(layer.GetBackendId());</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>  <span class="keywordflow">if</span> (frmBackend == backends.end() ||</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>  !frmBackend->second->SupportsTensorAllocatorAPI())</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>  {</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>  <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>  }</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> </div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>  <span class="keywordtype">bool</span> outputConnection = <span class="keyword">false</span>;</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& connection : outputSlot.GetConnections())</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  {</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>  <span class="keyword">const</span> Layer& connectedLayer = connection->GetOwningLayer();</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>  <span class="keywordflow">if</span> (connectedLayer.GetType() == LayerType::Output)</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  {</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>  outputConnection = <span class="keyword">true</span>;</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>  }</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  }</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> </div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  IBackendInternal* srcBackend = frmBackend->second.get();</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>  <span class="keyword">auto</span> srcPrefs = srcBackend->GetHandleFactoryPreferences();</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> </div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>  <span class="comment">// Initialize the scores</span></div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>  std::map<ITensorHandleFactory::FactoryId, int> factoryScores;</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& pref : srcPrefs)</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>  {</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>  <span class="keywordflow">if</span> (exportEnabled)</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>  {</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>  ITensorHandleFactory* factory = registry.GetFactory(pref);</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>  <span class="keywordflow">if</span> (outputConnection)</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>  {</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>  <span class="comment">// Check if this is fallback case</span></div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>  <span class="keywordtype">bool</span> fallbackConnection = <span class="keyword">false</span>;</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& inputSlot : layer.GetInputSlots())</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>  {</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>  <span class="keywordflow">if</span> (inputSlot.GetConnectedOutputSlot()->GetOwningLayer().GetBackendId() != layer.GetBackendId())</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>  {</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  fallbackConnection = <span class="keyword">true</span>;</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>  }</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>  }</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>  <span class="keywordflow">if</span> (fallbackConnection)</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>  {</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>  <span class="keyword">auto</span> factoryCap = factory->GetCapabilities(&layer, &layer, CapabilityClass::FallbackImportDisabled);</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  <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>  <span class="keywordflow">if</span> (!factoryCap.empty())</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>  {</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>  }</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  }</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (factory->GetExportFlags() == 0)</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>  {</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>  }</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>  }</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>  <span class="keywordflow">if</span> (!outputConnection)</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>  {</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>  <span class="keyword">auto</span> factoryCap = factory->GetCapabilities(&layer, &layer, CapabilityClass::FallbackImportDisabled);</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>  <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>  <span class="keywordflow">if</span> (!factoryCap.empty())</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>  {</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>  }</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>  }</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> </div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>  }</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>  {</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>  <span class="comment">// Only consider factories that support map/unmap</span></div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>  ITensorHandleFactory* factory = registry.GetFactory(pref);</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>  <span class="keywordflow">if</span> (!factory->SupportsMapUnmap())</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>  {</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>  <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>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>  }</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>  }</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> </div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> </div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>  <span class="keyword">auto</span> it = factoryScores.find(pref);</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>  <span class="keywordflow">if</span> (it == factoryScores.end())</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>  {</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>  <span class="comment">// Add new score to the table</span></div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>  factoryScores[pref] = 0;</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>  }</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>  }</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> </div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>  <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>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& connection : outputSlot.GetConnections())</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>  {</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>  <span class="keyword">const</span> Layer& connectedLayer = connection->GetOwningLayer();</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> </div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>  <span class="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(toBackend != backends.end(), <span class="stringliteral">"Backend id not found for the connected layer"</span>);</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> </div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>  <span class="keyword">auto</span> dstPrefs = toBackend->second.get()->GetHandleFactoryPreferences();</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& src : srcPrefs)</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>  {</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>  <span class="keywordflow">if</span> (factoryScores.find(src) == factoryScores.end()) <span class="comment">// Don't consider excluded factories</span></div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>  {</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>  }</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> </div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& dst : dstPrefs)</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>  {</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>  <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>  {</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>  <span class="comment">// Copy avoided, increase the score</span></div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>  factoryScores[src]++;</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>  }</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>  }</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>  }</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>  }</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> </div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>  <span class="comment">// Find the lowest score</span></div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>  <span class="keywordtype">int</span> minScore = std::numeric_limits<int>::max();</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>  <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>  {</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>  minScore = std::min(minScore, it.second);</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>  }</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> </div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>  <span class="comment">// Collect factories matching the best(lowest) score</span></div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>  std::vector<ITensorHandleFactory::FactoryId> optimalFactories;</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>  <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>  {</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>  <span class="keywordflow">if</span> (it.second == minScore)</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>  {</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>  optimalFactories.push_back(it.first);</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>  }</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>  }</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> </div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  <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>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& srcPref : srcPrefs)</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>  {</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& comp : optimalFactories)</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>  {</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>  <span class="keywordflow">if</span> (comp == srcPref)</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>  {</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>  <span class="keywordflow">return</span> comp;</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>  }</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>  }</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>  }</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> </div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>  <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> }</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 &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> {</div> +<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  Layer& layer = slot.GetOwningLayer();</div> +<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  <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>  </div> +<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <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>  <span class="comment">// doesn'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>  <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>  <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>  </div> +<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  <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>  <span class="keyword">auto</span> frmBackend = backends.find(layer.GetBackendId());</div> +<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>  <span class="keywordflow">if</span> (frmBackend == backends.end() ||</div> +<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  !frmBackend->second->SupportsTensorAllocatorAPI())</div> +<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>  {</div> +<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</div> +<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  }</div> +<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  </div> +<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>  <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>  <span class="comment">// fewest copies.</span></div> +<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>  std::map<ITensorHandleFactory::FactoryId, int> factoryScores;</div> +<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  <span class="keywordtype">int</span> topScore = 0;</div> +<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  <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>  </div> +<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& connection : slot.GetConnections())</div> +<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  {</div> +<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  </div> +<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  <span class="keyword">const</span> Layer& connectedLayer = connection->GetOwningLayer();</div> +<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  </div> +<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  <span class="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div> +<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(toBackend != backends.end(), <span class="stringliteral">"Backend id not found for the connected layer"</span>);</div> +<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>  </div> +<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  <span class="keywordflow">if</span> (!toBackend->second.get()->SupportsTensorAllocatorAPI())</div> +<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  {</div> +<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  <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>  <span class="keywordflow">continue</span>;</div> +<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>  }</div> +<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>  </div> +<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>  <span class="keyword">auto</span> dstPrefs = toBackend->second.get()->GetHandleFactoryPreferences();</div> +<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& dst : dstPrefs)</div> +<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>  {</div> +<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>  <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>  <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>  ITensorHandleFactory* factory = registry.GetFactory(dst);</div> +<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  <span class="keywordflow">if</span> (importEnabled && factory->GetImportFlags() == 0)</div> +<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>  {</div> +<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>  <span class="keywordflow">continue</span>;</div> +<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>  }</div> +<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!importEnabled && !factory->SupportsMapUnmap())</div> +<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>  {</div> +<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>  <span class="keywordflow">continue</span>;</div> +<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>  }</div> +<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>  </div> +<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>  <span class="keyword">auto</span> it = factoryScores.find(dst);</div> +<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>  <span class="keywordflow">if</span> (it == factoryScores.end())</div> +<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>  {</div> +<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>  <span class="comment">// Add new score to the table</span></div> +<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>  factoryScores[dst] = 0;</div> +<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>  <span class="keywordflow">if</span> (topChoice == ITensorHandleFactory::LegacyFactoryId)</div> +<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>  {</div> +<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>  topChoice = dst;</div> +<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>  }</div> +<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>  }</div> +<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>  {</div> +<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>  <span class="comment">// Increase the score</span></div> +<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>  factoryScores[dst]++;</div> +<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  </div> +<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  <span class="comment">// Track the best option</span></div> +<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>  <span class="keywordflow">if</span> (factoryScores[dst] > topScore)</div> +<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>  {</div> +<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  topScore = factoryScores[dst];</div> +<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>  topChoice = dst;</div> +<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>  }</div> +<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  }</div> +<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  }</div> +<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  }</div> +<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>  </div> +<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>  <span class="keywordflow">return</span> topChoice;</div> +<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> }</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> {</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  Layer& layer = slot.GetOwningLayer();</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  <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> </div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <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>  <span class="comment">// doesn'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>  <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>  <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> </div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  <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>  <span class="keyword">auto</span> frmBackend = backends.find(layer.GetBackendId());</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>  <span class="keywordflow">if</span> (frmBackend == backends.end() ||</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  !frmBackend->second->SupportsTensorAllocatorAPI())</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>  {</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  }</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> </div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>  <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>  <span class="comment">// fewest copies.</span></div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>  std::map<ITensorHandleFactory::FactoryId, int> factoryScores;</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  <span class="keywordtype">int</span> topScore = 0;</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  <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> </div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& connection : slot.GetConnections())</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  {</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> </div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  <span class="keyword">const</span> Layer& connectedLayer = connection->GetOwningLayer();</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> </div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  <span class="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(toBackend != backends.end(), <span class="stringliteral">"Backend id not found for the connected layer"</span>);</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> </div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  <span class="keywordflow">if</span> (!toBackend->second.get()->SupportsTensorAllocatorAPI())</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  {</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  <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>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>  }</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> </div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>  <span class="keyword">auto</span> dstPrefs = toBackend->second.get()->GetHandleFactoryPreferences();</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& dst : dstPrefs)</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>  {</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>  <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>  <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>  ITensorHandleFactory* factory = registry.GetFactory(dst);</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  <span class="keywordflow">if</span> (importEnabled && factory->GetImportFlags() == 0)</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>  {</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>  }</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!importEnabled && !factory->SupportsMapUnmap())</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>  {</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>  }</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> </div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>  <span class="keyword">auto</span> it = factoryScores.find(dst);</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>  <span class="keywordflow">if</span> (it == factoryScores.end())</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>  {</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>  <span class="comment">// Add new score to the table</span></div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>  factoryScores[dst] = 0;</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>  <span class="keywordflow">if</span> (topChoice == ITensorHandleFactory::LegacyFactoryId)</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>  {</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>  topChoice = dst;</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>  }</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>  }</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>  {</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>  <span class="comment">// Increase the score</span></div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>  factoryScores[dst]++;</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> </div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  <span class="comment">// Track the best option</span></div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>  <span class="keywordflow">if</span> (factoryScores[dst] > topScore)</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>  {</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  topScore = factoryScores[dst];</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>  topChoice = dst;</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>  }</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  }</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  }</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  }</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> </div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>  <span class="keywordflow">return</span> topChoice;</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> }</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> {</div> +<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  <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>  <span class="keywordflow">return</span> ITensorHandleFactory::DeferredFactoryId;</div> +<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> }</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> {</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  <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>  <span class="keywordflow">return</span> ITensorHandleFactory::DeferredFactoryId;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> }</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 &&...)</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> {</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <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>  std::vector<IConnectableLayer*> layers;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <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>  std::vector<uint32_t> axes;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <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> </div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <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>  {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <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>  TensorInfo layerInfo = baseLayer->GetInputSlot(0).GetConnectedOutputSlot()->GetTensorInfo();</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  axes.emplace_back(desc.m_vAxis[i]);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">const</span> TensorInfo& reducedTensorInfo = <a class="code" href="namespacearmnn.xhtml#a9d43aa01b882d8776ab9403eea3cf779">ComputeReductionTensorShape</a>(layerInfo,</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  axes,</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  desc.m_KeepDims);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <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>  <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>  std::vector<uint32_t> singleAxis(1, desc.m_vAxis[i] - recalulatedAxis);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="comment">// Create a descriptor and assign single axis.</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  ReduceDescriptor newReduceDescriptor = baseLayer->GetParameters();</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  newReduceDescriptor.m_vAxis.assign(singleAxis.begin(), singleAxis.end());</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="comment">// Add new layer to graph.</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  std::string layerName = <span class="stringliteral">"reduce_layer_"</span> + std::to_string(i);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  Layer* replacementLayer = PolymorphicDowncast<Layer*>(</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  optimizationViews.GetINetwork()->AddReduceLayer(newReduceDescriptor,</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  layerName.c_str()));</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="comment">// Connect previous layer with new layer.</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <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>  <span class="keywordflow">if</span> (!layers.empty())</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  layers[i - 1]->GetOutputSlot(0).Connect(replacementLayer->GetInputSlot(0));</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="comment">// Set updated tensorInfo for new layer.</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  replacementLayer->GetOutputSlot(0).SetTensorInfo(reducedTensorInfo);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">if</span> (!desc.m_KeepDims)</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  {</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  recalulatedAxis++;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  layers.emplace_back(replacementLayer);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <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>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(baseLayer->GetOutputSlot(0).GetTensorInfo() ==</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  PolymorphicDowncast<Layer*>(layers.back())->GetOutputSlot().GetTensorInfo());</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keywordflow">return</span> layers;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> }</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 &input, const std::vector< uint32_t > &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> {</div> +<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <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>  std::vector<IConnectableLayer*> layers;</div> +<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  </div> +<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <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>  std::vector<uint32_t> axes;</div> +<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <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>  </div> +<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <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>  {</div> +<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <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>  TensorInfo layerInfo = baseLayer->GetInputSlot(0).GetConnectedOutputSlot()->GetTensorInfo();</div> +<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  </div> +<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  axes.emplace_back(desc.m_vAxis[i]);</div> +<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  </div> +<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">const</span> TensorInfo& reducedTensorInfo = <a class="code" href="namespacearmnn.xhtml#a9d43aa01b882d8776ab9403eea3cf779">ComputeReductionTensorShape</a>(layerInfo,</div> +<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  axes,</div> +<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  desc.m_KeepDims);</div> +<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  </div> +<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <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>  <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>  std::vector<uint32_t> singleAxis(1, desc.m_vAxis[i] - recalulatedAxis);</div> +<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  </div> +<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="comment">// Create a descriptor and assign single axis.</span></div> +<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  ReduceDescriptor newReduceDescriptor = baseLayer->GetParameters();</div> +<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  newReduceDescriptor.m_vAxis.assign(singleAxis.begin(), singleAxis.end());</div> +<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  </div> +<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="comment">// Add new layer to graph.</span></div> +<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  std::string layerName = <span class="stringliteral">"reduce_layer_"</span> + std::to_string(i);</div> +<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  </div> +<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  Layer* replacementLayer = PolymorphicDowncast<Layer*>(</div> +<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  optimizationViews.GetINetwork()->AddReduceLayer(newReduceDescriptor,</div> +<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  layerName.c_str()));</div> +<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  </div> +<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="comment">// Connect previous layer with new layer.</span></div> +<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <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>  <span class="keywordflow">if</span> (!layers.empty())</div> +<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  {</div> +<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  layers[i - 1]->GetOutputSlot(0).Connect(replacementLayer->GetInputSlot(0));</div> +<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  }</div> +<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  </div> +<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="comment">// Set updated tensorInfo for new layer.</span></div> +<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  replacementLayer->GetOutputSlot(0).SetTensorInfo(reducedTensorInfo);</div> +<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  </div> +<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">if</span> (!desc.m_KeepDims)</div> +<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  {</div> +<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  recalulatedAxis++;</div> +<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  }</div> +<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  </div> +<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  layers.emplace_back(replacementLayer);</div> +<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  }</div> +<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  </div> +<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <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>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(baseLayer->GetOutputSlot(0).GetTensorInfo() ==</div> +<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  PolymorphicDowncast<Layer*>(layers.back())->GetOutputSlot().GetTensorInfo());</div> +<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  </div> +<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keywordflow">return</span> layers;</div> +<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> }</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> {</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">return</span> (<span class="keyword">static_cast<</span><a class="code" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a><span class="keyword">></span>(source) & flags) != 0;</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> }</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> {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">return</span> (static_cast<MemorySourceFlags>(source) & flags) != 0;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> }</div></div><!-- fragment --> </div> </div> -<a id="af002111f64aee648e3258247075cae36"></a> -<h2 class="memtitle"><span class="permalink"><a href="#af002111f64aee648e3258247075cae36">◆ </a></span>CheckScaleSetOnQuantizedType()</h2> +<a id="a8bf1222ae8931bf663fa076b3e3b6f0e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8bf1222ae8931bf663fa076b3e3b6f0e">◆ </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>< std::vector< std::string > &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > </td> <td class="paramname"><em>errMessages</em> </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> {</div> +<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keywordtype">bool</span> noErrors = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputs = layer->GetNumOutputSlots();</div> +<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numOutputs; i++) {</div> +<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  OutputSlot& outputSlot = layer->GetOutputSlot(i);</div> +<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  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>  <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>  {</div> +<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <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>  {</div> +<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  noErrors = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  std::stringstream ss;</div> +<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  ss << <span class="stringliteral">"output "</span> << i << <span class="stringliteral">" of layer "</span> << <a class="code" href="namespacearmnn.xhtml#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a>(layer->GetType())</div> +<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  << <span class="stringliteral">" ("</span> << layer->GetNameStr() << <span class="stringliteral">") is of type"</span></div> +<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  << <span class="stringliteral">" Quantized 8 bit but its scale parameter has not been set"</span>;</div> +<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <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>  }</div> +<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <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>  <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>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset() != 0) &&</div> +<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  layer->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>  {</div> +<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  std::stringstream ss;</div> +<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  ss << <span class="stringliteral">"Quantization parameters for Softmax layer (Scale: "</span> <<</div> +<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale() << <span class="stringliteral">" and Offset: "</span> << <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset() <<</div> +<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="stringliteral">") are incorrect and have been updated to Scale: 0.00390625 and Offset: 0"</span>;</div> +<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) << ss.str();</div> +<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <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>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.SetQuantizationOffset(0);</div> +<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  outputSlot.SetTensorInfo(info);</div> +<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  }</div> +<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  }</div> +<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  }</div> +<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keywordflow">return</span> noErrors;</div> +<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> }</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> {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keywordtype">bool</span> noErrors = <span class="keyword">true</span>;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputs = layer->GetNumOutputSlots();</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numOutputs; i++) {</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  OutputSlot& outputSlot = layer->GetOutputSlot(i);</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  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>  <span class="keywordflow">if</span> (DataType::QAsymmU8 == info.GetDataType())</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  {</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordflow">if</span> (0.f == info.GetQuantizationScale())</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  {</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  noErrors = <span class="keyword">false</span>;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  std::stringstream ss;</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  ss << <span class="stringliteral">"output "</span> << i << <span class="stringliteral">" of layer "</span> << <a class="code" href="namespacearmnn.xhtml#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a>(layer->GetType())</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  << <span class="stringliteral">" ("</span> << layer->GetNameStr() << <span class="stringliteral">") is of type"</span></div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  << <span class="stringliteral">" Quantized 8 bit but its scale parameter has not been set"</span>;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <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>  }</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <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>  <span class="keywordflow">if</span> ((info.GetQuantizationScale() != (1.0f / 256.0f) ||</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  info.GetQuantizationOffset() != 0) &&</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  layer->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>  {</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  std::stringstream ss;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  ss << <span class="stringliteral">"Quantization parameters for Softmax layer (Scale: "</span> <<</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  info.GetQuantizationScale() << <span class="stringliteral">" and Offset: "</span> << info.GetQuantizationOffset() <<</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="stringliteral">") are incorrect and have been updated to Scale: 0.00390625 and Offset: 0"</span>;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) << ss.str();</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  info.SetQuantizationScale((1.0f /256.0f));</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  info.SetQuantizationOffset(0);</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  outputSlot.SetTensorInfo(info);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  }</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  }</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  }</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keywordflow">return</span> noErrors;</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span> }</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 &errorMessage, Optional< std::vector< std::string > &> 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">◆ </a></span>CheckSupportRule()</h2> +<a id="aa588395c0d3b0074091b497835aaa309"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa588395c0d3b0074091b497835aaa309">◆ </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>< std::string &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::string & > </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< std::is_reference< T >::value, T >::value()</a>.</p> +<div class="fragment"><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> {</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordtype">bool</span> supported = rule();</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">if</span> (!supported && reason)</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  {</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  reasonIfUnsupported.value() += std::string(reason) + <span class="stringliteral">"\n"</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>  }</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> supported;</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</div> +</div><!-- fragment --> +<p class="reference">References <a class="el" href="_optional_8hpp_source.xhtml#l00146">OptionalReferenceSwitch< IsReference, T >::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> {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordtype">bool</span> supported = rule();</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">if</span> (!supported && reason)</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  reasonIfUnsupported.value() += std::string(reason) + <span class="stringliteral">"\n"</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>  }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> supported;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</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> {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keywordflow">return</span> arm_compute::CLAbsLayer::validate(&aclInput, &aclOutput);</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> }</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> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keywordflow">return</span> arm_compute::CLAbsLayer::validate(&aclInput, &aclOutput);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> }</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> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(descriptor);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> arm_compute::CLActivationLayer::validate(&aclInput,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  &aclOutput,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  activationLayerInfo);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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 &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> {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(descriptor);</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> arm_compute::CLActivationLayer::validate(&aclInput,</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  &aclOutput,</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  activationLayerInfo);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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> {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <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>  activationDescriptor);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLArithmeticAddition::validate(&aclInput0Info,</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  &aclInput1Info,</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  &aclOutputInfo,</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  g_AclConvertPolicy,</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  activationInfo);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</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 &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> {</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  </div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <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>  activationDescriptor);</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  </div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLArithmeticAddition::validate(&aclInput0Info,</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  &aclInput1Info,</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  g_AclConvertPolicy,</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  activationInfo);</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  </div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</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> {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  <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> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">auto</span> numDims = input.GetNumDimensions();</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(CalcAclAxis(numDims, unsignedAxis));</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">if</span> (descriptor.m_Function == ArgMinMaxFunction::Max)</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">return</span> arm_compute::CLArgMinMaxLayer::validate(&aclInput, aclAxis, &aclOutput,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  arm_compute::ReductionOperation::ARG_IDX_MAX);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> arm_compute::CLArgMinMaxLayer::validate(&aclInput, aclAxis, &aclOutput,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  arm_compute::ReductionOperation::ARG_IDX_MIN);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  <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>  </div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">auto</span> numDims = input.GetNumDimensions();</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  <span class="keywordtype">int</span> aclAxis = armnn::numeric_cast<int>(CalcAclAxis(numDims, unsignedAxis));</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">if</span> (descriptor.m_Function == ArgMinMaxFunction::Max)</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  {</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">return</span> arm_compute::CLArgMinMaxLayer::validate(&aclInput, aclAxis, &aclOutput,</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  arm_compute::ReductionOperation::ARG_IDX_MAX);</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  }</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  {</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> arm_compute::CLArgMinMaxLayer::validate(&aclInput, aclAxis, &aclOutput,</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  arm_compute::ReductionOperation::ARG_IDX_MIN);</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  }</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</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> { <span class="keywordflow">return</span> <span class="stringliteral">"GpuAcc"</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> { <span class="keywordflow">return</span> <span class="stringliteral">"GpuAcc"</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> {</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">if</span> (descriptor.m_AdjointX || descriptor.m_AdjointY )</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  {</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">throw</span> Exception(<span class="stringliteral">"Support for adjoint not implemented."</span>);</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  }</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <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>  {</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">throw</span> Exception(<span class="stringliteral">"Only supported the MatMul in the last 2 dimensions"</span>);</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  </div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <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>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  arm_compute::TensorInfo aclPermutedXInfo = arm_compute::TensorInfo();</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  arm_compute::TensorInfo aclPermutedYInfo = arm_compute::TensorInfo();</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  </div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <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>  {</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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>  </div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <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>  <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>  <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>  aclPermutedXInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permutedXInfo, 3);</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  </div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  statusPermuteX = arm_compute::CLPermute::validate(&aclInputXInfo,</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  &aclPermutedXInfo,</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  aclPermutationXVector);</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  </div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <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>  {</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <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>  </div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <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>  <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>  <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>  aclPermutedYInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permutedYInfo, 3);</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  </div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  statusPermuteY = arm_compute::CLPermute::validate(&aclInputYInfo,</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  &aclPermutedYInfo,</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  aclPermutationYVector);</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  </div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keyword">const</span> arm_compute::GEMMInfo& 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>  <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>  <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>  </div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  </div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  statusGEMM = arm_compute::CLGEMM::validate(descriptor.m_TransposeX ? &aclPermutedXInfo : &aclInputXInfo,</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  descriptor.m_TransposeY ? &aclPermutedYInfo : &aclInputYInfo,</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keyword">nullptr</span>,</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  1.0,</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  0,</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  gemm_info);</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  </div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">if</span> (statusPermuteX.error_code() == arm_compute::ErrorCode::OK &&</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  statusPermuteY.error_code() == arm_compute::ErrorCode::OK &&</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  statusGEMM.error_code() == arm_compute::ErrorCode::OK)</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <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>  <span class="stringliteral">"All Batch Mat Mul layers validate status OK."</span>);</div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  }</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <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>  <span class="stringliteral">"BatchMatMul layer validate status failed."</span></div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  + statusGEMM.error_description()</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  + statusPermuteX.error_description()</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  + statusPermuteY.error_description());</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  </div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</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> {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">if</span> (descriptor.m_AdjointX || descriptor.m_AdjointY )</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">throw</span> Exception(<span class="stringliteral">"Support for adjoint not implemented."</span>);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  }</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <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>  {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">throw</span> Exception(<span class="stringliteral">"Only supported the MatMul in the last 2 dimensions"</span>);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <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>  <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>  <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> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <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>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  arm_compute::TensorInfo aclPermutedXInfo = arm_compute::TensorInfo();</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  arm_compute::TensorInfo aclPermutedYInfo = arm_compute::TensorInfo();</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <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>  {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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> </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <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>  <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>  <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>  aclPermutedXInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permutedXInfo, 3);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  statusPermuteX = arm_compute::CLPermute::validate(&aclInputXInfo,</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  &aclPermutedXInfo,</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  aclPermutationXVector);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <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>  {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <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> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <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>  <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>  <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>  aclPermutedYInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permutedYInfo, 3);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  statusPermuteY = arm_compute::CLPermute::validate(&aclInputYInfo,</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  &aclPermutedYInfo,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  aclPermutationYVector);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keyword">const</span> arm_compute::GEMMInfo& 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>  <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>  <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> </div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  statusGEMM = arm_compute::CLGEMM::validate(descriptor.m_TransposeX ? &aclPermutedXInfo : &aclInputXInfo,</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  descriptor.m_TransposeY ? &aclPermutedYInfo : &aclInputYInfo,</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  &aclOutputInfo,</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  1.0,</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  0,</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  gemm_info);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">if</span> (statusPermuteX.error_code() == arm_compute::ErrorCode::OK &&</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  statusPermuteY.error_code() == arm_compute::ErrorCode::OK &&</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  statusGEMM.error_code() == arm_compute::ErrorCode::OK)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <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>  <span class="stringliteral">"All Batch Mat Mul layers validate status OK."</span>);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <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>  <span class="stringliteral">"BatchMatMul layer validate status failed."</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  + statusGEMM.error_description()</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  + statusPermuteX.error_description()</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  + statusPermuteY.error_description());</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</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 &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 &srcShape, const armnn::PermutationVector &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> {</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo =</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  armcomputetensorutils::BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo =</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  armcomputetensorutils::BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclMeanInfo =</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  armcomputetensorutils::BuildArmComputeTensorInfo(mean, descriptor.m_DataLayout);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclVarInfo =</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  armcomputetensorutils::BuildArmComputeTensorInfo(var, descriptor.m_DataLayout);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclBetaInfo =</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  armcomputetensorutils::BuildArmComputeTensorInfo(beta, descriptor.m_DataLayout);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclGammaInfo =</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  armcomputetensorutils::BuildArmComputeTensorInfo(gamma, descriptor.m_DataLayout);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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>  activationDescriptor);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">return</span> arm_compute::CLBatchNormalizationLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  &aclOutputInfo,</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  &aclMeanInfo,</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  &aclVarInfo,</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  &aclBetaInfo,</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  &aclGammaInfo,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  descriptor.m_Eps,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  activationInfo);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</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 &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> {</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo =</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  armcomputetensorutils::BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo =</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  armcomputetensorutils::BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclMeanInfo =</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  armcomputetensorutils::BuildArmComputeTensorInfo(mean, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclVarInfo =</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  armcomputetensorutils::BuildArmComputeTensorInfo(var, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclBetaInfo =</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  armcomputetensorutils::BuildArmComputeTensorInfo(beta, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclGammaInfo =</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  armcomputetensorutils::BuildArmComputeTensorInfo(gamma, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  </div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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>  activationDescriptor);</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">return</span> arm_compute::CLBatchNormalizationLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  &aclMeanInfo,</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  &aclVarInfo,</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  &aclBetaInfo,</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  &aclGammaInfo,</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  descriptor.m_Eps,</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  activationInfo);</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</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> {</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <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>  <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>  </div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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>  int32_t blockHeight = armnn::numeric_cast<int32_t>(descriptor.m_BlockShape[0]);</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  int32_t blockWidth = armnn::numeric_cast<int32_t>(descriptor.m_BlockShape[1]);</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  </div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <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>  </div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLBatchToSpaceLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  blockWidth,</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  blockHeight,</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  &aclOutputInfo);</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</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> {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <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>  <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> </div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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>  int32_t blockHeight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><int32_t>(descriptor.m_BlockShape[0]);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  int32_t blockWidth = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><int32_t>(descriptor.m_BlockShape[1]);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <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> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLBatchToSpaceLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  blockWidth,</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  blockHeight,</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  &aclOutputInfo);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  <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>  </div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keywordflow">return</span> arm_compute::CLCast::validate(&aclInput, &aclOutput, g_AclConvertPolicy);</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> }</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> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  <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> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keywordflow">return</span> arm_compute::CLCast::validate(&aclInput, &aclOutput, g_AclConvertPolicy);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> }</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> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  <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>  <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>  <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>  <span class="keywordflow">if</span> (input.GetNumDimensions() == 4)</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  {</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">switch</span> (descriptor.m_Axis)</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  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>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">case</span> 3:</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  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>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Unsupported axis"</span>};</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  aclInputInfo.set_data_layout(aclDataLayout);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  aclOutputInfo.set_data_layout(aclDataLayout);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">return</span> arm_compute::CLChannelShuffleLayer::validate(&aclInputInfo, &aclOutputInfo, descriptor.m_NumGroups);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Unsupported number of dimensions"</span>};</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</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> {</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  <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>  <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>  <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>  <span class="keywordflow">if</span> (input.GetNumDimensions() == 4)</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  {</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">switch</span> (descriptor.m_Axis)</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  {</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">case</span> 1:</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  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>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">case</span> 3:</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  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>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Unsupported axis"</span>};</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  }</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  aclInputInfo.set_data_layout(aclDataLayout);</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  aclOutputInfo.set_data_layout(aclDataLayout);</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">return</span> arm_compute::CLChannelShuffleLayer::validate(&aclInputInfo, &aclOutputInfo, descriptor.m_NumGroups);</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  }</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  {</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Unsupported number of dimensions"</span>};</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  }</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</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> {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <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> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLComparison::validate(&aclInput0Info,</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  &aclInput1Info,</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  &aclOutputInfo,</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  comparisonOperation);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> }</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 &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> {</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  </div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <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>  </div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLComparison::validate(&aclInput0Info,</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  &aclInput1Info,</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  comparisonOperation);</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> }</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">◆ </a></span>ClConcatWorkloadValidate()</h2> +<a id="a0784b1fdac2844c5d6f331ab6e9af547"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0784b1fdac2844c5d6f331ab6e9af547">◆ </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< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *> & </td> + <td class="paramtype">const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> * > & </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> {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  std::vector<arm_compute::TensorInfo> aclInputs;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  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>  aclInputs.emplace_back(aclInputInfo);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  }</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  std::vector<const arm_compute::ITensorInfo*> aclInputPtrs;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">for</span> (arm_compute::ITensorInfo& input : aclInputs)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  aclInputPtrs.emplace_back(&input);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordtype">size_t</span> aclAxis = CalcAxis(descriptor);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> arm_compute::CLConcatenateLayer::validate(aclInputPtrs, &aclOutputInfo, aclAxis);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</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> {</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  std::vector<arm_compute::TensorInfo> aclInputs;</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  {</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  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>  aclInputs.emplace_back(aclInputInfo);</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  }</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  std::vector<const arm_compute::ITensorInfo*> aclInputPtrs;</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">for</span> (arm_compute::ITensorInfo& input : aclInputs)</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  aclInputPtrs.emplace_back(&input);</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordtype">size_t</span> aclAxis = CalcAxis(descriptor);</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> arm_compute::CLConcatenateLayer::validate(aclInputPtrs, &aclOutputInfo, aclAxis);</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</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> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  std::array<arm_compute::DataType,8> supportedTypes = {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  arm_compute::DataType::F16,</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  arm_compute::DataType::F32,</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  arm_compute::DataType::QASYMM8,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  arm_compute::DataType::QASYMM8_SIGNED,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  arm_compute::DataType::QSYMM16,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  arm_compute::DataType::QSYMM8,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  arm_compute::DataType::QSYMM8_PER_CHANNEL,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  arm_compute::DataType::S32</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  };</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">if</span> (it != end(supportedTypes))</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <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>  }</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Unsupported DataType"</span>};</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> }</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> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  </div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  std::array<arm_compute::DataType,8> supportedTypes = {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  arm_compute::DataType::F16,</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  arm_compute::DataType::F32,</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  arm_compute::DataType::QASYMM8,</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  arm_compute::DataType::QASYMM8_SIGNED,</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  arm_compute::DataType::QSYMM16,</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  arm_compute::DataType::QSYMM8,</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  arm_compute::DataType::QSYMM8_PER_CHANNEL,</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  arm_compute::DataType::S32</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  };</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  </div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">if</span> (it != end(supportedTypes))</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  {</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <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>  }</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Unsupported DataType"</span>};</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> }</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>  {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">return</span> flatbuffers::BufferHasIdentifier(</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  buf, <a class="code" href="namespacearmnn.xhtml#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a>());</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> }</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>  {</div> +<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">return</span> flatbuffers::BufferHasIdentifier(</div> +<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  buf, <a class="code" href="namespacearmnn.xhtml#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a>());</div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> }</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>  {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">return</span> <span class="stringliteral">"armnn"</span>;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  {</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">return</span> <span class="stringliteral">"armnn"</span>;</div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</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>  {</div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ARMN"</span>;</div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> }</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>  {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ARMN"</span>;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> }</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> {</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">if</span> (input.GetDataType() != DataType::Float16)</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  {</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Input should be Float16"</span>);</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  }</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">if</span> (output.GetDataType() != DataType::Float32)</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Output should be Float32"</span>);</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  }</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  </div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  </div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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>  &aclInputInfo, &aclOutputInfo, g_AclConvertPolicy, 0);</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  </div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</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> {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">if</span> (input.GetDataType() != DataType::Float16)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Input should be Float16"</span>);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">if</span> (output.GetDataType() != DataType::Float32)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Output should be Float32"</span>);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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>  &aclInputInfo, &aclOutputInfo, g_AclConvertPolicy, 0);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</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> {</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">if</span> (input.GetDataType() != DataType::Float32)</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  {</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Input should be Float32"</span>);</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  }</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">if</span> (output.GetDataType() != DataType::Float16)</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Output should be Float16"</span>);</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  }</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  </div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  </div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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>  &aclInputInfo, &aclOutputInfo, g_AclConvertPolicy, 0);</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  </div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</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> {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">if</span> (input.GetDataType() != DataType::Float32)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Input should be Float32"</span>);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">if</span> (output.GetDataType() != DataType::Float16)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Output should be Float16"</span>);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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>  &aclInputInfo, &aclOutputInfo, g_AclConvertPolicy, 0);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</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> {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  <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>  arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  aclWeightsInfo.set_are_values_constant(weights.IsConstant());</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <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>  descriptor.m_DilationY);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <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>  <span class="comment">// Same for bias as weights. We don't currently support non const.</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">if</span> (!biases.value().IsConstant())</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <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>  <span class="stringliteral">"ArmNN ClConvolution2dWorkload does not support non constant bias."</span>};</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  }</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  aclBiasesInfo.set_are_values_constant(biases.value().IsConstant());</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  optionalAclBiasesInfo = &aclBiasesInfo;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  arm_compute::PadStrideInfo layerInfo = BuildArmComputePadStrideInfo(descriptor);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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>  activationDescriptor);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> arm_compute::CLConvolutionLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  &aclWeightsInfo,</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  optionalAclBiasesInfo,</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  &aclOutputInfo,</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  layerInfo,</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  arm_compute::WeightsInfo(),</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  aclDilationInfo,</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  activationInfo,</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  isFastMathEnabled);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</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 &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> {</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  <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>  arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  aclWeightsInfo.set_are_values_constant(weights.IsConstant());</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  </div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <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>  descriptor.m_DilationY);</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  </div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  arm_compute::TensorInfo aclBiasesInfo;</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  {</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <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>  <span class="comment">// Same for bias as weights. We don't currently support non const.</span></div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">if</span> (!biases.value().IsConstant())</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  {</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <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>  <span class="stringliteral">"ArmNN ClConvolution2dWorkload does not support non constant bias."</span>};</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  }</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  aclBiasesInfo.set_are_values_constant(biases.value().IsConstant());</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  optionalAclBiasesInfo = &aclBiasesInfo;</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  }</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  </div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  arm_compute::PadStrideInfo layerInfo = BuildArmComputePadStrideInfo(descriptor);</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  </div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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>  activationDescriptor);</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  </div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> arm_compute::CLConvolutionLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  &aclWeightsInfo,</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  optionalAclBiasesInfo,</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  layerInfo,</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  arm_compute::WeightsInfo(),</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  aclDilationInfo,</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  activationInfo,</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  isFastMathEnabled);</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</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> {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  <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> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  arm_compute::TensorInfo* optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <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>  aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  optionalAclBiasesInfo = &aclBiasesInfo;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <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> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  isFastMathEnabled,</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  activationDescriptor);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> arm_compute::CLConv3D::validate(&aclInputInfo,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  &aclWeightsInfo,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  optionalAclBiasesInfo,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  &aclOutputInfo,</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  aclConv3DInfo);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</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> {</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  <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>  </div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  arm_compute::TensorInfo aclBiasesInfo;</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  arm_compute::TensorInfo* optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <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>  aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  optionalAclBiasesInfo = &aclBiasesInfo;</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  </div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <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>  </div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  isFastMathEnabled,</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  activationDescriptor);</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  </div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> arm_compute::CLConv3D::validate(&aclInputInfo,</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  &aclWeightsInfo,</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  optionalAclBiasesInfo,</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  aclConv3DInfo);</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</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> {</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <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>  <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>  </div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  int32_t blockSize = armnn::numeric_cast<int32_t>(descriptor.m_BlockSize);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  </div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLDepthToSpaceLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  blockSize);</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</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> {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <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>  <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> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  int32_t blockSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><int32_t>(descriptor.m_BlockSize);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLDepthToSpaceLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  &aclOutputInfo,</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  blockSize);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <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>  <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> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <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>  <span class="comment">//</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="comment">// ACL format for weights for depthwise is:</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  <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>  <span class="comment">//</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <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>  <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>  <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>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclDepthMultiplier;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  TensorInfo weightsPermuted;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  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> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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>  arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weightsPermuted, descriptor.m_DataLayout);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  aclWeightsInfo.set_are_values_constant(weights.IsConstant());</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  arm_compute::TensorInfo* optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <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>  <span class="comment">// Same for bias as weights. We don't currently support non const.</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">if</span> (!biases.value().IsConstant())</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <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>  <span class="stringliteral">"ArmNN ClDepthwiseConv2dWorkload does not support non constant bias."</span>};</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  aclBiasesInfo.set_are_values_constant(biases.value().IsConstant());</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  optionalAclBiasesInfo = &aclBiasesInfo;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">const</span> arm_compute::PadStrideInfo aclPadStrideInfo = BuildArmComputePadStrideInfo(descriptor);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">const</span> arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  descriptor.m_DilationX,</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  descriptor.m_DilationY);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <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>  activationDescriptor);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">return</span> arm_compute::CLDepthwiseConvolutionLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  &aclWeightsInfo,</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  optionalAclBiasesInfo,</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  &aclOutputInfo,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  aclPadStrideInfo,</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  aclDepthMultiplier,</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  activationInfo,</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  aclDilationInfo);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }</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< TensorInfo, unsigned int > Convert1HWOTensorInfoToAcl(const TensorInfo &weightInfo, const TensorInfo &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 &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> {</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <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>  <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>  </div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <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>  <span class="comment">//</span></div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="comment">// ACL format for weights for depthwise is:</span></div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  <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>  <span class="comment">//</span></div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <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>  <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>  <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>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclDepthMultiplier;</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  TensorInfo weightsPermuted;</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  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>  </div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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>  arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weightsPermuted, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  aclWeightsInfo.set_are_values_constant(weights.IsConstant());</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  </div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  arm_compute::TensorInfo aclBiasesInfo;</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  arm_compute::TensorInfo* optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  {</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <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>  <span class="comment">// Same for bias as weights. We don't currently support non const.</span></div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">if</span> (!biases.value().IsConstant())</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <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>  <span class="stringliteral">"ArmNN ClDepthwiseConv2dWorkload does not support non constant bias."</span>};</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  aclBiasesInfo.set_are_values_constant(biases.value().IsConstant());</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  optionalAclBiasesInfo = &aclBiasesInfo;</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  </div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">const</span> arm_compute::PadStrideInfo aclPadStrideInfo = BuildArmComputePadStrideInfo(descriptor);</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">const</span> arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  descriptor.m_DilationX,</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  descriptor.m_DilationY);</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  </div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <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>  activationDescriptor);</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  </div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">return</span> arm_compute::CLDepthwiseConvolutionLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  &aclWeightsInfo,</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  optionalAclBiasesInfo,</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  aclPadStrideInfo,</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  aclDepthMultiplier,</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  activationInfo,</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  aclDilationInfo);</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  </div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }</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> {</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> arm_compute::CLDequantizationLayer::validate(&aclInputInfo, &aclOutputInfo);</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> }</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> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> arm_compute::CLDequantizationLayer::validate(&aclInputInfo, &aclOutputInfo);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> }</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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  <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> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  activationDescriptor);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">return</span> arm_compute::CLArithmeticDivision::validate(&aclInput1, &aclInput2, &aclOutput, activationInfo);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</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 &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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  activationDescriptor);</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  </div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">return</span> arm_compute::CLArithmeticDivision::validate(&aclInput1, &aclInput2, &aclOutput, activationInfo);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</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> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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>  </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::CLExpLayer::validate(&aclInput, &aclOutput);</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::CLExpLayer::validate(&aclInput, &aclOutput);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div> +<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <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>  <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>  </div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keywordflow">return</span> arm_compute::CLFloor::validate(&aclInput, &aclOutput);</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> }</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> {</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <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>  <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> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keywordflow">return</span> arm_compute::CLFloor::validate(&aclInput, &aclOutput);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> }</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> {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  arm_compute::TensorInfo aclWeights = BuildArmComputeTensorInfo(weights);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  aclWeights.set_are_values_constant(weights.IsConstant());</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  arm_compute::TensorInfo aclBiases;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  arm_compute::TensorInfo* optionalAclBiases = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  <span class="comment">// Same for bias as weights. We don't currently support non const.</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">if</span> (!biases.value().IsConstant())</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  <span class="stringliteral">"Arm NN ClFullyConnectedWorkload does not support non constant bias."</span>};</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  aclBiases = BuildArmComputeTensorInfo(biases.value());</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  aclBiases.set_are_values_constant(biases.value().IsConstant());</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  optionalAclBiases = &aclBiases;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  }</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">const</span> arm_compute::FullyConnectedLayerInfo fullyConnectedLayerInfo =</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <a class="code" href="namespacearmnn.xhtml#ae2e0c1d8160fadce44d479379790718e">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a>(descriptor, activationDescriptor);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> arm_compute::CLFullyConnectedLayer::validate(&aclInput,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  &aclWeights,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  optionalAclBiases,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  &aclOutput,</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  fullyConnectedLayerInfo);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</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 &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> {</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  arm_compute::TensorInfo aclWeights = BuildArmComputeTensorInfo(weights);</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  aclWeights.set_are_values_constant(weights.IsConstant());</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  arm_compute::TensorInfo aclBiases;</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  arm_compute::TensorInfo* optionalAclBiases = <span class="keyword">nullptr</span>;</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  {</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  <span class="comment">// Same for bias as weights. We don't currently support non const.</span></div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">if</span> (!biases.value().IsConstant())</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  {</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  <span class="stringliteral">"Arm NN ClFullyConnectedWorkload does not support non constant bias."</span>};</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  aclBiases = BuildArmComputeTensorInfo(biases.value());</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  aclBiases.set_are_values_constant(biases.value().IsConstant());</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  optionalAclBiases = &aclBiases;</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  }</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  </div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">const</span> arm_compute::FullyConnectedLayerInfo fullyConnectedLayerInfo =</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <a class="code" href="namespacearmnn.xhtml#ae2e0c1d8160fadce44d479379790718e">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a>(descriptor, activationDescriptor);</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> arm_compute::CLFullyConnectedLayer::validate(&aclInput,</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  &aclWeights,</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  optionalAclBiases,</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  &aclOutput,</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  fullyConnectedLayerInfo);</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</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> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="comment">// Calculate ND, K, W, C.</span></div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  std::map<std::string, unsigned int> 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> <span class="comment"></span> </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> /// Validate Mul</span></div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <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>  <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>  indices_W_ND_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"W"</span>], keyIndices[<span class="stringliteral">"ND"</span>] });</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  </div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="comment">// Flattened coefficients with shape { ND }</span></div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <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>  flattenedCoeff_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"ND"</span>] });</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  </div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="comment">// Output of Mul with shape { W, ND }</span></div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  </div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">auto</span> statusMul = arm_compute::CLPixelWiseMultiplication::validate(&aclIndicesInfo,</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  &aclFlattenedCoeffInfo,</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  &aclOutputMulInfo,</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  1.0f,</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  arm_compute::ConvertPolicy::WRAP,</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  arm_compute::RoundingPolicy::TO_ZERO,</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  arm_compute::ActivationLayerInfo());</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment"></span> </div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment"> /// Validate ReduceSum</span></div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <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>  <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>  flattenedIndices_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"W"</span>] });</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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>  </div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">const</span> std::vector<unsigned int> armnnReduceAxes(1, 1);</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <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>  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>  armnnReduceAxes);</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  </div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">auto</span> statusReduceSum = arm_compute::CLReductionOperation::validate(&aclOutputMulInfo,</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  &aclFlattenedIndicesInfo,</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(coords[0]),</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  arm_compute::ReductionOperation::SUM,</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">false</span>);</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment"></span> </div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment"> /// Validate Gather</span></div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <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>  <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>  params_K_C_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"K"</span>], keyIndices[<span class="stringliteral">"C"</span>] });</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <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>  </div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// Output of gather with shape { W, C }</span></div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <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>  outputGather_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"W"</span>], keyIndices[<span class="stringliteral">"C"</span>] });</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <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>  </div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <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>  <span class="keyword">auto</span> statusGather =</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  arm_compute::CLGather::validate(&aclParamsInfo, &aclFlattenedIndicesInfo, &aclOutputGatherInfo, aclAxis);</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment"></span> </div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment"> /// Validate Reshape</span></div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <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>  </div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">auto</span> statusReshape = arm_compute::CLReshapeLayer::validate(&aclOutputGatherInfo, &aclOutputInfo);</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment"></span> </div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <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> <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>  <span class="keywordflow">if</span> (statusMul.error_code() == okCode &&</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  statusReduceSum.error_code() == okCode &&</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  statusGather.error_code() == okCode &&</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  statusReshape.error_code() == okCode)</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  {</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <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>  <span class="stringliteral">"All GatherND layers validate status OK."</span>);</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  {</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <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>  <span class="stringliteral">"GatherND layer validate status failed."</span>);</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  }</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> }</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> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="comment">// Calculate ND, K, W, C.</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  std::map<std::string, unsigned int> 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> <span class="comment"></span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> /// Validate Mul</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <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>  <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>  indices_W_ND_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"W"</span>], keyIndices[<span class="stringliteral">"ND"</span>] });</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="comment">// Flattened coefficients with shape { ND }</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <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>  flattenedCoeff_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"ND"</span>] });</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="comment">// Output of Mul with shape { W, ND }</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">auto</span> statusMul = arm_compute::CLPixelWiseMultiplication::validate(&aclIndicesInfo,</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  &aclFlattenedCoeffInfo,</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  &aclOutputMulInfo,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  1.0f,</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  arm_compute::ConvertPolicy::WRAP,</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  arm_compute::RoundingPolicy::TO_ZERO,</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  arm_compute::ActivationLayerInfo());</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment"></span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment"> /// Validate ReduceSum</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <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>  <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>  flattenedIndices_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"W"</span>] });</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">const</span> std::vector<unsigned int> armnnReduceAxes(1, 1);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <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>  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>  armnnReduceAxes);</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">auto</span> statusReduceSum = arm_compute::CLReductionOperation::validate(&aclOutputMulInfo,</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  &aclFlattenedIndicesInfo,</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  static_cast<unsigned int>(coords[0]),</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  arm_compute::ReductionOperation::SUM,</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">false</span>);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment"></span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment"> /// Validate Gather</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <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>  <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>  params_K_C_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"K"</span>], keyIndices[<span class="stringliteral">"C"</span>] });</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <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> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// Output of gather with shape { W, C }</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <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>  outputGather_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"W"</span>], keyIndices[<span class="stringliteral">"C"</span>] });</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <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> </div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <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>  <span class="keyword">auto</span> statusGather =</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  arm_compute::CLGather::validate(&aclParamsInfo, &aclFlattenedIndicesInfo, &aclOutputGatherInfo, aclAxis);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment"></span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment"> /// Validate Reshape</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <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> </div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">auto</span> statusReshape = arm_compute::CLReshapeLayer::validate(&aclOutputGatherInfo, &aclOutputInfo);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment"></span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <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> <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>  <span class="keywordflow">if</span> (statusMul.error_code() == okCode &&</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  statusReduceSum.error_code() == okCode &&</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  statusGather.error_code() == okCode &&</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  statusReshape.error_code() == okCode)</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <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>  <span class="stringliteral">"All GatherND layers validate status OK."</span>);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <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>  <span class="stringliteral">"GatherND layer validate status failed."</span>);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> }</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 &armnnAxis, const armnn::TensorInfo &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< std::string, unsigned int > 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< unsigned int, MaxNumOfTensorDimensions > 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 &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> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclIndices = BuildArmComputeTensorInfo(indices);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keywordflow">return</span> arm_compute::CLGather::validate(&aclInput, &aclIndices, &aclOutput, aclAxis);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</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 &armnnAxis, const armnn::TensorInfo &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> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclIndices = BuildArmComputeTensorInfo(indices);</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  </div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keywordflow">return</span> arm_compute::CLGather::validate(&aclInput, &aclIndices, &aclOutput, aclAxis);</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</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> {</div> +<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Arm/Cl/ImportTensorHandleFactory"</span>;</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> }</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> {</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Arm/Cl/ImportTensorHandleFactory"</span>;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> }</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> {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  <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>  </div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keywordflow">return</span> arm_compute::CLInstanceNormalizationLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  descriptor.m_Gamma,</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  descriptor.m_Beta,</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  descriptor.m_Eps);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  <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> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keywordflow">return</span> arm_compute::CLInstanceNormalizationLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  &aclOutputInfo,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  descriptor.m_Gamma,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  descriptor.m_Beta,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  descriptor.m_Eps);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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> {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  </div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keywordflow">return</span> arm_compute::CLL2NormalizeLayer::validate(&aclInput, &aclOutput, axis, descriptor.m_Eps);</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</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> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keywordflow">return</span> arm_compute::CLL2NormalizeLayer::validate(&aclInput, &aclOutput, axis, descriptor.m_Eps);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</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> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo0 = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo1 = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLLogicalAnd::validate(&aclInputInfo0,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  &aclInputInfo1,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  &aclOutputInfo);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> }</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> {</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo0 = BuildArmComputeTensorInfo(input0);</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo1 = BuildArmComputeTensorInfo(input1);</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLLogicalAnd::validate(&aclInputInfo0,</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  &aclInputInfo1,</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  &aclOutputInfo);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> }</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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLLogicalNot::validate(&aclInputInfo,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  &aclOutputInfo);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLLogicalNot::validate(&aclInputInfo,</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  &aclOutputInfo);</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</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> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo0 = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo1 = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLLogicalOr::validate(&aclInputInfo0,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  &aclInputInfo1,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  &aclOutputInfo);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> }</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> {</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo0 = BuildArmComputeTensorInfo(input0);</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo1 = BuildArmComputeTensorInfo(input1);</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLLogicalOr::validate(&aclInputInfo0,</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  &aclInputInfo1,</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  &aclOutputInfo);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> }</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> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  <span class="keywordflow">return</span> arm_compute::CLLogSoftmaxLayer::validate(&aclInputInfo, &aclOutputInfo, descriptor.m_Beta, aclAxis);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> }</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 &armnnAxis, const armnn::TensorInfo &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> {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  <span class="keywordflow">return</span> arm_compute::CLLogSoftmaxLayer::validate(&aclInputInfo, &aclOutputInfo, descriptor.m_Beta, aclAxis);</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> }</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> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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>  </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::CLLogLayer::validate(&aclInput, &aclOutput);</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::CLLogLayer::validate(&aclInput, &aclOutput);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  arm_compute::LSTMParams<arm_compute::ITensorInfo> lstm_params_info;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="comment">// The inputs and the outputs</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="comment">// Basic parameters</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <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>  <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>  <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> </div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  arm_compute::TensorInfo aclInputToInputWeightsInfo;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  arm_compute::TensorInfo aclCellToInputWeightsInfo;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  arm_compute::TensorInfo aclInputGateBiasInfo;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  arm_compute::TensorInfo aclProjectionWeightsInfo;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  arm_compute::TensorInfo aclProjectionBiasInfo;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <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>  {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  lstm_params_info.set_cifg_params(&aclInputToInputWeightsInfo, &aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</span> ?</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  &aclCellToInputWeightsInfo: <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  &aclInputGateBiasInfo);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  {</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <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>  {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  lstm_params_info.set_projection_params(&aclProjectionWeightsInfo,</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ?</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  &aclProjectionBiasInfo: <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  }</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  lstm_params_info.set_peephole_params(&aclCellToForgetWeightsInfo, &aclCellToOutputWeightsInfo);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  }</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <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>  arm_compute::ActivationLayerInfo activationLayerInfo =</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <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> </div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  }</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ?</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keyword">nullptr</span> : &aclInputLayerNormWeightsInfo,</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  &aclForgetLayerNormWeightsInfo,</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  &aclCellLayerNormWeightsInfo,</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  &aclOutputLayerNormWeightsInfo);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  }</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordflow">return</span> arm_compute::CLLSTMLayer::validate(&aclInputInfo, &aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  &aclInputToCellWeightsInfo,</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  &aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  &aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  &aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  &aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  &aclForgetGateBiasInfo,</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  &aclCellBiasInfo,</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  &aclOutputGateBiasInfo,</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  &aclOutputStateInInfo, &aclCellStateInInfo,</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  &aclScratchBufferInfo, &aclOutputStateOutInfo,</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  &aclCellStateOutInfo, &aclOutputInfo,</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  lstm_params_info, activationLayerInfo,</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  cell_threshold, projection_threshold);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> }</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> {</div> +<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  arm_compute::LSTMParams<arm_compute::ITensorInfo> lstm_params_info;</div> +<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  </div> +<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="comment">// The inputs and the outputs</span></div> +<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div> +<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div> +<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div> +<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div> +<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div> +<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  </div> +<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="comment">// Basic parameters</span></div> +<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div> +<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div> +<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div> +<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div> +<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div> +<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div> +<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div> +<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div> +<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div> +<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div> +<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div> +<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div> +<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  arm_compute::TensorInfo aclInputToInputWeightsInfo;</div> +<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div> +<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  arm_compute::TensorInfo aclCellToInputWeightsInfo;</div> +<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  arm_compute::TensorInfo aclInputGateBiasInfo;</div> +<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  arm_compute::TensorInfo aclProjectionWeightsInfo;</div> +<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  arm_compute::TensorInfo aclProjectionBiasInfo;</div> +<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div> +<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div> +<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div> +<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div> +<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div> +<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div> +<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  </div> +<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div> +<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  {</div> +<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div> +<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div> +<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  </div> +<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <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>  {</div> +<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div> +<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  }</div> +<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div> +<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  lstm_params_info.set_cifg_params(&aclInputToInputWeightsInfo, &aclRecurrentToInputWeightsInfo,</div> +<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</span> ?</div> +<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  &aclCellToInputWeightsInfo: <span class="keyword">nullptr</span>,</div> +<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  &aclInputGateBiasInfo);</div> +<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  }</div> +<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  </div> +<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div> +<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  {</div> +<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div> +<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  </div> +<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <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>  {</div> +<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div> +<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div> +<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  lstm_params_info.set_projection_params(&aclProjectionWeightsInfo,</div> +<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ?</div> +<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  &aclProjectionBiasInfo: <span class="keyword">nullptr</span>);</div> +<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  }</div> +<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  </div> +<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div> +<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  {</div> +<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div> +<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div> +<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  lstm_params_info.set_peephole_params(&aclCellToForgetWeightsInfo, &aclCellToOutputWeightsInfo);</div> +<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  }</div> +<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  </div> +<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div> +<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</div> +<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  </div> +<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <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>  arm_compute::ActivationLayerInfo activationLayerInfo =</div> +<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <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>  </div> +<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div> +<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  {</div> +<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div> +<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  {</div> +<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div> +<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  }</div> +<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  </div> +<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div> +<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  </div> +<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div> +<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  </div> +<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div> +<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  </div> +<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ?</div> +<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keyword">nullptr</span> : &aclInputLayerNormWeightsInfo,</div> +<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  &aclForgetLayerNormWeightsInfo,</div> +<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  &aclCellLayerNormWeightsInfo,</div> +<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  &aclOutputLayerNormWeightsInfo);</div> +<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  }</div> +<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  </div> +<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordflow">return</span> arm_compute::CLLSTMLayer::validate(&aclInputInfo, &aclInputToForgetWeightsInfo,</div> +<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  &aclInputToCellWeightsInfo,</div> +<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  &aclInputToOutputWeightsInfo,</div> +<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  &aclRecurrentToForgetWeightsInfo,</div> +<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  &aclRecurrentToCellWeightsInfo,</div> +<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  &aclRecurrentToOutputWeightsInfo,</div> +<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  &aclForgetGateBiasInfo,</div> +<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  &aclCellBiasInfo,</div> +<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  &aclOutputGateBiasInfo,</div> +<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  &aclOutputStateInInfo, &aclCellStateInInfo,</div> +<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  &aclScratchBufferInfo, &aclOutputStateOutInfo,</div> +<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  &aclCellStateOutInfo, &aclOutputInfo,</div> +<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  lstm_params_info, activationLayerInfo,</div> +<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  cell_threshold, projection_threshold);</div> +<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> }</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> {</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLElementwiseMax::validate(&aclInput0Info,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  &aclInput1Info,</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  &aclOutputInfo);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</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> {</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  </div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLElementwiseMax::validate(&aclInput0Info,</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  &aclInput1Info,</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  &aclOutputInfo);</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  </div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</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> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  input.GetNumDimensions(),</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  descriptor.m_Axis);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">return</span> arm_compute::CLReduceMean::validate(&aclInputInfo, coords, descriptor.m_KeepDims, &aclOutputInfo);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</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< unsigned int, MaxNumOfTensorDimensions > 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> {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  input.GetNumDimensions(),</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  descriptor.m_Axis);</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">return</span> arm_compute::CLReduceMean::validate(&aclInputInfo, coords, descriptor.m_KeepDims, &aclOutputInfo);</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</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> {</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLElementwiseMin::validate(&aclInput0Info,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  &aclInput1Info,</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  &aclOutputInfo);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</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> {</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  </div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLElementwiseMin::validate(&aclInput0Info,</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  &aclInput1Info,</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  &aclOutputInfo);</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  </div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  <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> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  arm_compute::ConvertPolicy::SATURATE :</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  arm_compute::ConvertPolicy::WRAP;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  activationDescriptor);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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>  <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>  <span class="comment">// ignored for F32 tensors.</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">return</span> arm_compute::CLPixelWiseMultiplication::validate(&aclInput1,</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  &aclInput2,</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  &aclOutput,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  1.0f,</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  convertPolicy,</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  arm_compute::RoundingPolicy::TO_ZERO,</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  activationInfo);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> }</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 &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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  arm_compute::ConvertPolicy::SATURATE :</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  arm_compute::ConvertPolicy::WRAP;</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  activationDescriptor);</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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>  <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>  <span class="comment">// ignored for F32 tensors.</span></div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">return</span> arm_compute::CLPixelWiseMultiplication::validate(&aclInput1,</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  &aclInput2,</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  &aclOutput,</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  1.0f,</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  convertPolicy,</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  arm_compute::RoundingPolicy::TO_ZERO,</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  activationInfo);</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> }</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> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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>  </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::CLNegLayer::validate(&aclInput, &aclOutput);</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::CLNegLayer::validate(&aclInput, &aclOutput);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  </div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  arm_compute::NormalizationLayerInfo layerInfo = BuildArmComputeNormalizationLayerInfo(descriptor);</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">return</span> arm_compute::CLNormalizationLayer::validate(&aclInputInfo, &aclOutputInfo, layerInfo);</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  arm_compute::NormalizationLayerInfo layerInfo = BuildArmComputeNormalizationLayerInfo(descriptor);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">return</span> arm_compute::CLNormalizationLayer::validate(&aclInputInfo, &aclOutputInfo, layerInfo);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</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> {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  std::vector<std::pair<unsigned int, unsigned int>> reversed_PadList(descriptor.m_PadList.size());</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  std::reverse_copy(std::begin(descriptor.m_PadList),</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  std::end(descriptor.m_PadList),</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  std::begin(reversed_PadList));</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  arm_compute::PaddingList padList = <span class="keyword">static_cast<</span>arm_compute::PaddingList<span class="keyword">></span>(reversed_PadList);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="comment">// PixelValue is currently unused when validating, but it's required to pass in PaddingMode.</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  arm_compute::PixelValue pixelValue = GetPixelValue(&aclInputInfo, descriptor.m_PadValue);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <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>  arm_compute::CLPadLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  &aclOutputInfo,</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  padList,</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  pixelValue,</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <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> </div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</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 &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> {</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  </div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  std::vector<std::pair<unsigned int, unsigned int>> reversed_PadList(descriptor.m_PadList.size());</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  </div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  std::reverse_copy(std::begin(descriptor.m_PadList),</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  std::end(descriptor.m_PadList),</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  std::begin(reversed_PadList));</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  </div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  arm_compute::PaddingList padList = <span class="keyword">static_cast<</span>arm_compute::PaddingList<span class="keyword">></span>(reversed_PadList);</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  </div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="comment">// PixelValue is currently unused when validating, but it's required to pass in PaddingMode.</span></div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  arm_compute::PixelValue pixelValue = GetPixelValue(&aclInputInfo, descriptor.m_PadValue);</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <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>  arm_compute::CLPadLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  padList,</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  pixelValue,</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <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>  </div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</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> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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>  <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a>& mappings = descriptor.m_DimMappings;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keywordflow">return</span> arm_compute::CLPermute::validate(&aclInputInfo, &aclOutputInfo,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  armcomputetensorutils::BuildArmComputePermutationVector(mappings));</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</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> {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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>  <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a>& mappings = descriptor.m_DimMappings;</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keywordflow">return</span> arm_compute::CLPermute::validate(&aclInputInfo, &aclOutputInfo,</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  armcomputetensorutils::BuildArmComputePermutationVector(mappings));</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</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> {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  <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>  </div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  arm_compute::PoolingLayerInfo layerInfo = BuildArmComputePoolingLayerInfo(descriptor);</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> arm_compute::CLPoolingLayer::validate(&aclInputInfo, &aclOutputInfo, layerInfo);</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> }</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> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  <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> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  arm_compute::PoolingLayerInfo layerInfo = BuildArmComputePoolingLayerInfo(descriptor);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> arm_compute::CLPoolingLayer::validate(&aclInputInfo, &aclOutputInfo, layerInfo);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> }</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>  {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  <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>  </div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  arm_compute::Pooling3dLayerInfo layerInfo = BuildArmComputePooling3dLayerInfo(descriptor);</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> arm_compute::CLPooling3dLayer::validate(&aclInputInfo, &aclOutputInfo, layerInfo);</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  }</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>  {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  <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> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  arm_compute::Pooling3dLayerInfo layerInfo = BuildArmComputePooling3dLayerInfo(descriptor);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> arm_compute::CLPooling3dLayer::validate(&aclInputInfo, &aclOutputInfo, layerInfo);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  }</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> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keywordflow">return</span> arm_compute::CLPReluLayer::validate(&aclInput,</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  &aclAlpha,</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  &aclOutput);</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</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> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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>  <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> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keywordflow">return</span> arm_compute::CLPReluLayer::validate(&aclInput,</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  &aclAlpha,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  &aclOutput);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</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> {</div> +<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  arm_compute::LSTMParams<arm_compute::ITensorInfo> aclParamsInfo;</div> +<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  </div> +<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="comment">// Input/Output tensor info</span></div> +<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div> +<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div> +<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  </div> +<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div> +<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div> +<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  </div> +<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="comment">// Mandatory tensor info</span></div> +<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div> +<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div> +<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div> +<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div> +<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div> +<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div> +<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div> +<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div> +<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div> +<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div> +<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div> +<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div> +<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div> +<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div> +<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div> +<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div> +<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div> +<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div> +<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  </div> +<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="comment">// Optional tensor info</span></div> +<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  arm_compute::TensorInfo aclInputToInputWeightsInfo;</div> +<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div> +<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  </div> +<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  arm_compute::TensorInfo aclCellToInputWeightsInfo;</div> +<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div> +<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div> +<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  </div> +<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  arm_compute::TensorInfo aclInputGateBiasInfo;</div> +<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  </div> +<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  arm_compute::TensorInfo aclProjectionWeightsInfo;</div> +<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  arm_compute::TensorInfo aclProjectionBiasInfo;</div> +<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  </div> +<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div> +<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div> +<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div> +<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div> +<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  </div> +<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <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>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div> +<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  {</div> +<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div> +<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  {</div> +<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div> +<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  }</div> +<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  </div> +<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div> +<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div> +<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  </div> +<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="comment">// Set peephole params info</span></div> +<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  aclParamsInfo.set_peephole_params(&aclCellToForgetWeightsInfo,</div> +<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  &aclCellToOutputWeightsInfo);</div> +<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  }</div> +<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  </div> +<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div> +<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  {</div> +<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div> +<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  </div> +<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <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>  {</div> +<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div> +<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  }</div> +<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  </div> +<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="comment">// Set projection params info</span></div> +<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  aclParamsInfo.set_projection_params(</div> +<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  &aclProjectionWeightsInfo,</div> +<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ? &aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div> +<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  }</div> +<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  </div> +<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div> +<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  {</div> +<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div> +<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  {</div> +<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div> +<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  }</div> +<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  </div> +<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div> +<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div> +<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div> +<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  </div> +<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="comment">// Set layer norm params info</span></div> +<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  aclParamsInfo.set_layer_normalization_params(</div> +<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  paramsInfo.m_InputLayerNormWeights != <span class="keyword">nullptr</span> ? &aclInputLayerNormWeightsInfo : <span class="keyword">nullptr</span>,</div> +<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  &aclForgetLayerNormWeightsInfo,</div> +<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  &aclCellLayerNormWeightsInfo,</div> +<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  &aclOutputLayerNormWeightsInfo);</div> +<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  }</div> +<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  </div> +<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div> +<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  {</div> +<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div> +<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div> +<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div> +<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  </div> +<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="comment">// Set CIFG params info</span></div> +<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  aclParamsInfo.set_cifg_params(</div> +<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  &aclInputToInputWeightsInfo,</div> +<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  &aclRecurrentToInputWeightsInfo,</div> +<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</span> ? &aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div> +<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  &aclInputGateBiasInfo);</div> +<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  }</div> +<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  </div> +<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="comment">// Set scalar descriptor params</span></div> +<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  aclParamsInfo.set_cell_clip_params(descriptor.m_CellClip);</div> +<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  aclParamsInfo.set_projection_clip_params(descriptor.m_ProjectionClip);</div> +<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  aclParamsInfo.set_hidden_state_params(descriptor.m_HiddenStateZeroPoint, descriptor.m_HiddenStateScale);</div> +<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  aclParamsInfo.set_matmul_scale_params(descriptor.m_InputIntermediateScale,</div> +<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  descriptor.m_ForgetIntermediateScale,</div> +<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  descriptor.m_CellIntermediateScale,</div> +<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  descriptor.m_OutputIntermediateScale);</div> +<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  </div> +<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="comment">// QLSTM CL validate</span></div> +<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">return</span> arm_compute::CLQLSTMLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  &aclInputToForgetWeightsInfo,</div> +<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  &aclInputToCellWeightsInfo,</div> +<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  &aclInputToOutputWeightsInfo,</div> +<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  &aclRecurrentToForgetWeightsInfo,</div> +<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  &aclRecurrentToCellWeightsInfo,</div> +<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  &aclRecurrentToOutputWeightsInfo,</div> +<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  &aclForgetGateBiasInfo,</div> +<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  &aclCellBiasInfo,</div> +<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  &aclOutputGateBiasInfo,</div> +<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  &aclCellStateInInfo,</div> +<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  &aclOutputStateInInfo,</div> +<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  &aclCellStateOutInfo,</div> +<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  &aclOutputStateOutInfo,</div> +<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  aclParamsInfo);</div> +<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> }</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> {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  arm_compute::LSTMParams<arm_compute::ITensorInfo> aclParamsInfo;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="comment">// Input/Output tensor info</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="comment">// Mandatory tensor info</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="comment">// Optional tensor info</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  arm_compute::TensorInfo aclInputToInputWeightsInfo;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  arm_compute::TensorInfo aclCellToInputWeightsInfo;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  arm_compute::TensorInfo aclInputGateBiasInfo;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  arm_compute::TensorInfo aclProjectionWeightsInfo;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  arm_compute::TensorInfo aclProjectionBiasInfo;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <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>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="comment">// Set peephole params info</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  aclParamsInfo.set_peephole_params(&aclCellToForgetWeightsInfo,</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  &aclCellToOutputWeightsInfo);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  }</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <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>  {</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="comment">// Set projection params info</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  aclParamsInfo.set_projection_params(</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  &aclProjectionWeightsInfo,</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ? &aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  }</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="comment">// Set layer norm params info</span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  aclParamsInfo.set_layer_normalization_params(</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  paramsInfo.m_InputLayerNormWeights != <span class="keyword">nullptr</span> ? &aclInputLayerNormWeightsInfo : <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  &aclForgetLayerNormWeightsInfo,</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  &aclCellLayerNormWeightsInfo,</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  &aclOutputLayerNormWeightsInfo);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  }</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  {</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> </div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="comment">// Set CIFG params info</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  aclParamsInfo.set_cifg_params(</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  &aclInputToInputWeightsInfo,</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  &aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</span> ? &aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  &aclInputGateBiasInfo);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  }</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="comment">// Set scalar descriptor params</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  aclParamsInfo.set_cell_clip_params(descriptor.m_CellClip);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  aclParamsInfo.set_projection_clip_params(descriptor.m_ProjectionClip);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  aclParamsInfo.set_hidden_state_params(descriptor.m_HiddenStateZeroPoint, descriptor.m_HiddenStateScale);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  aclParamsInfo.set_matmul_scale_params(descriptor.m_InputIntermediateScale,</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  descriptor.m_ForgetIntermediateScale,</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  descriptor.m_CellIntermediateScale,</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  descriptor.m_OutputIntermediateScale);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="comment">// QLSTM CL validate</span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">return</span> arm_compute::CLQLSTMLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  &aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  &aclInputToCellWeightsInfo,</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  &aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  &aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  &aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  &aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  &aclForgetGateBiasInfo,</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  &aclCellBiasInfo,</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  &aclOutputGateBiasInfo,</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  &aclCellStateInInfo,</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  &aclOutputStateInInfo,</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  &aclCellStateOutInfo,</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  &aclOutputStateOutInfo,</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  &aclOutputInfo,</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  aclParamsInfo);</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> }</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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="comment">// Inputs</span></div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclPreviousCellStateInInfo = BuildArmComputeTensorInfo(previousCellStateIn);</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclPreviousOutputInInfo = BuildArmComputeTensorInfo(previousOutputIn);</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="comment">// Outputs</span></div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  </div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="comment">// Basic parameters</span></div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToInputWeightsInfo</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToInputWeightsInfo</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">return</span> arm_compute::CLLSTMLayerQuantized::validate(&aclInputInfo, &aclInputToInputWeightsInfo,</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  &aclInputToForgetWeightsInfo, &aclInputToCellWeightsInfo,</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  &aclInputToOutputWeightsInfo, &aclRecurrentToInputWeightsInfo,</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  &aclRecurrentToForgetWeightsInfo, &aclRecurrentToCellWeightsInfo,</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  &aclRecurrentToOutputWeightsInfo, &aclInputGateBiasInfo,</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  &aclForgetGateBiasInfo, &aclCellBiasInfo, &aclOutputGateBiasInfo,</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  &aclPreviousCellStateInInfo, &aclPreviousOutputInInfo,</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  &aclCellStateOutInfo, &aclOutputInfo);</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="comment">// Inputs</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclPreviousCellStateInInfo = BuildArmComputeTensorInfo(previousCellStateIn);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclPreviousOutputInInfo = BuildArmComputeTensorInfo(previousOutputIn);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="comment">// Outputs</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="comment">// Basic parameters</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToInputWeightsInfo</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToInputWeightsInfo</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">return</span> arm_compute::CLLSTMLayerQuantized::validate(&aclInputInfo, &aclInputToInputWeightsInfo,</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  &aclInputToForgetWeightsInfo, &aclInputToCellWeightsInfo,</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  &aclInputToOutputWeightsInfo, &aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  &aclRecurrentToForgetWeightsInfo, &aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  &aclRecurrentToOutputWeightsInfo, &aclInputGateBiasInfo,</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  &aclForgetGateBiasInfo, &aclCellBiasInfo, &aclOutputGateBiasInfo,</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  &aclPreviousCellStateInInfo, &aclPreviousOutputInInfo,</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  &aclCellStateOutInfo, &aclOutputInfo);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</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> {</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">return</span> arm_compute::CLQuantizationLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  &aclOutputInfo);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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> {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">return</span> arm_compute::CLQuantizationLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  &aclOutputInfo);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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> {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  {</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  <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>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  input.GetNumDimensions(),</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  descriptor.m_vAxis);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">return</span> arm_compute::CLReductionOperation::validate(&aclInputInfo,</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(coords[0]),</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <a class="code" href="namespacearmnn.xhtml#a03ab984d93d0f240f31274499b72e6b0">ConvertReductionOperationToAcl</a>(descriptor),</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  descriptor.m_KeepDims);</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  }</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  {</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="comment">// Validate layer if there are multiple axes.</span></div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <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>  <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>  <span class="keywordflow">return</span> status;</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  }</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> }</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> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  <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> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  input.GetNumDimensions(),</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  descriptor.m_vAxis);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">return</span> arm_compute::CLReductionOperation::validate(&aclInputInfo,</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  &aclOutputInfo,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  static_cast<unsigned int>(coords[0]),</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <a class="code" href="namespacearmnn.xhtml#a03ab984d93d0f240f31274499b72e6b0">ConvertReductionOperationToAcl</a>(descriptor),</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  descriptor.m_KeepDims);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  }</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="comment">// Validate layer if there are multiple axes.</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <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>  <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>  <span class="keywordflow">return</span> status;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> }</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< unsigned int, MaxNumOfTensorDimensions > 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 &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 &input, const TensorInfo &output, const ReduceDescriptor &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> {</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <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>  <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>  </div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keywordflow">return</span> arm_compute::CLReshapeLayer::validate(&aclInputInfo, &aclOutputInfo);</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> }</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> {</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <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>  <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> </div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keywordflow">return</span> arm_compute::CLReshapeLayer::validate(&aclInputInfo, &aclOutputInfo);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> }</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> {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  aclInputInfo.set_data_layout(aclDataLayout);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  aclOutputInfo.set_data_layout(aclDataLayout);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  arm_compute::InterpolationPolicy aclInterpolationPolicy =</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  arm_compute::SamplingPolicy samplingPolicy = descriptor.m_HalfPixelCenters ? arm_compute::SamplingPolicy::CENTER :</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  arm_compute::SamplingPolicy::TOP_LEFT;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> arm_compute::CLScale::validate(&aclInputInfo,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  &aclOutputInfo,</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  arm_compute::ScaleKernelInfo(aclInterpolationPolicy,</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  arm_compute::BorderMode::REPLICATE,</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  arm_compute::PixelValue(0.f),</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  samplingPolicy,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">true</span>,</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  descriptor.m_AlignCorners));</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</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> {</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  aclInputInfo.set_data_layout(aclDataLayout);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  aclOutputInfo.set_data_layout(aclDataLayout);</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  </div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  arm_compute::InterpolationPolicy aclInterpolationPolicy =</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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>  </div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  arm_compute::SamplingPolicy samplingPolicy = descriptor.m_HalfPixelCenters ? arm_compute::SamplingPolicy::CENTER :</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  arm_compute::SamplingPolicy::TOP_LEFT;</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  </div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> arm_compute::CLScale::validate(&aclInputInfo,</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  arm_compute::ScaleKernelInfo(aclInterpolationPolicy,</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  arm_compute::BorderMode::REPLICATE,</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  arm_compute::PixelValue(0.f),</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  samplingPolicy,</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">true</span>,</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  descriptor.m_AlignCorners));</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</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> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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>  </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::CLRsqrtLayer::validate(&aclInput, &aclOutput);</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::CLRsqrtLayer::validate(&aclInput, &aclOutput);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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>  </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::CLSinLayer::validate(&aclInput, &aclOutput);</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::CLSinLayer::validate(&aclInput, &aclOutput);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  <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> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  <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> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  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> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">return</span> arm_compute::CLSlice::validate(&aclInput, &aclOutput, starts, ends);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</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< unsigned int, MaxNumOfTensorDimensions > 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< unsigned int > &m_begin, const std::vector< unsigned int > &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> {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  <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>  </div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  <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>  </div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  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>  </div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">return</span> arm_compute::CLSlice::validate(&aclInput, &aclOutput, starts, ends);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</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> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  <span class="keywordflow">return</span> arm_compute::CLSoftmaxLayer::validate(&aclInputInfo, &aclOutputInfo, descriptor.m_Beta, aclAxis);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> }</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 &armnnAxis, const armnn::TensorInfo &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> {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  <span class="keywordflow">return</span> arm_compute::CLSoftmaxLayer::validate(&aclInputInfo, &aclOutputInfo, descriptor.m_Beta, aclAxis);</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> }</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> {</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  <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> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <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>  int32_t blockHeight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><int32_t>(descriptor.m_BlockShape[0]);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  int32_t blockWidth = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><int32_t>(descriptor.m_BlockShape[1]);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  arm_compute::Size2D paddingLeftTop = BuildArmComputeSize2D(</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  descriptor.m_PadList[1].first, descriptor.m_PadList[0].first);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  arm_compute::Size2D paddingRightBottom = BuildArmComputeSize2D(</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  descriptor.m_PadList[1].second, descriptor.m_PadList[0].second);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> arm_compute::CLSpaceToBatchLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  blockWidth,</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  blockHeight,</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  paddingLeftTop,</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  paddingRightBottom,</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  &aclOutputInfo);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  <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>  </div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <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>  int32_t blockHeight = armnn::numeric_cast<int32_t>(descriptor.m_BlockShape[0]);</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  int32_t blockWidth = armnn::numeric_cast<int32_t>(descriptor.m_BlockShape[1]);</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  arm_compute::Size2D paddingLeftTop = BuildArmComputeSize2D(</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  descriptor.m_PadList[1].first, descriptor.m_PadList[0].first);</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  arm_compute::Size2D paddingRightBottom = BuildArmComputeSize2D(</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  descriptor.m_PadList[1].second, descriptor.m_PadList[0].second);</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  </div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> arm_compute::CLSpaceToBatchLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  blockWidth,</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  blockHeight,</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  paddingLeftTop,</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  paddingRightBottom,</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  &aclOutputInfo);</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</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> {</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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>  <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>  </div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  int32_t blockSize = armnn::numeric_cast<int32_t>(descriptor.m_BlockSize);</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  </div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <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>  </div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLSpaceToDepthLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  blockSize);</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> }</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> {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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>  <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> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  int32_t blockSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><int32_t>(descriptor.m_BlockSize);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <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> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLSpaceToDepthLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  &aclOutputInfo,</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  blockSize);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> }</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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  </div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordtype">size_t</span> numOutputs = outputs.size();</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  </div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  std::vector<arm_compute::TensorInfo> aclOutputs;</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  aclOutputs.reserve(numOutputs);</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  std::vector<arm_compute::ITensorInfo*> aclOutputPtr;</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  aclOutputPtr.reserve(numOutputs);</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0u; i < outputs.size(); ++i)</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  aclOutputs.emplace_back(BuildArmComputeTensorInfo(outputs[i]));</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  aclOutputPtr.emplace_back(&aclOutputs.back());</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  }</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  </div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <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>  <span class="keywordflow">return</span> arm_compute::CLSplit::validate(&aclInputInfo, aclOutputPtr, aclAxis);</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</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> {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordtype">size_t</span> numOutputs = outputs.size();</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  std::vector<arm_compute::TensorInfo> aclOutputs;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  aclOutputs.reserve(numOutputs);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  std::vector<arm_compute::ITensorInfo*> aclOutputPtr;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  aclOutputPtr.reserve(numOutputs);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0u; i < outputs.size(); ++i)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  aclOutputs.emplace_back(BuildArmComputeTensorInfo(outputs[i]));</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  aclOutputPtr.emplace_back(&aclOutputs.back());</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <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>  <span class="keywordflow">return</span> arm_compute::CLSplit::validate(&aclInputInfo, aclOutputPtr, aclAxis);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</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> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  ActivationDescriptor descriptor;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  descriptor.m_Function = ActivationFunction::Sqrt;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(descriptor);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">return</span> arm_compute::CLActivationLayer::validate(&aclInput, &aclOutput, activationLayerInfo);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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 &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> {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  ActivationDescriptor descriptor;</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  descriptor.m_Function = ActivationFunction::Sqrt;</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(descriptor);</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">return</span> arm_compute::CLActivationLayer::validate(&aclInput, &aclOutput, activationLayerInfo);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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">◆ </a></span>ClStackWorkloadValidate()</h2> +<a id="a776783e716aa3dd5975c72696d0b7abb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a776783e716aa3dd5975c72696d0b7abb">◆ </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< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *> & </td> + <td class="paramtype">const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> * > & </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> {</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  std::vector<arm_compute::ITensorInfo*> aclInputPtrs;</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  arm_compute::TensorInfo aclInputInfo;</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  {</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  aclInputInfo = BuildArmComputeTensorInfo(*input);</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  aclInputPtrs.emplace_back(&aclInputInfo);</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  }</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <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>  </div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">return</span> arm_compute::CLStackLayer::validate(aclInputPtrs, aclAxis, &aclOutputInfo);</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</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> {</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  std::vector<arm_compute::ITensorInfo*> aclInputPtrs;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  arm_compute::TensorInfo aclInputInfo;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  aclInputInfo = BuildArmComputeTensorInfo(*input);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  aclInputPtrs.emplace_back(&aclInputInfo);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  }</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <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> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">return</span> arm_compute::CLStackLayer::validate(aclInputPtrs, aclAxis, &aclOutputInfo);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</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> {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  <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> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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>  <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>  <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> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  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> </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">auto</span> numDimensions = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(input.GetNumDimensions());</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  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>  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>  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> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> arm_compute::CLStridedSlice::validate(&aclInputInfo,</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  &aclOutputInfo,</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  starts,</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  ends,</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  strides,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  begin_mask,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  end_mask,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  shrink_axis_mask);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</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< unsigned int, MaxNumOfTensorDimensions > 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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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< int > &m_begin, const std::vector< int > &m_end, const std::vector< int > &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> {</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  <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>  </div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  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>  </div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">auto</span> numDimensions = armnn::numeric_cast<int>(input.GetNumDimensions());</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  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>  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>  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>  </div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> arm_compute::CLStridedSlice::validate(&aclInputInfo,</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  starts,</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  ends,</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  strides,</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  begin_mask,</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  end_mask,</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  shrink_axis_mask);</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</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> {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <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>  activationDescriptor);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLArithmeticSubtraction::validate(&aclInput0Info,</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  &aclInput1Info,</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  &aclOutputInfo,</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  g_AclConvertPolicy,</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  activationInfo);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> }</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 &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> {</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  </div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <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>  activationDescriptor);</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  </div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLArithmeticSubtraction::validate(&aclInput0Info,</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  &aclInput1Info,</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  g_AclConvertPolicy,</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  activationInfo);</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  </div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> }</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> {</div> +<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Arm/Cl/TensorHandleFactory"</span>;</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> }</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> {</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Arm/Cl/TensorHandleFactory"</span>;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> }</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> {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  optionalAclBiasesInfo = &aclBiasesInfo;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  }</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  arm_compute::PadStrideInfo padStrideInfo = BuildArmComputePadStrideInfo(descriptor);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> arm_compute::CLDeconvolutionLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  &aclWeightsInfo,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  optionalAclBiasesInfo,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  &aclOutputInfo,</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  padStrideInfo);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</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> {</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  </div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  arm_compute::TensorInfo aclBiasesInfo;</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  </div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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>  </div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  optionalAclBiasesInfo = &aclBiasesInfo;</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  }</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  </div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  arm_compute::PadStrideInfo padStrideInfo = BuildArmComputePadStrideInfo(descriptor);</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  </div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> arm_compute::CLDeconvolutionLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  &aclWeightsInfo,</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  optionalAclBiasesInfo,</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  padStrideInfo);</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</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> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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>  <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a>& mappings = descriptor.m_DimMappings;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keywordflow">return</span> arm_compute::CLPermute::validate(&aclInputInfo, &aclOutputInfo,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  armcomputetensorutils::BuildArmComputeTransposeVector(mappings));</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</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> {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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>  <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a>& mappings = descriptor.m_DimMappings;</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keywordflow">return</span> arm_compute::CLPermute::validate(&aclInputInfo, &aclOutputInfo,</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  armcomputetensorutils::BuildArmComputeTransposeVector(mappings));</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</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> {</div> +<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(hiddenStateOutput, cellStateOutput);</div> +<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  </div> +<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  TensorShape inputLayerShape = input.GetShape();</div> +<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  TensorShape outputLayerShape = outputStateIn.GetShape();</div> +<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  </div> +<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keyword">const</span> TensorShape timeMajorShapeInput({maxTime, batchSize, inputSize});</div> +<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keyword">const</span> TensorShape timeMajorShapeOutput({maxTime, batchSize, outputSize});</div> +<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  </div> +<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <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>  <span class="stringliteral">"Permute1 status"</span>);</div> +<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <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>  <span class="stringliteral">"Split status"</span>);</div> +<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <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>  <span class="stringliteral">"LSTM status"</span>);</div> +<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <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>  <span class="stringliteral">"Concat status"</span>);</div> +<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <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>  <span class="stringliteral">"Permute2 status"</span>);</div> +<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  </div> +<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <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>  <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>  </div> +<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="comment">// Permute validate</span></div> +<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  TensorInfo permuteOutInfo = TensorInfo(input);</div> +<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  arm_compute::TensorInfo aclPermuteOutInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permuteOutInfo);</div> +<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  {</div> +<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  statusPermute1 = arm_compute::CLPermute::validate(&aclInputInfo,</div> +<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  &aclPermuteOutInfo,</div> +<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div> +<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  }</div> +<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  </div> +<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="comment">// Split and Concat Tensors validate</span></div> +<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  std::vector<arm_compute::TensorInfo> splitterOutputsTensorInfos;</div> +<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  std::vector<arm_compute::TensorInfo> concatInputsTensorInfos;</div> +<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  std::vector<arm_compute::ITensorInfo*> splitterOutputsTensorInfosPtr;</div> +<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  std::vector<const arm_compute::ITensorInfo*> concatInputsTensorInfosPtr;</div> +<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  splitterOutputsTensorInfos.reserve(maxTime);</div> +<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  concatInputsTensorInfos.reserve(maxTime);</div> +<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <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="l00566"></a><span class="lineno"> 566</span>  {</div> +<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  arm_compute::TensorInfo splitter_out;</div> +<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  arm_compute::TensorInfo concat_in;</div> +<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  </div> +<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keyword">auto</span> splitterTensorInfo = TensorInfo(input);</div> +<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keyword">auto</span> concatTensorInfo = TensorInfo(output);</div> +<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  splitterTensorInfo.SetShape({batchSize, inputSize});</div> +<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  concatTensorInfo.SetShape({batchSize, outputSize});</div> +<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  </div> +<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  arm_compute::TensorInfo aclSplitterTensorInfo</div> +<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  = armcomputetensorutils::BuildArmComputeTensorInfo(splitterTensorInfo);</div> +<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  arm_compute::TensorInfo aclConcatTensorInfo</div> +<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  = armcomputetensorutils::BuildArmComputeTensorInfo(concatTensorInfo);</div> +<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  </div> +<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  splitterOutputsTensorInfos.emplace_back(aclSplitterTensorInfo);</div> +<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  concatInputsTensorInfos.emplace_back(aclConcatTensorInfo);</div> +<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  splitterOutputsTensorInfosPtr.emplace_back(&splitterOutputsTensorInfos[i]);</div> +<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  concatInputsTensorInfosPtr.emplace_back(&concatInputsTensorInfos[i]);</div> +<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  }</div> +<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  </div> +<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="comment">// Split validate</span></div> +<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <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>  {</div> +<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  {</div> +<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  statusSplit = arm_compute::CLSplit::validate(&aclPermuteOutInfo,</div> +<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  splitterOutputsTensorInfosPtr,</div> +<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  aclAxisSplit);</div> +<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  }</div> +<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  {</div> +<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  statusSplit = arm_compute::CLSplit::validate(&aclInputInfo, splitterOutputsTensorInfosPtr, aclAxisSplit);</div> +<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  }</div> +<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  }</div> +<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  </div> +<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <span class="comment">// LSTM validate</span></div> +<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  </div> +<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  arm_compute::LSTMParams<arm_compute::ITensorInfo> lstm_params_info;</div> +<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  </div> +<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keyword">const</span> TensorInfo& scratchBuffer = TensorInfo(cellStateIn.GetShape(), input.GetDataType());</div> +<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="keyword">const</span> TensorInfo& outputStateOut = TensorInfo(outputStateIn.GetShape(), input.GetDataType());</div> +<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="keyword">const</span> TensorInfo& cellStateOut = TensorInfo(cellStateIn.GetShape(), input.GetDataType());</div> +<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  </div> +<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="comment">// The inputs and outputs</span></div> +<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div> +<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div> +<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div> +<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div> +<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div> +<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  </div> +<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="comment">// Basic parameters</span></div> +<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div> +<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div> +<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div> +<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div> +<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div> +<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div> +<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div> +<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div> +<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div> +<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div> +<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div> +<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div> +<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div> +<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div> +<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div> +<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div> +<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div> +<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div> +<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  </div> +<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  arm_compute::TensorInfo aclInputToInputWeightsInfo;</div> +<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div> +<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  arm_compute::TensorInfo aclCellToInputWeightsInfo;</div> +<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  arm_compute::TensorInfo aclInputGateBiasInfo;</div> +<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  arm_compute::TensorInfo aclProjectionWeightsInfo;</div> +<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  arm_compute::TensorInfo aclProjectionBiasInfo;</div> +<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div> +<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div> +<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  </div> +<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div> +<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div> +<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div> +<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div> +<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  </div> +<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  </div> +<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div> +<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  {</div> +<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div> +<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  {</div> +<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div> +<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  }</div> +<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div> +<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div> +<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div> +<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  </div> +<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  lstm_params_info.set_cifg_params(&aclInputToInputWeightsInfo,</div> +<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  &aclRecurrentToInputWeightsInfo,</div> +<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  descriptor.m_PeepholeEnabled ? &aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div> +<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  &aclInputGateBiasInfo);</div> +<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  }</div> +<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  </div> +<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div> +<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  {</div> +<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <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>  {</div> +<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div> +<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  }</div> +<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div> +<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  </div> +<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  lstm_params_info.set_projection_params(&aclProjectionWeightsInfo,</div> +<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  paramsInfo.m_ProjectionBias ? &aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div> +<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  }</div> +<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  </div> +<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div> +<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  {</div> +<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div> +<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div> +<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  </div> +<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  lstm_params_info.set_peephole_params(&aclCellToForgetWeightsInfo, &aclCellToOutputWeightsInfo);</div> +<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  }</div> +<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  </div> +<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div> +<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  {</div> +<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div> +<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  {</div> +<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div> +<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  }</div> +<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div> +<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div> +<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div> +<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  </div> +<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  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>  &aclInputLayerNormWeightsInfo,</div> +<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  &aclForgetLayerNormWeightsInfo,</div> +<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  &aclCellLayerNormWeightsInfo,</div> +<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  &aclOutputLayerNormWeightsInfo);</div> +<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  }</div> +<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  </div> +<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  <span class="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>  <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div> +<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</div> +<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  </div> +<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  arm_compute::ActivationLayerInfo activationLayerInfo =</div> +<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <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>  </div> +<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <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>  {</div> +<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  </div> +<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="comment">// Set LSTM input and output ITensors depending on:</span></div> +<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="comment">// input format (timeMajor) & number of LSTM batches (maxTime).</span></div> +<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  arm_compute::ITensorInfo* outputLSTM;</div> +<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  arm_compute::ITensorInfo* inputLSTM;</div> +<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <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>  <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>  <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>  <span class="comment">// LSTM input/output cannot be > 2 dimensions so need to resize its TensorInfo.</span></div> +<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  <span class="keywordflow">if</span> (maxTime == 1 && !descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  {</div> +<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  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>  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>  TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div> +<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  TensorShape outputShapeShrink({outputShape[1], outputShape[2]});</div> +<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div> +<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="keyword">auto</span> acl_output_shape_shrink = BuildArmComputeTensorShape(outputShapeShrink);</div> +<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(acl_input_shape_shrink);</div> +<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  inputLSTM = <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo);</div> +<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclOutputInfo)->set_tensor_shape(acl_output_shape_shrink);</div> +<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclOutputInfo);</div> +<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  }</div> +<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  <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>  <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>  <span class="comment">// Set output of LSTM to be first element of m_ConcatInputs & use that value later in permute.</span></div> +<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="comment">// LSTM output cannot be > 2 dimensions so need to resize its TensorInfo.</span></div> +<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maxTime == 1 && !descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  {</div> +<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  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>  TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div> +<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div> +<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  aclPermuteOutInfo.set_tensor_shape(acl_input_shape_shrink);</div> +<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  inputLSTM = &aclPermuteOutInfo;</div> +<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::ITensorInfo*<span class="keyword">></span>(concatInputsTensorInfosPtr[i]);</div> +<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  }</div> +<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  <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>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  {</div> +<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  inputLSTM = splitterOutputsTensorInfosPtr[i];</div> +<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::ITensorInfo*<span class="keyword">></span>(concatInputsTensorInfosPtr[i]);</div> +<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  }</div> +<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  </div> +<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  statusLSTM = arm_compute::CLLSTMLayer::validate(inputLSTM,</div> +<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  &aclInputToForgetWeightsInfo,</div> +<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  &aclInputToCellWeightsInfo,</div> +<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  &aclInputToOutputWeightsInfo,</div> +<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  &aclRecurrentToForgetWeightsInfo,</div> +<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  &aclRecurrentToCellWeightsInfo,</div> +<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  &aclRecurrentToOutputWeightsInfo,</div> +<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  &aclForgetGateBiasInfo,</div> +<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  &aclCellBiasInfo,</div> +<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  &aclOutputGateBiasInfo,</div> +<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  &aclOutputStateInInfo,</div> +<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  &aclCellStateInInfo,</div> +<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  &aclScratchBufferInfo,</div> +<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  &aclOutputStateOutInfo,</div> +<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  &aclCellStateOutInfo,</div> +<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  outputLSTM,</div> +<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  lstm_params_info,</div> +<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  activationLayerInfo,</div> +<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  cell_threshold,</div> +<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  projection_threshold);</div> +<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  </div> +<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <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>  {</div> +<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  }</div> +<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  }</div> +<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  </div> +<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  <span class="comment">// Concat validate</span></div> +<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  </div> +<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <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>  TensorShape shape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(concatInputsTensorInfosPtr[0]->tensor_shape(), 1U);</div> +<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  TensorShape shapeExpandTimeMajor({1, shape[0], shape[1]});</div> +<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  TensorShape shapeExpandBatchMajor({shape[0], 1, shape[1]});</div> +<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  </div> +<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  TensorInfo concatOuputTensorInfo = TensorInfo(output);</div> +<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  concatOuputTensorInfo.SetShape(timeMajorShapeOutput);</div> +<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  arm_compute::TensorInfo aclConcatOuputTensorInfo= BuildArmComputeTensorInfo(concatOuputTensorInfo);</div> +<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  </div> +<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  <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>  {</div> +<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  <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="l00806"></a><span class="lineno"> 806</span>  {</div> +<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keyword">auto</span> acl_shape_expand = BuildArmComputeTensorShape(shapeExpandTimeMajor);</div> +<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  concatInputsTensorInfos[i].set_tensor_shape(acl_shape_expand);</div> +<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  }</div> +<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  </div> +<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  <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>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  {</div> +<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  statusConcat = arm_compute::CLConcatenateLayer::validate(concatInputsTensorInfosPtr,</div> +<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  &aclConcatOuputTensorInfo,</div> +<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  aclAxisConcat);</div> +<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  }</div> +<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  {</div> +<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  statusConcat = arm_compute::CLConcatenateLayer::validate(concatInputsTensorInfosPtr,</div> +<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  aclAxisConcat);</div> +<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  }</div> +<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  }</div> +<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <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>  <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>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  {</div> +<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  {</div> +<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(</div> +<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  BuildArmComputeTensorShape(shapeExpandBatchMajor));</div> +<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  }</div> +<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  {</div> +<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(</div> +<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  BuildArmComputeTensorShape(shapeExpandTimeMajor));</div> +<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  }</div> +<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  }</div> +<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <span class="comment">// Permute validate</span></div> +<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  {</div> +<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <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>  <span class="keywordflow">if</span> (maxTime != 1)</div> +<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  {</div> +<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  statusPermute2 = arm_compute::CLPermute::validate(&aclConcatOuputTensorInfo,</div> +<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div> +<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  }</div> +<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  {</div> +<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  statusPermute2 = arm_compute::CLPermute::validate(concatInputsTensorInfosPtr[0],</div> +<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div> +<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  }</div> +<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  }</div> +<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  </div> +<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div> +<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <span class="keywordflow">if</span> (statusPermute1.error_code() == okCode &&</div> +<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  statusSplit.error_code() == okCode &&</div> +<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  statusLSTM .error_code() == okCode &&</div> +<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  statusConcat.error_code() == okCode &&</div> +<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  statusPermute2.error_code() == okCode)</div> +<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  {</div> +<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <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>  <span class="stringliteral">"All Unidirectional Sequence LSTM layer validate status OK."</span>);</div> +<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  }</div> +<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  {</div> +<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  <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>  <span class="stringliteral">"Unidirectional Sequence LSTM layer validate status failed."</span>);</div> +<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  }</div> +<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> }</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> {</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(hiddenStateOutput, cellStateOutput);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  TensorShape inputLayerShape = input.GetShape();</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  TensorShape outputLayerShape = outputStateIn.GetShape();</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span> </div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keyword">const</span> TensorShape timeMajorShapeInput({maxTime, batchSize, inputSize});</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keyword">const</span> TensorShape timeMajorShapeOutput({maxTime, batchSize, outputSize});</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span> </div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <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>  <span class="stringliteral">"Permute1 status"</span>);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <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>  <span class="stringliteral">"Split status"</span>);</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <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>  <span class="stringliteral">"LSTM status"</span>);</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <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>  <span class="stringliteral">"Concat status"</span>);</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <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>  <span class="stringliteral">"Permute2 status"</span>);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span> </div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <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>  <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> </div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="comment">//</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="comment">// Permute validate</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="comment">//</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  TensorInfo permuteOutInfo = TensorInfo(input);</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  arm_compute::TensorInfo aclPermuteOutInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permuteOutInfo);</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  {</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  statusPermute1 = arm_compute::CLPermute::validate(&aclInputInfo,</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  &aclPermuteOutInfo,</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> </div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="comment">//</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="comment">// Split and Concat Tensors validate</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="comment">//</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  std::vector<arm_compute::TensorInfo> splitterOutputsTensorInfos;</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  std::vector<arm_compute::TensorInfo> concatInputsTensorInfos;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  std::vector<arm_compute::ITensorInfo*> splitterOutputsTensorInfosPtr;</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  std::vector<const arm_compute::ITensorInfo*> concatInputsTensorInfosPtr;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  splitterOutputsTensorInfos.reserve(maxTime);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  concatInputsTensorInfos.reserve(maxTime);</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <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="l00566"></a><span class="lineno"> 566</span>  {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  arm_compute::TensorInfo splitter_out;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  arm_compute::TensorInfo concat_in;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span> </div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keyword">auto</span> splitterTensorInfo = TensorInfo(input);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keyword">auto</span> concatTensorInfo = TensorInfo(output);</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  splitterTensorInfo.SetShape({batchSize, inputSize});</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  concatTensorInfo.SetShape({batchSize, outputSize});</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span> </div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  arm_compute::TensorInfo aclSplitterTensorInfo</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  = armcomputetensorutils::BuildArmComputeTensorInfo(splitterTensorInfo);</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  arm_compute::TensorInfo aclConcatTensorInfo</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  = armcomputetensorutils::BuildArmComputeTensorInfo(concatTensorInfo);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  splitterOutputsTensorInfos.emplace_back(aclSplitterTensorInfo);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  concatInputsTensorInfos.emplace_back(aclConcatTensorInfo);</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  splitterOutputsTensorInfosPtr.emplace_back(&splitterOutputsTensorInfos[i]);</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  concatInputsTensorInfosPtr.emplace_back(&concatInputsTensorInfos[i]);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  }</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span> </div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="comment">//</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="comment">// Split validate</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="comment">//</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <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>  <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>  <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> </div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <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>  {</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  statusSplit = arm_compute::CLSplit::validate(&aclPermuteOutInfo,</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  splitterOutputsTensorInfosPtr,</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  aclAxisSplit);</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  }</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  {</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  statusSplit = arm_compute::CLSplit::validate(&aclInputInfo, splitterOutputsTensorInfosPtr, aclAxisSplit);</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  }</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  }</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span> </div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="comment">//</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <span class="comment">// LSTM validate</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="comment">//</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span> </div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  arm_compute::LSTMParams<arm_compute::ITensorInfo> lstm_params_info;</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> </div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keyword">const</span> TensorInfo& scratchBuffer = TensorInfo(cellStateIn.GetShape(), input.GetDataType());</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="keyword">const</span> TensorInfo& outputStateOut = TensorInfo(outputStateIn.GetShape(), input.GetDataType());</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="keyword">const</span> TensorInfo& cellStateOut = TensorInfo(cellStateIn.GetShape(), input.GetDataType());</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> </div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="comment">// The inputs and outputs</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span> </div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="comment">// Basic parameters</span></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span> </div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  arm_compute::TensorInfo aclInputToInputWeightsInfo;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  arm_compute::TensorInfo aclCellToInputWeightsInfo;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  arm_compute::TensorInfo aclInputGateBiasInfo;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  arm_compute::TensorInfo aclProjectionWeightsInfo;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  arm_compute::TensorInfo aclProjectionBiasInfo;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span> </div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span> </div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span> </div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  {</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  {</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span> </div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  lstm_params_info.set_cifg_params(&aclInputToInputWeightsInfo,</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  &aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  descriptor.m_PeepholeEnabled ? &aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  &aclInputGateBiasInfo);</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  {</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <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>  {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  }</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span> </div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  lstm_params_info.set_projection_params(&aclProjectionWeightsInfo,</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  paramsInfo.m_ProjectionBias ? &aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  }</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span> </div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  {</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span> </div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  lstm_params_info.set_peephole_params(&aclCellToForgetWeightsInfo, &aclCellToOutputWeightsInfo);</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  }</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span> </div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  {</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  {</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  }</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span> </div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  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>  &aclInputLayerNormWeightsInfo,</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  &aclForgetLayerNormWeightsInfo,</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  &aclCellLayerNormWeightsInfo,</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  &aclOutputLayerNormWeightsInfo);</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  }</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span> </div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  <span class="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>  <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span> </div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  arm_compute::ActivationLayerInfo activationLayerInfo =</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <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> </div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <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>  {</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span> </div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="comment">// Set LSTM input and output ITensors depending on:</span></div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="comment">// input format (timeMajor) & number of LSTM batches (maxTime).</span></div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  arm_compute::ITensorInfo* outputLSTM;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  arm_compute::ITensorInfo* inputLSTM;</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <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>  <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>  <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>  <span class="comment">// LSTM input/output cannot be > 2 dimensions so need to resize its TensorInfo.</span></div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  <span class="keywordflow">if</span> (maxTime == 1 && !descriptor.m_TimeMajor)</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  {</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  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>  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>  TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  TensorShape outputShapeShrink({outputShape[1], outputShape[2]});</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="keyword">auto</span> acl_output_shape_shrink = BuildArmComputeTensorShape(outputShapeShrink);</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(acl_input_shape_shrink);</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  inputLSTM = <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo);</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclOutputInfo)->set_tensor_shape(acl_output_shape_shrink);</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclOutputInfo);</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  }</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  <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>  <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>  <span class="comment">// Set output of LSTM to be first element of m_ConcatInputs & use that value later in permute.</span></div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="comment">// LSTM output cannot be > 2 dimensions so need to resize its TensorInfo.</span></div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maxTime == 1 && !descriptor.m_TimeMajor)</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  {</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  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>  TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  aclPermuteOutInfo.set_tensor_shape(acl_input_shape_shrink);</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  inputLSTM = &aclPermuteOutInfo;</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::ITensorInfo*<span class="keyword">></span>(concatInputsTensorInfosPtr[i]);</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  }</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  <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>  <span class="keywordflow">else</span></div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  {</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  inputLSTM = splitterOutputsTensorInfosPtr[i];</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::ITensorInfo*<span class="keyword">></span>(concatInputsTensorInfosPtr[i]);</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  }</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span> </div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  statusLSTM = arm_compute::CLLSTMLayer::validate(inputLSTM,</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  &aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  &aclInputToCellWeightsInfo,</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  &aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  &aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  &aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  &aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  &aclForgetGateBiasInfo,</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  &aclCellBiasInfo,</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  &aclOutputGateBiasInfo,</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  &aclOutputStateInInfo,</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  &aclCellStateInInfo,</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  &aclScratchBufferInfo,</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  &aclOutputStateOutInfo,</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  &aclCellStateOutInfo,</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  outputLSTM,</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  lstm_params_info,</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  activationLayerInfo,</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  cell_threshold,</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  projection_threshold);</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span> </div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <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>  {</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  }</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  }</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span> </div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  <span class="comment">//</span></div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  <span class="comment">// Concat validate</span></div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  <span class="comment">//</span></div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span> </div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <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>  TensorShape shape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(concatInputsTensorInfosPtr[0]->tensor_shape(), 1U);</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  TensorShape shapeExpandTimeMajor({1, shape[0], shape[1]});</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  TensorShape shapeExpandBatchMajor({shape[0], 1, shape[1]});</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span> </div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  TensorInfo concatOuputTensorInfo = TensorInfo(output);</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  concatOuputTensorInfo.SetShape(timeMajorShapeOutput);</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  arm_compute::TensorInfo aclConcatOuputTensorInfo= BuildArmComputeTensorInfo(concatOuputTensorInfo);</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span> </div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  <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>  {</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  <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="l00806"></a><span class="lineno"> 806</span>  {</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keyword">auto</span> acl_shape_expand = BuildArmComputeTensorShape(shapeExpandTimeMajor);</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  concatInputsTensorInfos[i].set_tensor_shape(acl_shape_expand);</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  }</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span> </div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  <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>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  {</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  statusConcat = arm_compute::CLConcatenateLayer::validate(concatInputsTensorInfosPtr,</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  &aclConcatOuputTensorInfo,</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  aclAxisConcat);</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  }</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  {</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  statusConcat = arm_compute::CLConcatenateLayer::validate(concatInputsTensorInfosPtr,</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  &aclOutputInfo,</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  aclAxisConcat);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  }</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  }</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <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>  <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>  <span class="keywordflow">else</span></div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  {</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  {</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  BuildArmComputeTensorShape(shapeExpandBatchMajor));</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  }</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  {</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  BuildArmComputeTensorShape(shapeExpandTimeMajor));</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  }</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  }</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  <span class="comment">//</span></div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <span class="comment">// Permute validate</span></div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  <span class="comment">//</span></div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  {</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <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>  <span class="keywordflow">if</span> (maxTime != 1)</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  {</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  statusPermute2 = arm_compute::CLPermute::validate(&aclConcatOuputTensorInfo,</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  &aclOutputInfo,</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  }</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  {</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  statusPermute2 = arm_compute::CLPermute::validate(concatInputsTensorInfosPtr[0],</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  &aclOutputInfo,</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  }</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  }</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span> </div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <span class="keywordflow">if</span> (statusPermute1.error_code() == okCode &&</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  statusSplit.error_code() == okCode &&</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  statusLSTM .error_code() == okCode &&</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  statusConcat.error_code() == okCode &&</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  statusPermute2.error_code() == okCode)</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  {</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <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>  <span class="stringliteral">"All Unidirectional Sequence LSTM layer validate status OK."</span>);</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  }</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  {</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  <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>  <span class="stringliteral">"Unidirectional Sequence LSTM layer validate status failed."</span>);</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  }</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span> }</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 &&...)</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">◆ </a></span>Combine() <span class="overload">[1/2]</span></h2> +<a id="ae91e1849e95350c8e50912a217999eac"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae91e1849e95350c8e50912a217999eac">◆ </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 </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 </td> - <td class="paramname"><em>sourceB</em> </td> + <td class="paramtype">Args... </td> + <td class="paramname"><em>rest</em> </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> {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><a class="code" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a><span class="keyword">></span>(sourceA) | static_cast<MemorySourceFlags>(sourceB);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> }</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> {</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><a class="code" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a><span class="keyword">></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> }</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">◆ </a></span>Combine() <span class="overload">[2/2]</span></h2> +<a id="a5d94c2125c725df5b619d16db9d4a8e9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5d94c2125c725df5b619d16db9d4a8e9">◆ </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 </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... </td> - <td class="paramname"><em>rest</em> </td> + <td class="paramtype">Arg </td> + <td class="paramname"><em>sourceB</em> </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> {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><a class="code" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a><span class="keyword">></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> }</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> {</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><a class="code" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a><span class="keyword">></span>(sourceA) | <span class="keyword">static_cast<</span><a class="code" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a><span class="keyword">></span>(sourceB);</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> }</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> {</div> +<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordtype">int</span> rank = <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></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>  </div> +<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <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>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>((-1 * rank) <= armnnAxis);</div> +<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(armnnAxis < rank);</div> +<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  </div> +<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordtype">int</span> sign = (armnnAxis < 0) ? -1 : 1;</div> +<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordtype">int</span> aclAxis = sign * rank - 1 - armnnAxis;</div> +<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  </div> +<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">return</span> aclAxis;</div> +<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> }</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> {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordtype">int</span> rank = <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></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> </div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <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>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>((-1 * rank) <= armnnAxis);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(armnnAxis < rank);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordtype">int</span> sign = (armnnAxis < 0) ? -1 : 1;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordtype">int</span> aclAxis = sign * rank - 1 - armnnAxis;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">return</span> aclAxis;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> }</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> {</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <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>  <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>  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>  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>  <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> </div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo =</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <a class="code" href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(activationDescriptor);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <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> </div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <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> }</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> {</div> +<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <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>  <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>  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>  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>  <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>  </div> +<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo =</div> +<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <a class="code" href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(activationDescriptor);</div> +<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <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>  </div> +<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <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> }</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< LayerDescriptor >::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> {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <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>  <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>  <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>  descriptor.m_PadTop, descriptor.m_PadBottom,</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  descriptor.m_PadFront, descriptor.m_PadBack};</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <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> </div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo =</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <a class="code" href="namespacearmnn.xhtml#abfb0841058a8190d30851f07eca3991f">ConvertAdditionalInfoToAclActivationLayerInfo</a>(queueDescriptor);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <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> </div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <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> }</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 &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> {</div> +<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <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>  <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>  <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>  descriptor.m_PadTop, descriptor.m_PadBottom,</div> +<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  descriptor.m_PadFront, descriptor.m_PadBack};</div> +<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <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>  </div> +<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo =</div> +<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <a class="code" href="namespacearmnn.xhtml#abfb0841058a8190d30851f07eca3991f">ConvertAdditionalInfoToAclActivationLayerInfo</a>(queueDescriptor);</div> +<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <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>  </div> +<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <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> }</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< LayerDescriptor >::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) –> [0, rank) </p> +<p>[-rank, rank) --> [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> {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordtype">int</span> rank = <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></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> </div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <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>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>((-1 * rank) <= axis);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(axis < rank);</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordtype">int</span> positiveAxis = (axis < 0) ? rank + axis : axis;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(positiveAxis);</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> }</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> {</div> +<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordtype">int</span> rank = <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></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>  </div> +<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <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>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>((-1 * rank) <= axis);</div> +<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(axis < rank);</div> +<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  </div> +<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordtype">int</span> positiveAxis = (axis < 0) ? rank + axis : axis;</div> +<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(positiveAxis);</div> +<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> }</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> {</div> +<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">auto</span> reducedTensorInfo = input;</div> +<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <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>  <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>  <span class="comment">// Calculate output dimension</span></div> +<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">if</span> (keepDims)</div> +<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  {</div> +<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  outputRank = rank;</div> +<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  }</div> +<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <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>  {</div> +<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  outputRank = 1;</div> +<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  }</div> +<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (vAxis.size() > reducedTensorInfo.GetNumDimensions())</div> +<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  {</div> +<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keywordflow">throw</span> LayerValidationException(<span class="stringliteral">"ReduceLayer: Dimensions to reduce can not be bigger than input dimensions"</span>);</div> +<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  }</div> +<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  {</div> +<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  outputRank = reducedTensorInfo.GetNumDimensions() - armnn::numeric_cast<unsigned int>(vAxis.size());</div> +<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordflow">if</span> (outputRank == 0)</div> +<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  {</div> +<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  outputRank = 1;</div> +<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  }</div> +<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  }</div> +<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  std::vector<unsigned int> dimSizes(outputRank, 1);</div> +<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">if</span> (!vAxis.empty())</div> +<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  {</div> +<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < reducedTensorInfo.GetNumDimensions(); ++i)</div> +<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  {</div> +<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <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>  {</div> +<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  dimSizes[outputIndex] = armnn::numeric_cast<unsigned int>(reducedTensorInfo.GetShape()[i]);</div> +<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  ++outputIndex;</div> +<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  }</div> +<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (keepDims)</div> +<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  {</div> +<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  dimSizes[outputIndex] = 1;</div> +<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  ++outputIndex;</div> +<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  }</div> +<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  }</div> +<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  }</div> +<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keyword">const</span> TensorShape inferredShape = TensorShape(outputRank, dimSizes.data());</div> +<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  reducedTensorInfo.SetShape(inferredShape);</div> +<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordflow">return</span> reducedTensorInfo;</div> +<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> }</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> {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">auto</span> reducedTensorInfo = input;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <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>  <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>  <span class="comment">// Calculate output dimension</span></div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">if</span> (keepDims)</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  {</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  outputRank = rank;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  }</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <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>  {</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  outputRank = 1;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  }</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (vAxis.size() > reducedTensorInfo.GetNumDimensions())</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  {</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keywordflow">throw</span> LayerValidationException(<span class="stringliteral">"ReduceLayer: Dimensions to reduce can not be bigger than input dimensions"</span>);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  }</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  {</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  outputRank = reducedTensorInfo.GetNumDimensions() - <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>>(vAxis.size());</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordflow">if</span> (outputRank == 0)</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  {</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  outputRank = 1;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  }</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  }</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  std::vector<unsigned int> dimSizes(outputRank, 1);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">if</span> (!vAxis.empty())</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  {</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < reducedTensorInfo.GetNumDimensions(); ++i)</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <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>  {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  dimSizes[outputIndex] = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>>(reducedTensorInfo.GetShape()[i]);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  ++outputIndex;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  }</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (keepDims)</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  dimSizes[outputIndex] = 1;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  ++outputIndex;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  }</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keyword">const</span> TensorShape inferredShape = TensorShape(outputRank, dimSizes.data());</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  reducedTensorInfo.SetShape(inferredShape);</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordflow">return</span> reducedTensorInfo;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span> }</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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <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>  <span class="keywordflow">if</span> (softmaxDesc.m_Axis == -1)</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <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> </div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <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> </div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="comment">// Currently ArmNN support axis 1.</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keyword">auto</span> aclAxis = (<span class="keyword">static_cast<</span>T<span class="keyword">></span>(dim) - 1);</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  aclAxis = aclAxis > 0 ? aclAxis -1 : aclAxis;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">return</span> aclAxis;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> }</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> {</div> +<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <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>  <span class="keywordflow">if</span> (softmaxDesc.m_Axis == -1)</div> +<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  {</div> +<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">return</span> 0;</div> +<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  }</div> +<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  </div> +<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <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>  </div> +<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <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>  </div> +<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="comment">// Currently ArmNN support axis 1.</span></div> +<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keyword">auto</span> aclAxis = (<span class="keyword">static_cast<</span>T<span class="keyword">></span>(dim) - 1);</div> +<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  aclAxis = aclAxis > 0 ? aclAxis -1 : aclAxis;</div> +<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  </div> +<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">return</span> aclAxis;</div> +<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> }</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> {</div> +<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <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>  <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>  std::set<unsigned int> splitAxis;</div> +<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  </div> +<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numSplit; ++i)</div> +<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  {</div> +<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimIdx = 0; dimIdx < numDimensions; ++dimIdx)</div> +<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  {</div> +<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <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>  {</div> +<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  splitAxis.insert(dimIdx);</div> +<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  }</div> +<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  }</div> +<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  }</div> +<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">return</span> splitAxis;</div> +<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> }</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> {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <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>  <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>  std::set<unsigned int> splitAxis;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numSplit; ++i)</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimIdx = 0; dimIdx < numDimensions; ++dimIdx)</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  {</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <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>  {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  splitAxis.insert(dimIdx);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  }</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  }</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  }</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">return</span> splitAxis;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> }</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">◆ </a></span>Concatenate()</h2> +<a id="a83b1d61a12c9e1911c2b6d79c35ef551"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a83b1d61a12c9e1911c2b6d79c35ef551">◆ </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< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *> </td> + <td class="paramtype">std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> * > </td> <td class="paramname"><em>inputs</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> - <td class="paramtype">std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *> </td> + <td class="paramtype">std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> * > </td> <td class="paramname"><em>outputs</em> </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> {</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">const</span> TensorInfo& 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>  </div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  std::unique_ptr<Encoder<float>> encoderPtr = MakeEncoder<float>(outputInfo0, outputs[0]-><a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>());</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  Encoder<float>& encoder = *encoderPtr;</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = 0 ; index < outputInfo0.GetNumElements(); ++index)</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  {</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  <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>  </div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < outputInfo0.GetNumDimensions(); i++)</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  {</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  dimensionStride /= outputInfo0.GetShape()[i];</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  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>  indexRemainder -= indices[i] * dimensionStride;</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  }</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  </div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> viewIdx = 0; viewIdx < data.m_ViewOrigins.size(); ++viewIdx)</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  {</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  ConcatQueueDescriptor::ViewOrigin <span class="keyword">const</span>& view = data.m_ViewOrigins[viewIdx];</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  </div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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>  <span class="keyword">const</span> TensorInfo& 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>  <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>  </div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  <span class="keywordtype">bool</span> insideView = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < inputInfo.GetNumDimensions(); i++)</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  {</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">if</span> (indices[i] < view.m_Origin[i])</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  {</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  insideView = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  }</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">if</span> (indices[i] >= view.m_Origin[i] + inputInfo.GetShape()[i])</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  {</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  insideView = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  }</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  </div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">if</span> (insideView)</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  std::unique_ptr<Decoder<float>> decoderPtr =</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  MakeDecoder<float>(inputInfo,inputs[viewIdx]-><a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>());</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  Decoder<float>& decoder = *decoderPtr;</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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>  <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>  </div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = inputInfo.GetNumDimensions(); i-- > 0;)</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  inIndex += dimensionStride * (indices[i] - view.m_Origin[i]);</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  dimensionStride *= inputInfo.GetShape()[i];</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  decoder += inIndex;</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  encoder.Set(decoder.Get());</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  </div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <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>  <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>  <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>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  }</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  ++encoder;</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</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< IType >::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< IType >::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> {</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">const</span> TensorInfo& 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> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  std::unique_ptr<Encoder<float>> encoderPtr = MakeEncoder<float>(outputInfo0, outputs[0]->Map());</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  Encoder<float>& encoder = *encoderPtr;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = 0 ; index < outputInfo0.GetNumElements(); ++index)</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  <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> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < outputInfo0.GetNumDimensions(); i++)</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  dimensionStride /= outputInfo0.GetShape()[i];</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  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>  indexRemainder -= indices[i] * dimensionStride;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  }</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> viewIdx = 0; viewIdx < data.m_ViewOrigins.size(); ++viewIdx)</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  ConcatQueueDescriptor::ViewOrigin <span class="keyword">const</span>& view = data.m_ViewOrigins[viewIdx];</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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>  <span class="keyword">const</span> TensorInfo& 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>  <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> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  <span class="keywordtype">bool</span> insideView = <span class="keyword">true</span>;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < inputInfo.GetNumDimensions(); i++)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">if</span> (indices[i] < view.m_Origin[i])</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  insideView = <span class="keyword">false</span>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">if</span> (indices[i] >= view.m_Origin[i] + inputInfo.GetShape()[i])</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  insideView = <span class="keyword">false</span>;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">if</span> (insideView)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  std::unique_ptr<Decoder<float>> decoderPtr =</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  MakeDecoder<float>(inputInfo,inputs[viewIdx]->Map());</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  Decoder<float>& decoder = *decoderPtr;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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>  <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> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = inputInfo.GetNumDimensions(); i-- > 0;)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  inIndex += dimensionStride * (indices[i] - view.m_Origin[i]);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  dimensionStride *= inputInfo.GetShape()[i];</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  decoder += inIndex;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  encoder.Set(decoder.Get());</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <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>  <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>  <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>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  ++encoder;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</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">◆ </a></span>ConditionalThrow() <span class="overload">[1/2]</span></h2> +<a id="a6ed414c05eb6d4c89e0e4a475a0479c0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6ed414c05eb6d4c89e0e4a475a0479c0">◆ </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 </td> - <td class="paramname"><em>condition</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">const std::string & </td> - <td class="paramname"><em>message</em> </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> {</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">if</span> (!condition)</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  {</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">throw</span> ExceptionType(message);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> }</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> {</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">if</span> (!condition)</div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  {</div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">throw</span> ExceptionType();</div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</div> +</div><!-- fragment --> </div> </div> -<a id="a6ed414c05eb6d4c89e0e4a475a0479c0"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a6ed414c05eb6d4c89e0e4a475a0479c0">◆ </a></span>ConditionalThrow() <span class="overload">[2/2]</span></h2> +<a id="ae4ab3bf0697ad13316a6bcba0a8fade5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae4ab3bf0697ad13316a6bcba0a8fade5">◆ </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 </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 & </td> + <td class="paramname"><em>message</em> </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> {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">if</span> (!condition)</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  {</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">throw</span> ExceptionType();</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</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> {</div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">if</span> (!condition)</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  {</div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">throw</span> ExceptionType(message);</div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> }</div> +</div><!-- fragment --> </div> </div> <a id="ae57b7f9e2cb7080bf10b28d1f72b558e"></a> @@ -11571,7 +14641,15 @@ Variables</h2></td></tr> <p>ComparedType must support: operator==(const ComparedType&) operator<<(ostream&, const ComparedType&) </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> {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">if</span> (!(leftHandSide == rightHandSide))</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  std::stringstream ss;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  ss << message << <span class="stringliteral">" : "</span> << leftHandSide << <span class="stringliteral">" != "</span> << rightHandSide;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">throw</span> ExceptionType(ss.str());</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> {</div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">if</span> (!(leftHandSide == rightHandSide))</div> +<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  {</div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  std::stringstream ss;</div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  ss << message << <span class="stringliteral">" : "</span> << leftHandSide << <span class="stringliteral">" != "</span> << rightHandSide;</div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">throw</span> ExceptionType(ss.str());</div> +<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  }</div> +<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</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> {</div> +<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  detailsObject.SetType(JsonObjectType::ExecObjectDesc);</div> +<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  detailsObject.SetAndParseDetails(layerDetailsStr);</div> +<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  </div> +<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> }</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> {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  detailsObject.SetType(JsonObjectType::ExecObjectDesc);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  detailsObject.SetAndParseDetails(layerDetailsStr);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> }</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> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <a class="code" href="namespacearmnn.xhtml#ac9aad76a34137b6359a867b282ea7cfb">SetLogFilter</a>(severity);</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> }</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> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <a class="code" href="namespacearmnn.xhtml#ac9aad76a34137b6359a867b282ea7cfb">SetLogFilter</a>(severity);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> }</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> {</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  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>  </div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">switch</span> (level)</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  {</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">case</span> TuningLevel::Rapid:</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) << <span class="stringliteral">"Gpu tuning is activated. TuningLevel: Rapid (1)"</span>;</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  tuner.set_tuner_mode(arm_compute::CLTunerMode::RAPID);</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">case</span> TuningLevel::Normal:</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) << <span class="stringliteral">"Gpu tuning is activated. TuningLevel: Normal (2)"</span>;</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  tuner.set_tuner_mode(arm_compute::CLTunerMode::NORMAL);</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">case</span> TuningLevel::Exhaustive:</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) << <span class="stringliteral">"Gpu tuning is activated. TuningLevel: Exhaustive (3)"</span>;</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  tuner.set_tuner_mode(arm_compute::CLTunerMode::EXHAUSTIVE);</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">case</span> TuningLevel::None:</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  tuner.set_tune_new_kernels(<span class="keyword">false</span>); <span class="comment">// Turn off tuning. Set to "use" only mode.</span></div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> }</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> {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  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> </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">switch</span> (level)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">case</span> TuningLevel::Rapid:</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) << <span class="stringliteral">"Gpu tuning is activated. TuningLevel: Rapid (1)"</span>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  tuner.set_tuner_mode(arm_compute::CLTunerMode::RAPID);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">case</span> TuningLevel::Normal:</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) << <span class="stringliteral">"Gpu tuning is activated. TuningLevel: Normal (2)"</span>;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  tuner.set_tuner_mode(arm_compute::CLTunerMode::NORMAL);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">case</span> TuningLevel::Exhaustive:</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) << <span class="stringliteral">"Gpu tuning is activated. TuningLevel: Exhaustive (3)"</span>;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  tuner.set_tuner_mode(arm_compute::CLTunerMode::EXHAUSTIVE);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">case</span> TuningLevel::None:</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  tuner.set_tune_new_kernels(<span class="keyword">false</span>); <span class="comment">// Turn off tuning. Set to "use" only mode.</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> }</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> {</div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <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>  TensorInfo weightsPermuted;</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <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>  {</div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <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>  aclDepthMultiplier = weightInfo.GetShape()[3] / inputInfo.GetShape()[3];</div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  weightsPermuted = weightInfo;</div> +<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  }</div> +<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  </div> +<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <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>  {</div> +<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <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>  <span class="comment">// [ 1, H, W, I*M] --> [ 1, I * M, H, W ]</span></div> +<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  aclDepthMultiplier = weightInfo.GetShape()[3] / inputInfo.GetShape()[1];</div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  PermutationVector permutationVector{ 0, 2, 3, 1 };</div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  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>  }</div> +<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  {</div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">throw</span> InvalidArgumentException(fmt::format(<span class="stringliteral">"Unknown data layout for tensor info conversion: {}"</span>,</div> +<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <a class="code" href="namespacearmnn.xhtml#aeef70b7611ae71e97ab55c75ef72b210">GetDataLayoutName</a>(dataLayout)));</div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  }</div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  </div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">return</span> std::make_tuple(weightsPermuted, aclDepthMultiplier);</div> +<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> }</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> {</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <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>  TensorInfo weightsPermuted;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <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>  {</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <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>  aclDepthMultiplier = weightInfo.GetShape()[3] / inputInfo.GetShape()[3];</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  weightsPermuted = weightInfo;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <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>  {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <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>  <span class="comment">// [ 1, H, W, I*M] --> [ 1, I * M, H, W ]</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  aclDepthMultiplier = weightInfo.GetShape()[3] / inputInfo.GetShape()[1];</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  PermutationVector permutationVector{ 0, 2, 3, 1 };</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  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>  }</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">throw</span> InvalidArgumentException(fmt::format(<span class="stringliteral">"Unknown data layout for tensor info conversion: {}"</span>,</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <a class="code" href="namespacearmnn.xhtml#aeef70b7611ae71e97ab55c75ef72b210">GetDataLayoutName</a>(dataLayout)));</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">return</span> std::make_tuple(weightsPermuted, aclDepthMultiplier);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> }</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 &srcShape, const armnn::PermutationVector &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> {</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  TensorInfo weightsInfo = weightTensor->GetTensorInfo();</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <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>  PermutationVector permutationVector{};</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <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>  {</div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <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>  </div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  depthMultiplier = weightsInfo.GetShape()[3] / inputInfo.GetShape()[3];</div> +<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  }</div> +<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <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>  {</div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="comment">// [ 1, H, W, I*M] --> [ 1, I * M, H, W ]</span></div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  depthMultiplier = weightsInfo.GetShape()[3] / inputInfo.GetShape()[1];</div> +<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  permutationVector = { 0, 2, 3, 1 };</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  {</div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">throw</span> InvalidArgumentException(fmt::format(<span class="stringliteral">"Unknown data layout for tensor conversion: {}"</span>,</div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <a class="code" href="namespacearmnn.xhtml#aeef70b7611ae71e97ab55c75ef72b210">GetDataLayoutName</a>(dataLayout)));</div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  }</div> +<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  </div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  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>  </div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">return</span> std::make_tuple(weightsPermuted, depthMultiplier);</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> }</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> {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  TensorInfo weightsInfo = weightTensor->GetTensorInfo();</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <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>  PermutationVector permutationVector{};</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <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>  {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <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> </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  depthMultiplier = weightsInfo.GetShape()[3] / inputInfo.GetShape()[3];</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <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>  {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="comment">// [ 1, H, W, I*M] --> [ 1, I * M, H, W ]</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  depthMultiplier = weightsInfo.GetShape()[3] / inputInfo.GetShape()[1];</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  permutationVector = { 0, 2, 3, 1 };</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">throw</span> InvalidArgumentException(fmt::format(<span class="stringliteral">"Unknown data layout for tensor conversion: {}"</span>,</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <a class="code" href="namespacearmnn.xhtml#aeef70b7611ae71e97ab55c75ef72b210">GetDataLayoutName</a>(dataLayout)));</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  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> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">return</span> std::make_tuple(weightsPermuted, depthMultiplier);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> }</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 &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> {</div> +<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  TensorInfo weightsInfo = weightTensor->GetTensorInfo();</div> +<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  </div> +<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">if</span> (weightsInfo.HasPerAxisQuantization())</div> +<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  {</div> +<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Can't convert tensor from [1,H,W,Cout] to [M,Cin,H,W] when per channel "</span></div> +<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="stringliteral">"quantization is applied."</span>);</div> +<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div> +<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  </div> +<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="comment">// Reshape weights [ 1, H, W, I*M ] --> [ H, W, I, M ]</span></div> +<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keyword">auto</span> weightsShape = weightsInfo.GetShape();</div> +<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <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>  <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>  weightsInfo.SetShape({ weightsShape[1],</div> +<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  weightsShape[2],</div> +<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  inputInfo.GetShape()[channelIndex],</div> +<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  depthMultiplier});</div> +<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  </div> +<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="comment">// Permute [ H, W, I, M ] --> [ M, I, H, W ]</span></div> +<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  PermutationVector permutationVector = { 2, 3, 1, 0 };</div> +<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  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>  </div> +<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">return</span> std::make_tuple(weightsPermuted, depthMultiplier);</div> +<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> }</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> {</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  TensorInfo weightsInfo = weightTensor->GetTensorInfo();</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">if</span> (weightsInfo.HasPerAxisQuantization())</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  {</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Can't convert tensor from [1,H,W,Cout] to [M,Cin,H,W] when per channel "</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="stringliteral">"quantization is applied."</span>);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="comment">// Reshape weights [ 1, H, W, I*M ] --> [ H, W, I, M ]</span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keyword">auto</span> weightsShape = weightsInfo.GetShape();</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <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>  <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>  weightsInfo.SetShape({ weightsShape[1],</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  weightsShape[2],</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  inputInfo.GetShape()[channelIndex],</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  depthMultiplier});</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="comment">// Permute [ H, W, I, M ] --> [ M, I, H, W ]</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  PermutationVector permutationVector = { 2, 3, 1, 0 };</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  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> </div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">return</span> std::make_tuple(weightsPermuted, depthMultiplier);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> }</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 &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> {</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <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>  actDesc.m_A, actDesc.m_B);</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</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> {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <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>  actDesc.m_A, actDesc.m_B);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</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> {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">if</span> (activationDescPtr != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(static_cast<ActivationDescriptor>(</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  *activationDescPtr));</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo();</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</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> {</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">if</span> (activationDescPtr != <span class="keyword">nullptr</span>)</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  {</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(<span class="keyword">static_cast<</span>ActivationDescriptor<span class="keyword">></span>(</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  *activationDescPtr));</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo();</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</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> {</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <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>  </div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">switch</span> (armnnFunction)</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  {</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <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>  <span class="comment">// Arm compute's 'logistic' 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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported activation function"</span>);</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</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> {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <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> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">switch</span> (armnnFunction)</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  {</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <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>  <span class="comment">// Arm compute's 'logistic' 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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported activation function"</span>);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</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> {</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">const</span> ActivationDescriptor* activationDescPtr = queueDescriptor.GetAdditionalInformation<ActivationDescriptor>();</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  </div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">if</span> (activationDescPtr != <span class="keyword">nullptr</span>)</div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  {</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(<span class="keyword">static_cast<</span>ActivationDescriptor<span class="keyword">></span>(</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  *activationDescPtr));</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo();</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</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> {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">const</span> ActivationDescriptor* activationDescPtr = queueDescriptor.GetAdditionalInformation<ActivationDescriptor>();</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">if</span> (activationDescPtr != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  {</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(static_cast<ActivationDescriptor>(</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  *activationDescPtr));</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo();</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</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> {</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">switch</span> (descriptor.m_Operation)</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  {</div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <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>  <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>  <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>  <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>  <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>  <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>  <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported comparison function"</span>);</div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  }</div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> }</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> {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">switch</span> (descriptor.m_Operation)</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <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>  <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>  <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>  <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>  <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>  <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>  <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported comparison function"</span>);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> }</div></div><!-- fragment --> + </div> </div> -<a id="ae2e0c1d8160fadce44d479379790718e"></a> -<h2 class="memtitle"><span class="permalink"><a href="#ae2e0c1d8160fadce44d479379790718e">◆ </a></span>ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo() <span class="overload">[1/2]</span></h2> +<a id="a2f12c1f572fb15978e51cf646d42d4dc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2f12c1f572fb15978e51cf646d42d4dc">◆ </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> * </td> - <td class="paramname"><em>activationDesc</em> </td> + <td class="paramtype">arm_compute::ActivationLayerInfo </td> + <td class="paramname"><em>activationLayerInfo</em> </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> {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  arm_compute::FullyConnectedLayerInfo fc_info;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  fc_info.transpose_weights = fullyConnectedDesc.m_TransposeWeightMatrix;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  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>  <span class="keywordflow">return</span> fc_info;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</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> {</div> +<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  arm_compute::FullyConnectedLayerInfo fc_info;</div> +<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  fc_info.transpose_weights = fullyConnectedDesc.m_TransposeWeightMatrix;</div> +<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  fc_info.activation_info = activationLayerInfo;</div> +<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">return</span> fc_info;</div> +<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> }</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">◆ </a></span>ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo() <span class="overload">[2/2]</span></h2> +<a id="ae2e0c1d8160fadce44d479379790718e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae2e0c1d8160fadce44d479379790718e">◆ </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 </td> - <td class="paramname"><em>activationLayerInfo</em> </td> + <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> * </td> + <td class="paramname"><em>activationDesc</em> </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> {</div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  arm_compute::FullyConnectedLayerInfo fc_info;</div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  fc_info.transpose_weights = fullyConnectedDesc.m_TransposeWeightMatrix;</div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  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>  <span class="keywordflow">return</span> fc_info;</div> +<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</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> {</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  arm_compute::FullyConnectedLayerInfo fc_info;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  fc_info.transpose_weights = fullyConnectedDesc.m_TransposeWeightMatrix;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  fc_info.activation_info = activationLayerInfo;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">return</span> fc_info;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> }</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> {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a><span class="keyword">></span>(severity);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> }</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> {</div> +<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a><span class="keyword">></span>(severity);</div> +<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> }</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> {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <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>  <span class="keywordflow">switch</span> (activationFunction)</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">case</span> 0:</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <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>  <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <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>  <span class="keywordflow">case</span> 3:</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  arm_compute::ActivationLayerInfo::ActivationFunction::BOUNDED_RELU, 6.0);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">case</span> 4:</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  arm_compute::ActivationLayerInfo::ActivationFunction::TANH, 1.0, 1.0);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">case</span> 6:</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  arm_compute::ActivationLayerInfo::ActivationFunction::LOGISTIC);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>(<span class="stringliteral">"Wrong Type of Activation Function!"</span>);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  }</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> }</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> {</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <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>  <span class="keywordflow">switch</span> (activationFunction)</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  {</div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">case</span> 0:</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <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>  <span class="keywordflow">case</span> 1:</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <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>  <span class="keywordflow">case</span> 3:</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  arm_compute::ActivationLayerInfo::ActivationFunction::BOUNDED_RELU, 6.0);</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">case</span> 4:</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  arm_compute::ActivationLayerInfo::ActivationFunction::TANH, 1.0, 1.0);</div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">case</span> 6:</div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(</div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  arm_compute::ActivationLayerInfo::ActivationFunction::LOGISTIC);</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>(<span class="stringliteral">"Wrong Type of Activation Function!"</span>);</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  }</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> }</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> {</div> +<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  int32_t reversedMask = 0;</div> +<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < armnn::numeric_cast<unsigned int>(numDim); ++i)</div> +<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  {</div> +<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <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>  int32_t bit = (mask & 1 << i) != 0;</div> +<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <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>  reversedMask += (bit << std::max(numDim-(armnn::numeric_cast<int>(i)+1), 0));</div> +<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  }</div> +<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  </div> +<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">return</span> reversedMask;</div> +<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> }</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> {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  int32_t reversedMask = 0;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < armnn::numeric_cast<unsigned int>(numDim); ++i)</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <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>  int32_t bit = (mask & 1 << i) != 0;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <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>  reversedMask += (bit << std::max(numDim-(armnn::numeric_cast<int>(i)+1), 0));</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  }</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">return</span> reversedMask;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> }</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> {</div> +<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">using</span> arm_compute::NormType;</div> +<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">switch</span> (channelType)</div> +<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  {</div> +<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <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>  <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>  <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported normalization algorithm channel type"</span>);</div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  }</div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> }</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> {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">using</span> arm_compute::NormType;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">switch</span> (channelType)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <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>  <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>  <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported normalization algorithm channel type"</span>);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  }</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> }</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> {</div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">using</span> arm_compute::DimensionRoundingType;</div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  </div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">switch</span> (rounding)</div> +<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  {</div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <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>  <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>  <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported Output Shape Rounding type"</span>);</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> }</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> {</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">using</span> arm_compute::DimensionRoundingType;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">switch</span> (rounding)</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  {</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <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>  <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>  <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported Output Shape Rounding type"</span>);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> }</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> {</div> +<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keywordflow">switch</span> (paddingMode)</div> +<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  {</div> +<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <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>  <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>  <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>  <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported Padding Mode"</span>);</div> +<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div> +<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> }</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> {</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keywordflow">switch</span> (paddingMode)</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  {</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <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>  <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>  <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>  <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported Padding Mode"</span>);</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> }</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> {</div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">using</span> arm_compute::PoolingType;</div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  </div> +<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">switch</span> (poolingAlgorithm)</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  {</div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <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>  <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>  <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>  <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported pooling algorithm"</span>);</div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  }</div> +<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</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> {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">using</span> arm_compute::PoolingType;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">switch</span> (poolingAlgorithm)</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <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>  <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>  <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>  <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported pooling algorithm"</span>);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</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> {</div> +<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keywordflow">switch</span> (descriptor.m_ReduceOperation)</div> +<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  {</div> +<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <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>  <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>  <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>  <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>  <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>  <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported Reduction operation"</span>);</div> +<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  }</div> +<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> }</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> {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keywordflow">switch</span> (descriptor.m_ReduceOperation)</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  {</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <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>  <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>  <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>  <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>  <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>  <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported Reduction operation"</span>);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  }</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> }</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> {</div> +<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">switch</span> (resizeMethod)</div> +<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  {</div> +<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">case</span> ResizeMethod::Bilinear:</div> +<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keywordflow">return</span> arm_compute::InterpolationPolicy::BILINEAR;</div> +<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">case</span> ResizeMethod::NearestNeighbor:</div> +<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">return</span> arm_compute::InterpolationPolicy::NEAREST_NEIGHBOR;</div> +<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported resize method"</span>);</div> +<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div> +<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> }</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> {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">switch</span> (resizeMethod)</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">case</span> ResizeMethod::Bilinear:</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keywordflow">return</span> arm_compute::InterpolationPolicy::BILINEAR;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">case</span> ResizeMethod::NearestNeighbor:</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">return</span> arm_compute::InterpolationPolicy::NEAREST_NEIGHBOR;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Unsupported resize method"</span>);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> }</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> {</div> +<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(weightTensor, <span class="stringliteral">"Invalid input tensor"</span>);</div> +<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(permuteBuffer, <span class="stringliteral">"Invalid permute buffer"</span>);</div> +<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  </div> +<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keyword">auto</span> multiplier = weightTensor->GetTensorInfo().GetShape()[0];</div> +<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keyword">auto</span> inputChannels = weightTensor->GetTensorInfo().GetShape()[1];</div> +<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  </div> +<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="comment">// Convert the weight format from ArmNN'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>  <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>  </div> +<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="comment">// 1. Permute the weights if necessary</span></div> +<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <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>  <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>  <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>  PermutationVector permutationVector{};</div> +<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordflow">if</span> (dataLayout == DataLayout::NHWC)</div> +<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  {</div> +<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <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>  permutationVector = { 3, 2, 0, 1 };</div> +<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  }</div> +<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  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>  </div> +<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <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>  <span class="keywordflow">if</span> (multiplier > 1 && inputChannels > 1 && dataLayout == DataLayout::NCHW)</div> +<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  {</div> +<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">switch</span> (weightPermuted.GetDataType())</div> +<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  {</div> +<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">case</span> DataType::Float32:</div> +<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  weightPermuted = ReorderWeightChannelsForAcl<float>(weightPermuted, dataLayout, permuteBuffer);</div> +<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">case</span> DataType::Float16:</div> +<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  weightPermuted =</div> +<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  ReorderWeightChannelsForAcl<half_float::half>(weightPermuted, dataLayout, permuteBuffer);</div> +<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keywordflow">case</span> DataType::QAsymmS8:</div> +<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">case</span> DataType::QAsymmU8:</div> +<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  weightPermuted = ReorderWeightChannelsForAcl<uint8_t>(weightPermuted, dataLayout, permuteBuffer);</div> +<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div> +<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  weightPermuted = ReorderWeightChannelsForAcl<int8_t>(weightPermuted, dataLayout, permuteBuffer);</div> +<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  }</div> +<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  }</div> +<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  </div> +<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="comment">// 2. Reshape the weights</span></div> +<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <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>  </div> +<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <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>  <span class="keywordflow">return</span> weightPermuted;</div> +<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> }</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< MemoryType >::GetDataType()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00295">BaseTensor< MemoryType >::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> {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(weightTensor, <span class="stringliteral">"Invalid input tensor"</span>);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(permuteBuffer, <span class="stringliteral">"Invalid permute buffer"</span>);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keyword">auto</span> multiplier = weightTensor->GetTensorInfo().GetShape()[0];</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keyword">auto</span> inputChannels = weightTensor->GetTensorInfo().GetShape()[1];</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="comment">// Convert the weight format from ArmNN'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>  <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> </div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="comment">// 1. Permute the weights if necessary</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <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>  <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>  <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>  PermutationVector permutationVector{};</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordflow">if</span> (dataLayout == DataLayout::NHWC)</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <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>  permutationVector = { 3, 2, 0, 1 };</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  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> </div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <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>  <span class="keywordflow">if</span> (multiplier > 1 && inputChannels > 1 && dataLayout == DataLayout::NCHW)</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  {</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">switch</span> (weightPermuted.GetDataType())</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  weightPermuted = ReorderWeightChannelsForAcl<float>(weightPermuted, dataLayout, permuteBuffer);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">case</span> DataType::Float16:</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  weightPermuted =</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  ReorderWeightChannelsForAcl<half_float::half>(weightPermuted, dataLayout, permuteBuffer);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  weightPermuted = ReorderWeightChannelsForAcl<uint8_t>(weightPermuted, dataLayout, permuteBuffer);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  weightPermuted = ReorderWeightChannelsForAcl<int8_t>(weightPermuted, dataLayout, permuteBuffer);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="comment">// 2. Reshape the weights</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <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> </div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <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>  <span class="keywordflow">return</span> weightPermuted;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> }</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 &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 &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> {</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="comment">// Convert the weight format from ArmNN'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>  <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>  </div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="comment">// 1. Permute the weights if necessary</span></div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <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>  <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>  TensorInfo weightPermutedInfo(weightInfo);</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">if</span> (dataLayout == DataLayout::NHWC)</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  {</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <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>  PermutationVector permutationVector{ 3, 2, 0, 1 };</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  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>  }</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  </div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="comment">// 2. Reshape the weights</span></div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="namespacearmnn.xhtml#a3170fdd696155a247ecd81d445c0e2e1">ReshapeWeightsForAcl</a>(weightPermutedInfo, dataLayout);</div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  </div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="comment">// 3. Return the permuted weight info</span></div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">return</span> weightPermutedInfo;</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> }</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> {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="comment">// Convert the weight format from ArmNN'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>  <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> </div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="comment">// 1. Permute the weights if necessary</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <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>  <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>  TensorInfo weightPermutedInfo(weightInfo);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">if</span> (dataLayout == DataLayout::NHWC)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <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>  PermutationVector permutationVector{ 3, 2, 0, 1 };</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  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>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="comment">// 2. Reshape the weights</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="namespacearmnn.xhtml#a3170fdd696155a247ecd81d445c0e2e1">ReshapeWeightsForAcl</a>(weightPermutedInfo, dataLayout);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="comment">// 3. Return the permuted weight info</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">return</span> weightPermutedInfo;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> }</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 &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 &srcShape, const armnn::PermutationVector &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> {</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">if</span> (biasEnabled && !pBiasDecoder)</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Bias is enabled but the bias data is invalid"</span>);</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <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>  </div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="comment">// Weights layout:</span></div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="comment">// Conv2d: [O,H,W,I]</span></div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="comment">// Depthwise: [1,H,W,O]</span></div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <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>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <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>  <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>  </div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">const</span> std::vector<float> 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>  <span class="keyword">const</span> std::vector<float> 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>  </div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">const</span> TensorShape biasShape{outputChannels};</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">const</span> std::vector<float> biasVec = biasEnabled ? pBiasDecoder-><a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(biasShape) : std::vector<float>();</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  </div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchIdx = 0; batchIdx < batchSize; batchIdx++)</div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  {</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cOutput = 0; cOutput < outputChannels; cOutput++)</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yOutput = 0; yOutput < outputHeight; yOutput++)</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  {</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xOutput = 0; xOutput < outputWidth; xOutput++)</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  {</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="comment">// This loop goes over each output element.</span></div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordtype">float</span> sum = 0.0f;</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  </div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cInput = 0; cInput < (depthwise ? 1 : inputChannels); cInput++)</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  {</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yFilter = 0; yFilter < filterHeight; yFilter++)</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  {</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xFilter = 0; xFilter < filterWidth; xFilter++)</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  {</div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <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>  <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>  </div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <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>  <span class="keywordflow">if</span> (depthwise)</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  {</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  cInput = cOutput / depthMultiplier;</div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="comment">// filterDepth = outputChannels;</span></div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  filterIndex = xFilter * outputChannels + cOutput +</div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  yFilter * filterWidth * outputChannels;</div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  {</div> +<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <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>  <span class="comment">// performance regression.</span></div> +<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NHWC)</div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  filterIndex = cOutput * filterHeight * filterWidth * inputChannels +</div> +<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  yFilter * filterWidth * inputChannels +</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  xFilter * inputChannels +</div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  cInput;</div> +<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  }</div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  {</div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  filterIndex = cOutput * filterWidth * filterHeight * inputChannels +</div> +<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  cInput * filterWidth * filterHeight +</div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  yFilter * filterWidth +</div> +<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  xFilter;</div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  }</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  }</div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  </div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <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>  <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>  </div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordtype">float</span> inputValue;</div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  </div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="comment">// Check if we're in the padding.</span></div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">if</span> (yInput < paddingTop || yInput >= inputHeight + paddingTop ||</div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  xInput < paddingLeft || xInput >= inputWidth + paddingLeft)</div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  {</div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  inputValue = 0.0f;</div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  }</div> +<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  {</div> +<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <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>  </div> +<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <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>  <span class="comment">// performance regression.</span></div> +<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NHWC)</div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  {</div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  inputIndex = batchIdx * inputHeight * inputWidth * inputChannels +</div> +<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  (yInput - paddingTop) * inputWidth * inputChannels +</div> +<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  (xInput - paddingLeft) * inputChannels +</div> +<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  cInput;</div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  }</div> +<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  {</div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  inputIndex = batchIdx * inputWidth * inputHeight * inputChannels +</div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  inputWidth * inputHeight * cInput +</div> +<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  inputWidth * (yInput - paddingTop) +</div> +<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  xInput - paddingLeft;</div> +<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  }</div> +<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  inputValue = inputVec[inputIndex];</div> +<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  }</div> +<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  </div> +<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  sum += filterVec[filterIndex] * inputValue;</div> +<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  }</div> +<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  }</div> +<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  }</div> +<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  </div> +<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">if</span> (biasEnabled)</div> +<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  {</div> +<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  sum += biasVec[cOutput];</div> +<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div> +<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  </div> +<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outIdx;</div> +<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NHWC)</div> +<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  {</div> +<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  outIdx = batchIdx * outputHeight * outputWidth * outputChannels +</div> +<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  yOutput * outputWidth * outputChannels +</div> +<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  xOutput * outputChannels +</div> +<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  cOutput;</div> +<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div> +<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  {</div> +<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  outIdx = batchIdx * outputHeight * outputWidth * outputChannels +</div> +<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  cOutput * outputHeight * outputWidth +</div> +<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  yOutput * outputWidth +</div> +<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  xOutput;</div> +<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  }</div> +<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  </div> +<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  rOutputEncoder[outIdx];</div> +<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  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>  }</div> +<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div> +<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  }</div> +<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  }</div> +<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> }</div> +</div><!-- fragment --> <p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder< IType >::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< IType >::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> {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">if</span> (biasEnabled && !pBiasDecoder)</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Bias is enabled but the bias data is invalid"</span>);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <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> </div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <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>  <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>  <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> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="comment">// Weights layout:</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="comment">// Conv2d: [O,H,W,I]</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="comment">// Depthwise: [1,H,W,O]</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <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>  <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>  <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> </div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <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>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <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>  <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> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">const</span> std::vector<float> 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>  <span class="keyword">const</span> std::vector<float> 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> </div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">const</span> TensorShape biasShape{outputChannels};</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">const</span> std::vector<float> biasVec = biasEnabled ? pBiasDecoder-><a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(biasShape) : std::vector<float>();</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchIdx = 0; batchIdx < batchSize; batchIdx++)</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cOutput = 0; cOutput < outputChannels; cOutput++)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yOutput = 0; yOutput < outputHeight; yOutput++)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xOutput = 0; xOutput < outputWidth; xOutput++)</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="comment">// This loop goes over each output element.</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordtype">float</span> sum = 0.0f;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cInput = 0; cInput < (depthwise ? 1 : inputChannels); cInput++)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  {</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yFilter = 0; yFilter < filterHeight; yFilter++)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xFilter = 0; xFilter < filterWidth; xFilter++)</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <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>  <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> </div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <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>  <span class="keywordflow">if</span> (depthwise)</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  cInput = cOutput / depthMultiplier;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="comment">// filterDepth = outputChannels;</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  filterIndex = xFilter * outputChannels + cOutput +</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  yFilter * filterWidth * outputChannels;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <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>  <span class="comment">// performance regression.</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NHWC)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  filterIndex = cOutput * filterHeight * filterWidth * inputChannels +</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  yFilter * filterWidth * inputChannels +</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  xFilter * inputChannels +</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  cInput;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  filterIndex = cOutput * filterWidth * filterHeight * inputChannels +</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  cInput * filterWidth * filterHeight +</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  yFilter * filterWidth +</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  xFilter;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <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>  <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> </div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordtype">float</span> inputValue;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="comment">// Check if we're in the padding.</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">if</span> (yInput < paddingTop || yInput >= inputHeight + paddingTop ||</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  xInput < paddingLeft || xInput >= inputWidth + paddingLeft)</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  inputValue = 0.0f;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  }</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <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> </div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <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>  <span class="comment">// performance regression.</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NHWC)</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  inputIndex = batchIdx * inputHeight * inputWidth * inputChannels +</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  (yInput - paddingTop) * inputWidth * inputChannels +</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  (xInput - paddingLeft) * inputChannels +</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  cInput;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  }</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  inputIndex = batchIdx * inputWidth * inputHeight * inputChannels +</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  inputWidth * inputHeight * cInput +</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  inputWidth * (yInput - paddingTop) +</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  xInput - paddingLeft;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  inputValue = inputVec[inputIndex];</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  sum += filterVec[filterIndex] * inputValue;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  }</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">if</span> (biasEnabled)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  sum += biasVec[cOutput];</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outIdx;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NHWC)</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  outIdx = batchIdx * outputHeight * outputWidth * outputChannels +</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  yOutput * outputWidth * outputChannels +</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  xOutput * outputChannels +</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  cOutput;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  {</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  outIdx = batchIdx * outputHeight * outputWidth * outputChannels +</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  cOutput * outputHeight * outputWidth +</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  yOutput * outputWidth +</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  xOutput;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  rOutputEncoder[outIdx];</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  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>  }</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> }</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< float > DecodeTensor(const TensorShape &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> {</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">if</span> (biasEnabled && !pBiasDecoder)</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  {</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Bias is enabled but the bias data is invalid"</span>);</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  }</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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>  </div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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>  <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>  </div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">const</span> std::vector<float> 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>  <span class="keyword">const</span> std::vector<float> 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>  </div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">const</span> TensorShape biasShape{outChannels};</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">const</span> std::vector<float> biasVec = biasEnabled ? pBiasDecoder-><a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(biasShape) : std::vector<float>();</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  </div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchIdx = 0; batchIdx < batchSize; batchIdx++)</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  {</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> zOutput = 0; zOutput < outputDepth; zOutput++)</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  {</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xOutput = 0; xOutput < outputWidth; xOutput++)</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yOutput = 0; yOutput < outputHeight; yOutput++)</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  {</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cOutput = 0; cOutput < outChannels; cOutput++)</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  {</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="comment">// This loop goes over each output element.</span></div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordtype">float</span> sum = 0.0f;</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  </div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="comment">// Loop over each input channel.</span></div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> zFilter = 0; zFilter < filterDepth; zFilter++)</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yFilter = 0; yFilter < filterHeight; yFilter++)</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xFilter = 0; xFilter < filterWidth; xFilter++)</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cInput = 0; cInput < inChannels; cInput++)</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  {</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <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>  <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>  </div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <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>  <span class="comment">// Keep this implementation, as using DataLayoutIndexed::GetIndex</span></div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="comment">// causes large performance regression.</span></div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  filterIndex = zFilter * filterHeight * filterWidth * inChannels * outChannels +</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  yFilter * filterWidth * inChannels * outChannels +</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  xFilter * inChannels * outChannels +</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  cInput * outChannels +</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  cOutput;</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  </div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordtype">float</span> inputValue;</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  </div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="comment">// Check if we're in the padding.</span></div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">if</span> (yInput < paddingTop || yInput >= inputHeight + paddingTop ||</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  xInput < paddingLeft || xInput >= inputWidth + paddingLeft ||</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  zInput < paddingFront || zInput >= inputDepth + paddingFront)</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  {</div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  inputValue = 0.0f;</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  {</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <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>  </div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="comment">// Keep this implementation, as using DataLayoutIndexed::GetIndex</span></div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="comment">// causes large performance regression.</span></div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NDHWC)</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  {</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  inputIndex =</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  batchIdx * inputDepth * inputHeight * inputWidth * inChannels +</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  (zInput-paddingFront) * inputHeight * inputWidth * inChannels +</div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  (yInput-paddingTop) * inputWidth * inChannels +</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  (xInput-paddingLeft) * inChannels +</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  cInput;</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  {</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="comment">// NCDHW DataLayout</span></div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  inputIndex =</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  batchIdx * inputDepth * inputHeight * inputWidth * inChannels +</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  inputDepth * inputHeight * inputWidth * cInput +</div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  (zInput-paddingFront) * inputHeight * inputWidth +</div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  (yInput-paddingTop) * inputWidth +</div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  xInput-paddingLeft;</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  }</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  </div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  inputValue = inputVec[inputIndex];</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  }</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  </div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  sum += filterVec[filterIndex] * inputValue;</div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  }</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  }</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  </div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">if</span> (biasEnabled)</div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  {</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  sum += biasVec[cOutput];</div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  </div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outIdx;</div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NDHWC)</div> +<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  {</div> +<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  outIdx = batchIdx * outputDepth * outputHeight * outputWidth * outChannels +</div> +<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  zOutput * outputHeight * outputWidth * outChannels +</div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  yOutput * outputWidth * outChannels +</div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  xOutput * outChannels +</div> +<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  cOutput;</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  {</div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="comment">// NCDHW DataLayout</span></div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  outIdx = batchIdx * outputDepth * outputHeight * outputWidth * outChannels +</div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  cOutput * outputDepth * outputHeight * outputWidth +</div> +<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  zOutput * outputHeight * outputWidth +</div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  yOutput * outputWidth +</div> +<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  xOutput;</div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  }</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  </div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  rOutputEncoder[outIdx];</div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  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>  }</div> +<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  }</div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  }</div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  }</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div> +</div><!-- fragment --> <p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder< IType >::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< IType >::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> {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">if</span> (biasEnabled && !pBiasDecoder)</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Bias is enabled but the bias data is invalid"</span>);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  }</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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>  <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> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <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>  <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>  <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>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">const</span> std::vector<float> 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>  <span class="keyword">const</span> std::vector<float> 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> </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">const</span> TensorShape biasShape{outChannels};</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">const</span> std::vector<float> biasVec = biasEnabled ? pBiasDecoder-><a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(biasShape) : std::vector<float>();</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchIdx = 0; batchIdx < batchSize; batchIdx++)</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> zOutput = 0; zOutput < outputDepth; zOutput++)</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  {</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xOutput = 0; xOutput < outputWidth; xOutput++)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yOutput = 0; yOutput < outputHeight; yOutput++)</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cOutput = 0; cOutput < outChannels; cOutput++)</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="comment">// This loop goes over each output element.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordtype">float</span> sum = 0.0f;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="comment">// Loop over each input channel.</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> zFilter = 0; zFilter < filterDepth; zFilter++)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yFilter = 0; yFilter < filterHeight; yFilter++)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xFilter = 0; xFilter < filterWidth; xFilter++)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cInput = 0; cInput < inChannels; cInput++)</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  {</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <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>  <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> </div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <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>  <span class="comment">// Keep this implementation, as using DataLayoutIndexed::GetIndex</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="comment">// causes large performance regression.</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  filterIndex = zFilter * filterHeight * filterWidth * inChannels * outChannels +</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  yFilter * filterWidth * inChannels * outChannels +</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  xFilter * inChannels * outChannels +</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  cInput * outChannels +</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  cOutput;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <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>  <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>  <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> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordtype">float</span> inputValue;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="comment">// Check if we're in the padding.</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">if</span> (yInput < paddingTop || yInput >= inputHeight + paddingTop ||</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  xInput < paddingLeft || xInput >= inputWidth + paddingLeft ||</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  zInput < paddingFront || zInput >= inputDepth + paddingFront)</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  inputValue = 0.0f;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <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> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="comment">// Keep this implementation, as using DataLayoutIndexed::GetIndex</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="comment">// causes large performance regression.</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NDHWC)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  inputIndex =</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  batchIdx * inputDepth * inputHeight * inputWidth * inChannels +</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  (zInput-paddingFront) * inputHeight * inputWidth * inChannels +</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  (yInput-paddingTop) * inputWidth * inChannels +</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  (xInput-paddingLeft) * inChannels +</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  cInput;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="comment">// NCDHW DataLayout</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  inputIndex =</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  batchIdx * inputDepth * inputHeight * inputWidth * inChannels +</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  inputDepth * inputHeight * inputWidth * cInput +</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  (zInput-paddingFront) * inputHeight * inputWidth +</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  (yInput-paddingTop) * inputWidth +</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  xInput-paddingLeft;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  inputValue = inputVec[inputIndex];</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  sum += filterVec[filterIndex] * inputValue;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">if</span> (biasEnabled)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  sum += biasVec[cOutput];</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outIdx;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NDHWC)</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  outIdx = batchIdx * outputDepth * outputHeight * outputWidth * outChannels +</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  zOutput * outputHeight * outputWidth * outChannels +</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  yOutput * outputWidth * outChannels +</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  xOutput * outChannels +</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  cOutput;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="comment">// NCDHW DataLayout</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  outIdx = batchIdx * outputDepth * outputHeight * outputWidth * outChannels +</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  cOutput * outputDepth * outputHeight * outputWidth +</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  zOutput * outputHeight * outputWidth +</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  yOutput * outputWidth +</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  xOutput;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  rOutputEncoder[outIdx];</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  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>  }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  }</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  }</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</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< float > DecodeTensor(const TensorShape &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> {</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  {</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <a class="code" href="_cl_workload_utils_8hpp.xhtml#a9166fc90a3ea47a2c9499a810b204daf">ARMNN_SCOPED_PROFILING_EVENT_CL</a>(<span class="stringliteral">"MapClTensorForWriting"</span>);</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  dstTensor.map(<span class="keyword">true</span>);</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  }</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  </div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="_cl_workload_utils_8hpp.xhtml#a9166fc90a3ea47a2c9499a810b204daf">ARMNN_SCOPED_PROFILING_EVENT_CL</a>(<span class="stringliteral">"CopyToClTensor"</span>);</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  armcomputetensorutils::CopyArmComputeITensorData<T>(srcData, dstTensor);</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  </div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  dstTensor.unmap();</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> }</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> {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <a class="code" href="_cl_workload_utils_8hpp.xhtml#a9166fc90a3ea47a2c9499a810b204daf">ARMNN_SCOPED_PROFILING_EVENT_CL</a>(<span class="stringliteral">"MapClTensorForWriting"</span>);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  dstTensor.map(<span class="keyword">true</span>);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="_cl_workload_utils_8hpp.xhtml#a9166fc90a3ea47a2c9499a810b204daf">ARMNN_SCOPED_PROFILING_EVENT_CL</a>(<span class="stringliteral">"CopyToClTensor"</span>);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  armcomputetensorutils::CopyArmComputeITensorData<T>(srcData, dstTensor);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  dstTensor.unmap();</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> }</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> {</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  InitialiseArmComputeTensorEmpty(dstTensor);</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  CopyArmComputeITensorData(srcData, dstTensor);</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> }</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> {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  InitialiseArmComputeTensorEmpty(dstTensor);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  CopyArmComputeITensorData(srcData, dstTensor);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> }</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> {</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <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>  <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>  static_assert(<a class="code" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a> == 5, <span class="stringliteral">"Please update CopyTensorContents"</span>);</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  </div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  TensorShape srcStrides = srcTensor->GetStrides();</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">const</span> TensorShape& srcShape = srcTensor->GetShape();</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">const</span> <span class="keyword">auto</span> srcSize = srcTensor->GetStrides()[0] * srcShape[0];</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <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>  TensorShape dstStrides = dstTensor->GetStrides();</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">const</span> TensorShape& dstShape = dstTensor->GetShape();</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">const</span> <span class="keyword">auto</span> dstSize = dstTensor->GetStrides()[0] * dstShape[0];</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <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>  </div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordtype">size_t</span> srcDepth = 1;</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordtype">size_t</span> srcBatches = 1;</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordtype">size_t</span> srcHeight = 1;</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordtype">size_t</span> srcWidth = 1;</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordtype">size_t</span> srcChannels = 1;</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  AssignValues(srcShape.GetNumDimensions(),</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  0,</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  srcShape,</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  srcChannels,</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  srcWidth,</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  srcHeight,</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  srcBatches,</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  srcDepth);</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  </div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordtype">size_t</span> srcDepthStride = 0;</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordtype">size_t</span> srcBatchStride = 0;</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordtype">size_t</span> srcHeightStride = 0;</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordtype">size_t</span> srcWidthStride = 0;</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordtype">size_t</span> srcChannelStride = 0;</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  AssignValues(srcStrides.GetNumDimensions(),</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  0,</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  srcStrides,</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  srcChannelStride,</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  srcWidthStride,</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  srcHeightStride,</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  srcBatchStride,</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  srcDepthStride);</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  </div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordtype">size_t</span> dstDepth = 1;</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordtype">size_t</span> dstBatches = 1;</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordtype">size_t</span> dstHeight = 1;</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordtype">size_t</span> dstWidth = 1;</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordtype">size_t</span> dstChannels = 1;</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  AssignValues(dstShape.GetNumDimensions(),</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  0,</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  dstShape,</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  dstChannels,</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  dstWidth,</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  dstHeight,</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  dstBatches,</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  dstDepth);</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  </div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordtype">size_t</span> dstDepthStride = 0;</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordtype">size_t</span> dstBatchStride = 0;</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordtype">size_t</span> dstHeightStride = 0;</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordtype">size_t</span> dstWidthStride = 0;</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordtype">size_t</span> dstChannelStride = 0;</div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  AssignValues(dstStrides.GetNumDimensions(),</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  0,</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  dstStrides,</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  dstChannelStride,</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  dstWidthStride,</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  dstHeightStride,</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  dstBatchStride,</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  dstDepthStride);</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  </div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <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>  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* dstDataStart;</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  {</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Synchronize buffers"</span>);</div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  srcDataStart = <span class="keyword">static_cast<</span><span class="keyword">const </span>uint8_t*<span class="keyword">></span>(srcTensor->Map());</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  dstDataStart = <span class="keyword">static_cast<</span>uint8_t*<span class="keyword">></span>(dstTensor->Map());</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  }</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  </div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <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>  <span class="keywordtype">size_t</span> copyWidth = std::min(srcWidth, dstWidth);</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordtype">size_t</span> copyHeight = std::min(srcHeight, dstHeight);</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordtype">size_t</span> copyBatches = std::min(srcBatches, dstBatches);</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordtype">size_t</span> copyDepth = std::min(srcDepth, dstDepth);</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  </div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="comment">// Coalesce inner dimensions where possible</span></div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="comment">// to reduce overheard calling copy() and to</span></div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="comment">// allow for memory bandwidth optimisations</span></div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">if</span> (copyLength == srcWidthStride &&</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  copyLength == dstWidthStride)</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  {</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="comment">// There is no special padding between rows,</span></div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <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>  copyLength *= copyWidth;</div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  copyWidth = 1;</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  </div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">if</span> (copyLength == srcHeightStride &&</div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  copyLength == dstHeightStride)</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  {</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="comment">// There is no special padding between batches</span></div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <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>  copyLength *= copyHeight;</div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  copyHeight = 1;</div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  }</div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  </div> +<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> d = 0; d < copyDepth; ++d)</div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">auto</span> srcPtrDepth = srcData;</div> +<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keyword">auto</span> dstPtrDepth = dstData;</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> b = 0; b < copyBatches; ++b)</div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  {</div> +<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keyword">auto</span> srcPtrBatch = srcData;</div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keyword">auto</span> dstPtrBatch = dstData;</div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h < copyHeight; ++h)</div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  {</div> +<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keyword">auto</span> srcPtrChannel = srcData;</div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keyword">auto</span> dstPtrChannel = dstData;</div> +<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < copyWidth; ++w)</div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  {</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(srcData >= srcDataStart && srcData + copyLength <= srcDataStart + srcSize);</div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(dstData >= dstDataStart && dstData + copyLength <= dstDataStart + dstSize);</div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  copy(dstData, srcData, copyLength);</div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  dstData += dstWidthStride;</div> +<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  srcData += srcWidthStride;</div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  }</div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  dstData += (<span class="keyword">static_cast<</span><span class="keywordtype">long</span><span class="keyword">></span>(dstHeightStride) - (dstData - dstPtrChannel));</div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  srcData += (<span class="keyword">static_cast<</span><span class="keywordtype">long</span><span class="keyword">></span>(srcHeightStride) - (srcData - srcPtrChannel));</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  dstData += (<span class="keyword">static_cast<</span><span class="keywordtype">long</span><span class="keyword">></span>(dstBatchStride) - (dstData - dstPtrBatch));</div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  srcData += (<span class="keyword">static_cast<</span><span class="keywordtype">long</span><span class="keyword">></span>(srcBatchStride) - (srcData - srcPtrBatch));</div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  dstData += (<span class="keyword">static_cast<</span><span class="keywordtype">long</span><span class="keyword">></span>(dstDepthStride) - (dstData - dstPtrDepth));</div> +<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  srcData += (<span class="keyword">static_cast<</span><span class="keywordtype">long</span><span class="keyword">></span>(srcDepthStride) - (srcData - srcPtrDepth));</div> +<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div> +<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  </div> +<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  srcTensor->Unmap();</div> +<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  dstTensor->Unmap();</div> +<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</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> {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <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>  <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>  static_assert(<a class="code" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a> == 5, <span class="stringliteral">"Please update CopyTensorContents"</span>);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  TensorShape srcStrides = srcTensor->GetStrides();</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">const</span> TensorShape& srcShape = srcTensor->GetShape();</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">const</span> <span class="keyword">auto</span> srcSize = srcTensor->GetStrides()[0] * srcShape[0];</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <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>  TensorShape dstStrides = dstTensor->GetStrides();</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">const</span> TensorShape& dstShape = dstTensor->GetShape();</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">const</span> <span class="keyword">auto</span> dstSize = dstTensor->GetStrides()[0] * dstShape[0];</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <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> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordtype">size_t</span> srcDepth = 1;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordtype">size_t</span> srcBatches = 1;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordtype">size_t</span> srcHeight = 1;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordtype">size_t</span> srcWidth = 1;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordtype">size_t</span> srcChannels = 1;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  AssignValues(srcShape.GetNumDimensions(),</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  0,</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  srcShape,</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  srcChannels,</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  srcWidth,</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  srcHeight,</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  srcBatches,</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  srcDepth);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordtype">size_t</span> srcDepthStride = 0;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordtype">size_t</span> srcBatchStride = 0;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordtype">size_t</span> srcHeightStride = 0;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordtype">size_t</span> srcWidthStride = 0;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordtype">size_t</span> srcChannelStride = 0;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  AssignValues(srcStrides.GetNumDimensions(),</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  0,</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  srcStrides,</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  srcChannelStride,</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  srcWidthStride,</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  srcHeightStride,</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  srcBatchStride,</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  srcDepthStride);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordtype">size_t</span> dstDepth = 1;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordtype">size_t</span> dstBatches = 1;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordtype">size_t</span> dstHeight = 1;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordtype">size_t</span> dstWidth = 1;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordtype">size_t</span> dstChannels = 1;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  AssignValues(dstShape.GetNumDimensions(),</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  0,</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  dstShape,</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  dstChannels,</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  dstWidth,</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  dstHeight,</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  dstBatches,</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  dstDepth);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordtype">size_t</span> dstDepthStride = 0;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordtype">size_t</span> dstBatchStride = 0;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordtype">size_t</span> dstHeightStride = 0;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordtype">size_t</span> dstWidthStride = 0;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordtype">size_t</span> dstChannelStride = 0;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  AssignValues(dstStrides.GetNumDimensions(),</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  0,</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  dstStrides,</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  dstChannelStride,</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  dstWidthStride,</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  dstHeightStride,</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  dstBatchStride,</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  dstDepthStride);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <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>  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* dstDataStart;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Synchronize buffers"</span>);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  srcDataStart = <span class="keyword">static_cast<</span><span class="keyword">const </span>uint8_t*<span class="keyword">></span>(srcTensor->Map());</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  dstDataStart = <span class="keyword">static_cast<</span>uint8_t*<span class="keyword">></span>(dstTensor->Map());</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  }</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <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>  <span class="keywordtype">size_t</span> copyWidth = std::min(srcWidth, dstWidth);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordtype">size_t</span> copyHeight = std::min(srcHeight, dstHeight);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordtype">size_t</span> copyBatches = std::min(srcBatches, dstBatches);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordtype">size_t</span> copyDepth = std::min(srcDepth, dstDepth);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="comment">// Coalesce inner dimensions where possible</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="comment">// to reduce overheard calling copy() and to</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="comment">// allow for memory bandwidth optimisations</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">if</span> (copyLength == srcWidthStride &&</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  copyLength == dstWidthStride)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="comment">// There is no special padding between rows,</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <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>  copyLength *= copyWidth;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  copyWidth = 1;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">if</span> (copyLength == srcHeightStride &&</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  copyLength == dstHeightStride)</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="comment">// There is no special padding between batches</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <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>  copyLength *= copyHeight;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  copyHeight = 1;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> d = 0; d < copyDepth; ++d)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">auto</span> srcPtrDepth = srcData;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keyword">auto</span> dstPtrDepth = dstData;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> b = 0; b < copyBatches; ++b)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keyword">auto</span> srcPtrBatch = srcData;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keyword">auto</span> dstPtrBatch = dstData;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h < copyHeight; ++h)</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keyword">auto</span> srcPtrChannel = srcData;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keyword">auto</span> dstPtrChannel = dstData;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < copyWidth; ++w)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(srcData >= srcDataStart && srcData + copyLength <= srcDataStart + srcSize);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(dstData >= dstDataStart && dstData + copyLength <= dstDataStart + dstSize);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  copy(dstData, srcData, copyLength);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  dstData += dstWidthStride;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  srcData += srcWidthStride;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  }</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  dstData += (<span class="keyword">static_cast<</span><span class="keywordtype">long</span><span class="keyword">></span>(dstHeightStride) - (dstData - dstPtrChannel));</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  srcData += (<span class="keyword">static_cast<</span><span class="keywordtype">long</span><span class="keyword">></span>(srcHeightStride) - (srcData - srcPtrChannel));</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  dstData += (<span class="keyword">static_cast<</span><span class="keywordtype">long</span><span class="keyword">></span>(dstBatchStride) - (dstData - dstPtrBatch));</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  srcData += (<span class="keyword">static_cast<</span><span class="keywordtype">long</span><span class="keyword">></span>(srcBatchStride) - (srcData - srcPtrBatch));</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  dstData += (<span class="keyword">static_cast<</span><span class="keywordtype">long</span><span class="keyword">></span>(dstDepthStride) - (dstData - dstPtrDepth));</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  srcData += (<span class="keyword">static_cast<</span><span class="keywordtype">long</span><span class="keyword">></span>(srcDepthStride) - (srcData - srcPtrDepth));</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  srcTensor->Unmap();</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  dstTensor->Unmap();</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</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 &&...)</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> {</div> +<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"CopyOutput"</span>);</div> +<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>  <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>  {</div> +<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>  memcpy(dst, src, size);</div> +<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>  };</div> +<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>  </div> +<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>  std::unique_ptr<ITensorHandle> tensorHandle =</div> +<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>  std::make_unique<PassthroughTensorHandle>(outputTensor.GetInfo(),</div> +<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>  outputTensor.GetMemoryArea());</div> +<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>  </div> +<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>  <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> }</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< MemoryType >::GetInfo()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00305">BaseTensor< MemoryType >::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> {</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"CopyOutput"</span>);</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>  <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>  {</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>  memcpy(dst, src, size);</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>  };</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> </div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>  std::unique_ptr<ITensorHandle> tensorHandle =</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>  std::make_unique<PassthroughTensorHandle>(outputTensor.GetInfo(),</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>  outputTensor.GetMemoryArea());</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> </div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>  <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> }</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> {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  <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> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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>  <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>  <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>  <span class="comment">// parameters.</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="comment">//</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  <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> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <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>  <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>  <span class="comment">// ACL's normalization_layer_cross_map() CL function.</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">const</span> uint32_t normSize = depth * 2u + 1u;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="comment">// See ACL's NormalizationLayerInfo::scale_coeff() definition.</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="comment">// For the reference implementation, to make alpha_ become 1, we'd have to use alpha = normSize instead.</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="comment">// Don't offset the reduction.</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <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> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="comment">// pow(reduction, -0.5) = 1 / sqrt(reduction)</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <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> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <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> }</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 & 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> {</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  <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>  </div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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>  <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>  <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>  <span class="comment">// parameters.</span></div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  <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>  </div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <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>  <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>  <span class="comment">// ACL's normalization_layer_cross_map() CL function.</span></div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">const</span> uint32_t normSize = depth * 2u + 1u;</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  </div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="comment">// See ACL's NormalizationLayerInfo::scale_coeff() definition.</span></div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="comment">// For the reference implementation, to make alpha_ become 1, we'd have to use alpha = normSize instead.</span></div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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>  </div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="comment">// Don't offset the reduction.</span></div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <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>  </div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="comment">// pow(reduction, -0.5) = 1 / sqrt(reduction)</span></div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <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>  </div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <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> }</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>  {</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  ClContextBuilder builder_(_fbb);</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  builder_.add_programs(programs);</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">return</span> builder_.Finish();</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> }</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>  {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  ClContextBuilder builder_(_fbb);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  builder_.add_programs(programs);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">return</span> builder_.Finish();</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> }</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>  {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">auto</span> programs__ = programs ? _fbb.CreateVector<flatbuffers::Offset<armnn::Program>>(*programs) : 0;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <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>  _fbb,</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  programs__);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> }</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< ClContext > CreateClContext(flatbuffers::FlatBufferBuilder &_fbb, flatbuffers::Offset< flatbuffers::Vector< flatbuffers::Offset< armnn::Program >>> 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>  {</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">auto</span> programs__ = programs ? _fbb.CreateVector<flatbuffers::Offset<armnn::Program>>(*programs) : 0;</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <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>  _fbb,</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  programs__);</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> }</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> {</div> +<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keyword">auto</span> numInputs = std::distance(first, last);</div> +<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  </div> +<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">if</span> (numInputs < 2)</div> +<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  {</div> +<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Concatenation requires at least 2 inputs"</span>);</div> +<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  }</div> +<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  </div> +<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& firstInputShape = *first;</div> +<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  </div> +<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <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>  <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>  {</div> +<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">if</span> (it->GetNumDimensions() != numDimensions)</div> +<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  {</div> +<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"All inputs to concatenation must have the same number of dimensions"</span>);</div> +<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  }</div> +<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  }</div> +<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  </div> +<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordflow">if</span> (concatenationDimension >= numDimensions)</div> +<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  {</div> +<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"concatenationDimension must be between 0 and the number of dimensions."</span>);</div> +<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  }</div> +<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  </div> +<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <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>  {</div> +<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> d = 0; d < numDimensions; ++d)</div> +<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  {</div> +<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <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>  <span class="keywordflow">if</span> (!dimSizeOk)</div> +<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  {</div> +<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"All inputs to concatenation must be the same size along all dimensions "</span></div> +<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="stringliteral">" except the concatenation dimension"</span>);</div> +<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  }</div> +<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  }</div> +<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  }</div> +<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  </div> +<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  OriginsDescriptor viewsDescriptor(<span class="keyword">static_cast<</span>uint32_t<span class="keyword">></span>(numInputs), numDimensions);</div> +<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  viewsDescriptor.SetConcatAxis(concatenationDimension);</div> +<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  </div> +<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  uint32_t viewIndex = 0u;</div> +<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  uint32_t coordAlongConcatDim = 0u;</div> +<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <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>  {</div> +<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& inputShape = *it;</div> +<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  </div> +<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < concatenationDimension; ++i)</div> +<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  {</div> +<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  viewsDescriptor.SetViewOriginCoord(viewIndex, i, 0);</div> +<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  }</div> +<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  </div> +<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  viewsDescriptor.SetViewOriginCoord(viewIndex, concatenationDimension, coordAlongConcatDim);</div> +<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <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>  coordAlongConcatDim += dimSize;</div> +<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  </div> +<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  </div> +<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = concatenationDimension + 1; i < numDimensions; ++i)</div> +<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  {</div> +<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  viewsDescriptor.SetViewOriginCoord(viewIndex, i, 0);</div> +<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div> +<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  </div> +<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  ++viewIndex;</div> +<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  }</div> +<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  </div> +<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keywordflow">return</span> viewsDescriptor;</div> +<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> }</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> {</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keyword">auto</span> numInputs = std::distance(first, last);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">if</span> (numInputs < 2)</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  {</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Concatenation requires at least 2 inputs"</span>);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& firstInputShape = *first;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <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>  <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>  {</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">if</span> (it->GetNumDimensions() != numDimensions)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"All inputs to concatenation must have the same number of dimensions"</span>);</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  }</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  }</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordflow">if</span> (concatenationDimension >= numDimensions)</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  {</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"concatenationDimension must be between 0 and the number of dimensions."</span>);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <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>  {</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> d = 0; d < numDimensions; ++d)</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  {</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <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>  <span class="keywordflow">if</span> (!dimSizeOk)</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"All inputs to concatenation must be the same size along all dimensions "</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="stringliteral">" except the concatenation dimension"</span>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  }</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  OriginsDescriptor viewsDescriptor(static_cast<uint32_t>(numInputs), numDimensions);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  viewsDescriptor.SetConcatAxis(concatenationDimension);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  uint32_t viewIndex = 0u;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  uint32_t coordAlongConcatDim = 0u;</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <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>  {</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& inputShape = *it;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < concatenationDimension; ++i)</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  viewsDescriptor.SetViewOriginCoord(viewIndex, i, 0);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  }</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  viewsDescriptor.SetViewOriginCoord(viewIndex, concatenationDimension, coordAlongConcatDim);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <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>  coordAlongConcatDim += dimSize;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = concatenationDimension + 1; i < numDimensions; ++i)</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  {</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  viewsDescriptor.SetViewOriginCoord(viewIndex, i, 0);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  ++viewIndex;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keywordflow">return</span> viewsDescriptor;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> }</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>  {</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  ProgramBuilder builder_(_fbb);</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  builder_.add_binary(binary);</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  builder_.add_name(name);</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">return</span> builder_.Finish();</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</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>  {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  ProgramBuilder builder_(_fbb);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  builder_.add_binary(binary);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  builder_.add_name(name);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">return</span> builder_.Finish();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</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>  {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keyword">auto</span> name__ = name ? _fbb.CreateString(name) : 0;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keyword">auto</span> binary__ = binary ? _fbb.CreateVector<uint8_t>(*binary) : 0;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <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>  _fbb,</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  name__,</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  binary__);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> }</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< Program > CreateProgram(flatbuffers::FlatBufferBuilder &_fbb, flatbuffers::Offset< flatbuffers::String > name=0, flatbuffers::Offset< flatbuffers::Vector< uint8_t >> 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>  {</div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keyword">auto</span> name__ = name ? _fbb.CreateString(name) : 0;</div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keyword">auto</span> binary__ = binary ? _fbb.CreateVector<uint8_t>(*binary) : 0;</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <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>  _fbb,</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  name__,</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  binary__);</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> }</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> {</div> +<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  <a class="code" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> backends;</div> +<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  <span class="keyword">auto</span> <span class="keyword">const</span>& backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">BackendRegistryInstance</a>();</div> +<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& selectedBackend : backendSettings.m_SupportedBackends)</div> +<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  {</div> +<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  <span class="keyword">auto</span> backendFactory = backendRegistry.GetFactory(selectedBackend);</div> +<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  <span class="keyword">auto</span> backendObjPtr = backendFactory();</div> +<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  <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>  </div> +<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  backendObjPtr->RegisterTensorHandleFactories(handleFactoryRegistry);</div> +<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  </div> +<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  backends[backendObjPtr->GetId()] = std::move(backendObjPtr);</div> +<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  }</div> +<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  </div> +<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  <span class="keywordflow">return</span> backends;</div> +<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> }</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> {</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  <a class="code" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> backends;</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  <span class="keyword">auto</span> <span class="keyword">const</span>& backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">BackendRegistryInstance</a>();</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& selectedBackend : backendSettings.m_SupportedBackends)</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  {</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  <span class="keyword">auto</span> backendFactory = backendRegistry.GetFactory(selectedBackend);</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  <span class="keyword">auto</span> backendObjPtr = backendFactory();</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  <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> </div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  backendObjPtr->RegisterTensorHandleFactories(handleFactoryRegistry);</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> </div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  backends[backendObjPtr->GetId()] = std::move(backendObjPtr);</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  }</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  <span class="keywordflow">return</span> backends;</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> }</div><div class="ttc" id="namespacearmnn_xhtml_ac2807505b850738bc8a1991ce669dd47"><div class="ttname"><a href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a></div><div class="ttdeci">BackendRegistry & 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< BackendId, std::unique_ptr< class IBackendInternal > > 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< BFloat16 >()</a>, <a class="el" href="namespacearmnn.xhtml#af34b15ddc0dcee095162820e88d84808">Debug< float >()</a>, <a class="el" href="namespacearmnn.xhtml#a4dbfaabd2d65dc91bc8bd4d0b5e1ed07">Debug< Half >()</a>, <a class="el" href="namespacearmnn.xhtml#a62669f61a81677f5ca4b1f21bb7d45d8">Debug< int16_t >()</a>, <a class="el" href="namespacearmnn.xhtml#a77e5a9b94927bee9c48010efd2dec2b0">Debug< int32_t >()</a>, <a class="el" href="namespacearmnn.xhtml#a31a77914be2a7b9d8c6d22036df869d8">Debug< int8_t >()</a>, and <a class="el" href="namespacearmnn.xhtml#af5cd3e7fcb637ffad7644cdd2e19a8ae">Debug< uint8_t >()</a>.</p> - -<p class="reference">Referenced by <a class="el" href="_ref_debug_workload_8cpp_source.xhtml#l00024">RefDebugWorkload< DataType >::ExecuteAsync()</a>.</p> -<div class="fragment"><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">if</span> (outputsToFile)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  fs::path tmpDir = fs::temp_directory_path();</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  std::ofstream out(tmpDir.generic_string() + <span class="stringliteral">"/ArmNNIntermediateLayerOutputs/"</span> + layerName + <span class="stringliteral">".numpy"</span>);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  PrintOutput<T>(inputInfo, inputData, guid, layerName, slotIndex, out);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  out.close();</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  PrintOutput<T>(inputInfo, inputData, guid, layerName, slotIndex, std::cout);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> {</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">if</span> (outputsToFile)</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  fs::path tmpDir = fs::temp_directory_path();</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  std::ofstream out(tmpDir.generic_string() + <span class="stringliteral">"/ArmNNIntermediateLayerOutputs/"</span> + layerName + <span class="stringliteral">".numpy"</span>);</div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  PrintOutput<T>(inputInfo, inputData, guid, layerName, slotIndex, out);</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  out.close();</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  }</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  {</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  PrintOutput<T>(inputInfo, inputData, guid, layerName, slotIndex, std::cout);</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  }</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> }</div> +</div><!-- fragment --> </div> </div> <a id="acea0491173b09308ca626ea65e70e1d8"></a> -<h2 class="memtitle"><span class="permalink"><a href="#acea0491173b09308ca626ea65e70e1d8">◆ </a></span>Debug< BFloat16 >()</h2> +<h2 class="memtitle"><span class="permalink"><a href="#acea0491173b09308ca626ea65e70e1d8">◆ </a></span>Debug< BFloat16 >()</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">◆ </a></span>Debug< float >()</h2> +<h2 class="memtitle"><span class="permalink"><a href="#af34b15ddc0dcee095162820e88d84808">◆ </a></span>Debug< float >()</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">◆ </a></span>Debug< Half >()</h2> +<h2 class="memtitle"><span class="permalink"><a href="#a4dbfaabd2d65dc91bc8bd4d0b5e1ed07">◆ </a></span>Debug< Half >()</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">◆ </a></span>Debug< int16_t >()</h2> +<h2 class="memtitle"><span class="permalink"><a href="#a62669f61a81677f5ca4b1f21bb7d45d8">◆ </a></span>Debug< int16_t >()</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">◆ </a></span>Debug< int32_t >()</h2> +<h2 class="memtitle"><span class="permalink"><a href="#a77e5a9b94927bee9c48010efd2dec2b0">◆ </a></span>Debug< int32_t >()</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">◆ </a></span>Debug< int8_t >()</h2> +<h2 class="memtitle"><span class="permalink"><a href="#a31a77914be2a7b9d8c6d22036df869d8">◆ </a></span>Debug< int8_t >()</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">◆ </a></span>Debug< uint8_t >()</h2> +<h2 class="memtitle"><span class="permalink"><a href="#af5cd3e7fcb637ffad7644cdd2e19a8ae">◆ </a></span>Debug< uint8_t >()</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> {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">delete</span> <span class="keyword">static_cast<</span><span class="keyword">const </span>T*<span class="keyword">></span>(blob);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">delete</span> <span class="keyword">static_cast<</span><span class="keyword">const </span>T*<span class="keyword">></span>(blob);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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> {</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  <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>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">const</span> <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="l00028"></a><span class="lineno"> 28</span>  <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>  </div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  </div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <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>  <span class="comment">//</span></div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  <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>  <span class="comment">//</span></div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <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>  <span class="comment">// the following shapes:</span></div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  <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>  <span class="comment">//</span></div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="comment">// NOTE:</span></div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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>  <span class="comment">// batch separately and execute 5D permutations</span></div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  </div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <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>  <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>  <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>  {</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  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>  permVector = { 2, 4, 0, 1, 3 };</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  }</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  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>  permVector = { 0, 2, 1, 3, 4 };</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  </div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <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>  </div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchIndex = 0u; batchIndex < batches; ++batchIndex)</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">const</span> uintptr_t batchDataOffset = batchIndex * (numElementsPerBatch * dataTypeSize);</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  </div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <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>  permVector,</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keyword">static_cast<</span><span class="keyword">const </span><span class="keywordtype">void</span>*<span class="keyword">></span>(<span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>uint8_t*<span class="keyword">></span>(inputData) + batchDataOffset),</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">static_cast<</span><span class="keywordtype">void</span>*<span class="keyword">></span>(<span class="keyword">reinterpret_cast<</span>uint8_t*<span class="keyword">></span>(outputData) + batchDataOffset),</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  dataTypeSize);</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> }</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> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  <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> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">const</span> <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="l00028"></a><span class="lineno"> 28</span>  <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> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <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>  <span class="comment">//</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  <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>  <span class="comment">//</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <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>  <span class="comment">// the following shapes:</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="comment">//</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  <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>  <span class="comment">//</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="comment">// NOTE:</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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>  <span class="comment">// batch separately and execute 5D permutations</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <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>  <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>  <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>  {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  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>  permVector = { 2, 4, 0, 1, 3 };</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  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>  permVector = { 0, 2, 1, 3, 4 };</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <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> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchIndex = 0u; batchIndex < batches; ++batchIndex)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">const</span> uintptr_t batchDataOffset = batchIndex * (numElementsPerBatch * dataTypeSize);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <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>  permVector,</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  static_cast<const void*>(reinterpret_cast<const uint8_t*>(inputData) + batchDataOffset),</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  static_cast<void*>(reinterpret_cast<uint8_t*>(outputData) + batchDataOffset),</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  dataTypeSize);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> }</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 & 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 &dstShape, const armnn::PermutationVector &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 >= 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">◆ </a></span>Dequantize() <span class="overload">[1/4]</span></h2> +<a id="a1204727d8ce3ee1e60daf08079eb892e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1204727d8ce3ee1e60daf08079eb892e">◆ </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>< float > & </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>< float > & </td> - <td class="paramname"><em>outputEncoder</em>, </td> + <td class="paramtype">const T * </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> & </td> - <td class="paramname"><em>inputInfo</em>, </td> + <td class="paramtype">float * </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> & </td> - <td class="paramname"><em>outputInfo</em> </td> + <td class="paramname"><em>info</em> </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< IType >::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< IType >::Set()</a>.</p> -<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> {</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(outputInfo);</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < inputInfo.GetNumElements(); i++)</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  <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>  <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>  <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>  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>  ++outputEncoder;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  ++inputDecoder;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  }</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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 &&...)</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> {</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements(); i++)</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  {</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  outputData[i] = Dequantize<T>(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>  }</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</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> {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  std::vector<float> ret(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements());</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements(); i++)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  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>  }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> }</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> {</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  std::vector<float> ret(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements());</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements(); i++)</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  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>  }</div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">return</span> ret;</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> }</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">◆ </a></span>Dequantize() <span class="overload">[3/4]</span></h2> +<a id="acae7e910f899ae67340c9ce29e406a86"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acae7e910f899ae67340c9ce29e406a86">◆ </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 * </td> - <td class="paramname"><em>inputData</em>, </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< float > & </td> + <td class="paramname"><em>inputDecoder</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> - <td class="paramtype">float * </td> - <td class="paramname"><em>outputData</em>, </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< float > & </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> & </td> - <td class="paramname"><em>info</em> </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> & </td> + <td class="paramname"><em>outputInfo</em> </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> {</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements(); i++)</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  outputData[i] = Dequantize<T>(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>  }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</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> {</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(outputInfo);</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < inputInfo.GetNumElements(); i++)</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  <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>  <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>  <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>  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>  ++outputEncoder;</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  ++inputDecoder;</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  }</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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< IType >::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< IType >::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> {</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  static_assert(IsQuantizedType<QuantizedType>(), <span class="stringliteral">"Not an integer type."</span>);</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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>  <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>  <span class="keywordflow">return</span> (armnn::numeric_cast<float>(value - offset)) * scale;</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</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< T, DoQuantize >::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> {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  static_assert(IsQuantizedType<QuantizedType>(), <span class="stringliteral">"Not an integer type."</span>);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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>  <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>  <span class="keywordflow">return</span> (armnn::numeric_cast<float>(value - offset)) * scale;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</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< T, DoQuantize >::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< IType >::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> {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <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> </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <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>  <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>  std::vector<float> boxCorners(boxEncodingsInfo.GetNumElements());</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <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>  <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> </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numBoxes; ++i)</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  {</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="comment">// Y</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <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>  <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> </div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  ++boxEncodings;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  ++anchors;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="comment">// X</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <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>  <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> </div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  ++boxEncodings;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  ++anchors;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="comment">// H</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <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>  <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> </div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  ++boxEncodings;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  ++anchors;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="comment">// W</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <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>  <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> </div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  ++boxEncodings;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  ++anchors;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <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>  <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> </div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <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>  <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> </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="comment">// ymin</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  boxCorners[indexY] = yCentre - halfH;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="comment">// xmin</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  boxCorners[indexX] = xCentre - halfW;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="comment">// ymax</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  boxCorners[indexH] = yCentre + halfH;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="comment">// xmax</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  boxCorners[indexW] = xCentre + halfW;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(boxCorners[indexY] < boxCorners[indexH]);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(boxCorners[indexX] < boxCorners[indexW]);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <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> </div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="comment">// Decode scores</span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  std::vector<float> decodedScores;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  decodedScores.reserve(numScores);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i < numScores; ++i)</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  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>  ++scores;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  }</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="comment">// Perform Non Max Suppression.</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">if</span> (desc.m_UseRegularNms)</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="comment">// Perform Regular NMS.</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <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>  std::vector<float> classScores(numBoxes);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  std::vector<unsigned int> selectedBoxesAfterNms;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  selectedBoxesAfterNms.reserve(numBoxes);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  std::vector<float> selectedScoresAfterNms;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  selectedBoxesAfterNms.reserve(numScores);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  std::vector<unsigned int> selectedClasses;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < desc.m_NumClasses; ++c)</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numBoxes; ++i)</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  classScores[i] = decodedScores[i * numClassesWithBg + c + 1];</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  std::vector<unsigned int> selectedIndices = <a class="code" href="namespacearmnn.xhtml#ac8c641d4a69c9a85c487cfbc7ea4d73c">NonMaxSuppression</a>(numBoxes,</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  boxCorners,</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  classScores,</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  desc.m_NmsScoreThreshold,</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  desc.m_DetectionsPerClass,</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  desc.m_NmsIouThreshold);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < selectedIndices.size(); ++i)</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  {</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  selectedBoxesAfterNms.push_back(selectedIndices[i]);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  selectedScoresAfterNms.push_back(classScores[selectedIndices[i]]);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  selectedClasses.push_back(c);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  }</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <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>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numSelected = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>>(selectedBoxesAfterNms.size());</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <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> </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <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>  std::vector<unsigned int> outputIndices = <a class="code" href="namespacearmnn.xhtml#ae8ed5c640761fb6744aec0ee16388417">GenerateRangeK</a>(numSelected);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <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> </div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <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>  selectedBoxesAfterNms, selectedClasses, selectedScoresAfterNms,</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  detectionBoxes, detectionScores, detectionClasses, numDetections);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="comment">// Perform Fast NMS.</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <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>  <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>  <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>  std::vector<float> maxScores;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  std::vector<unsigned int>boxIndices;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  std::vector<unsigned int>maxScoreClasses;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> box = 0; box < numBoxes; ++box)</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  {</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <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> </div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="comment">// Get the max scores of the box.</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  std::vector<unsigned int> 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>  <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>  decodedScores.data() + scoreIndex, desc.m_NumClasses);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numClassesPerBox; ++i)</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  maxScores.push_back(decodedScores[scoreIndex + maxScoreIndices[i]]);</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  maxScoreClasses.push_back(maxScoreIndices[i]);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  boxIndices.push_back(box);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="comment">// Perform NMS on max scores</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  std::vector<unsigned int> 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>  desc.m_NmsScoreThreshold,</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  desc.m_MaxDetections,</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  desc.m_NmsIouThreshold);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numSelected = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>>(selectedIndices.size());</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <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> </div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <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>  boxIndices, maxScoreClasses, maxScores,</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  detectionBoxes, detectionScores, detectionClasses, numDetections);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  }</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> }</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< unsigned int > 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 &&...)</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< float > &boxCorners, const std::vector< unsigned int > &outputIndices, const std::vector< unsigned int > &selectedBoxes, const std::vector< unsigned int > &selectedClasses, const std::vector< float > &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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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< unsigned int > NonMaxSuppression(unsigned int numBoxes, const std::vector< float > &boxCorners, const std::vector< float > &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">◆ </a></span>ExtractJsonObjects()</h2> +<div class="fragment"><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> {</div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <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>  </div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <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>  <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>  std::vector<float> boxCorners(boxEncodingsInfo.GetNumElements());</div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  </div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <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>  <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>  </div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numBoxes; ++i)</div> +<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  {</div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="comment">// Y</span></div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <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>  <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>  </div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  ++boxEncodings;</div> +<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  ++anchors;</div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  </div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="comment">// X</span></div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <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>  <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>  </div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  ++boxEncodings;</div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  ++anchors;</div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  </div> +<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="comment">// H</span></div> +<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <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>  <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>  </div> +<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  ++boxEncodings;</div> +<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  ++anchors;</div> +<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  </div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="comment">// W</span></div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <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>  <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>  </div> +<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  ++boxEncodings;</div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  ++anchors;</div> +<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  </div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <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>  <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>  </div> +<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <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>  <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>  </div> +<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="comment">// ymin</span></div> +<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  boxCorners[indexY] = yCentre - halfH;</div> +<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="comment">// xmin</span></div> +<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  boxCorners[indexX] = xCentre - halfW;</div> +<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="comment">// ymax</span></div> +<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  boxCorners[indexH] = yCentre + halfH;</div> +<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="comment">// xmax</span></div> +<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  boxCorners[indexW] = xCentre + halfW;</div> +<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  </div> +<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(boxCorners[indexY] < boxCorners[indexH]);</div> +<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(boxCorners[indexX] < boxCorners[indexW]);</div> +<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  }</div> +<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  </div> +<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <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>  </div> +<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="comment">// Decode scores</span></div> +<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  std::vector<float> decodedScores;</div> +<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  decodedScores.reserve(numScores);</div> +<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  </div> +<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i < numScores; ++i)</div> +<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  {</div> +<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  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>  ++scores;</div> +<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  }</div> +<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  </div> +<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="comment">// Perform Non Max Suppression.</span></div> +<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">if</span> (desc.m_UseRegularNms)</div> +<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  {</div> +<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="comment">// Perform Regular NMS.</span></div> +<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <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>  std::vector<float> classScores(numBoxes);</div> +<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  </div> +<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  std::vector<unsigned int> selectedBoxesAfterNms;</div> +<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  selectedBoxesAfterNms.reserve(numBoxes);</div> +<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  </div> +<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  std::vector<float> selectedScoresAfterNms;</div> +<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  selectedBoxesAfterNms.reserve(numScores);</div> +<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  </div> +<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  std::vector<unsigned int> selectedClasses;</div> +<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  </div> +<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < desc.m_NumClasses; ++c)</div> +<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  {</div> +<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numBoxes; ++i)</div> +<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  {</div> +<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  classScores[i] = decodedScores[i * numClassesWithBg + c + 1];</div> +<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  }</div> +<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  std::vector<unsigned int> selectedIndices = <a class="code" href="namespacearmnn.xhtml#ac8c641d4a69c9a85c487cfbc7ea4d73c">NonMaxSuppression</a>(numBoxes,</div> +<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  boxCorners,</div> +<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  classScores,</div> +<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  desc.m_NmsScoreThreshold,</div> +<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  desc.m_DetectionsPerClass,</div> +<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  desc.m_NmsIouThreshold);</div> +<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  </div> +<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < selectedIndices.size(); ++i)</div> +<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  {</div> +<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  selectedBoxesAfterNms.push_back(selectedIndices[i]);</div> +<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  selectedScoresAfterNms.push_back(classScores[selectedIndices[i]]);</div> +<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  selectedClasses.push_back(c);</div> +<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  }</div> +<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  }</div> +<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  </div> +<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <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>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numSelected = armnn::numeric_cast<unsigned int>(selectedBoxesAfterNms.size());</div> +<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <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>  </div> +<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <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>  std::vector<unsigned int> outputIndices = <a class="code" href="namespacearmnn.xhtml#ae8ed5c640761fb6744aec0ee16388417">GenerateRangeK</a>(numSelected);</div> +<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <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>  </div> +<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <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>  selectedBoxesAfterNms, selectedClasses, selectedScoresAfterNms,</div> +<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  detectionBoxes, detectionScores, detectionClasses, numDetections);</div> +<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  }</div> +<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  {</div> +<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="comment">// Perform Fast NMS.</span></div> +<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <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>  <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>  <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>  std::vector<float> maxScores;</div> +<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  std::vector<unsigned int>boxIndices;</div> +<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  std::vector<unsigned int>maxScoreClasses;</div> +<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  </div> +<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> box = 0; box < numBoxes; ++box)</div> +<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  {</div> +<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <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>  </div> +<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="comment">// Get the max scores of the box.</span></div> +<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  std::vector<unsigned int> 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>  <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>  decodedScores.data() + scoreIndex, desc.m_NumClasses);</div> +<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  </div> +<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numClassesPerBox; ++i)</div> +<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  {</div> +<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  maxScores.push_back(decodedScores[scoreIndex + maxScoreIndices[i]]);</div> +<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  maxScoreClasses.push_back(maxScoreIndices[i]);</div> +<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  boxIndices.push_back(box);</div> +<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  }</div> +<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  }</div> +<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  </div> +<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="comment">// Perform NMS on max scores</span></div> +<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  std::vector<unsigned int> 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>  desc.m_NmsScoreThreshold,</div> +<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  desc.m_MaxDetections,</div> +<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  desc.m_NmsIouThreshold);</div> +<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  </div> +<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numSelected = armnn::numeric_cast<unsigned int>(selectedIndices.size());</div> +<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <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>  </div> +<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <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>  boxIndices, maxScoreClasses, maxScores,</div> +<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  detectionBoxes, detectionScores, detectionClasses, numDetections);</div> +<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  }</div> +<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> }</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< IType >::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">◆ </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< const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *, std::vector< const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *>> </td> + <td class="paramtype">std::map< const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *, std::vector< const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> * >> </td> <td class="paramname"><em>descendantsMap</em> </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> {</div> +<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <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>  </div> +<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="comment">// If profiling GUID is entered, process it</span></div> +<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">if</span> (parentEvent->GetProfilingGuid().has_value())</div> +<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  {</div> +<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  arm::pipe::ProfilingGuid profilingGuid;</div> +<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  profilingGuid = parentEvent->GetProfilingGuid().value();</div> +<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  parentObject.SetGuid(profilingGuid);</div> +<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  }</div> +<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  std::vector<Measurement> instrumentMeasurements = parentEvent->GetMeasurements();</div> +<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <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>  <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>  <span class="keywordflow">if</span> (inferenceIndex > 0)</div> +<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  {</div> +<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> &i: parentEvent->GetInstruments())</div> +<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  {</div> +<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">if</span> (i->HasKernelMeasurements())</div> +<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  {</div> +<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  numSkippedKernels = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(parentObject.m_Children.size() -</div> +<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  instrumentMeasurements.size());</div> +<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  childIdx = numSkippedKernels;</div> +<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div> +<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div> +<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  }</div> +<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  </div> +<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> measurementIndex = 0; measurementIndex < instrumentMeasurements.size(); ++measurementIndex, ++childIdx)</div> +<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  {</div> +<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keywordflow">if</span> (inferenceIndex == 0)</div> +<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  {</div> +<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <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>  JsonChildObject measurementObject{ instrumentMeasurements[measurementIndex].m_Name };</div> +<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  measurementObject.SetUnit(instrumentMeasurements[measurementIndex].m_Unit);</div> +<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  measurementObject.SetType(JsonObjectType::Measurement);</div> +<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  </div> +<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <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>  parentObject.AddChild(measurementObject);</div> +<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  }</div> +<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  {</div> +<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">if</span> (numSkippedKernels > 0)</div> +<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  {</div> +<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  parentObject.GetChild(--numSkippedKernels).AddMeasurement(0.0);</div> +<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  }</div> +<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  }</div> +<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  </div> +<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  parentObject.GetChild(childIdx).AddMeasurement(instrumentMeasurements[measurementIndex].m_Value);</div> +<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  }</div> +<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  </div> +<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">auto</span> childEventsIt = descendantsMap.find(parentEvent);</div> +<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">if</span> (childEventsIt != descendantsMap.end())</div> +<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  {</div> +<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> childEvent : childEventsIt->second)</div> +<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  {</div> +<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keywordflow">if</span> (inferenceIndex == 0)</div> +<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  {</div> +<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <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>  JsonChildObject childObject{ childEvent->GetName() };</div> +<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  childObject.SetType(JsonObjectType::Event);</div> +<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  parentObject.AddChild(childObject);</div> +<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  }</div> +<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  </div> +<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="comment">// It's possible that childIdx can overrun the parents' child vector. Check before we try to process a</span></div> +<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="comment">// non-existent child.</span></div> +<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keywordflow">if</span> (childIdx < parentObject.NumChildren())</div> +<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  {</div> +<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="comment">// Recursively process children.</span></div> +<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <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>  childIdx++;</div> +<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  }</div> +<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div> +<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  }</div> +<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> }</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< IsReference, T >::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> {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <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> </div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="comment">// If profiling GUID is entered, process it</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">if</span> (parentEvent->GetProfilingGuid().has_value())</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  arm::pipe::ProfilingGuid profilingGuid;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  profilingGuid = parentEvent->GetProfilingGuid().value();</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  parentObject.SetGuid(profilingGuid);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  std::vector<Measurement> instrumentMeasurements = parentEvent->GetMeasurements();</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <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>  <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>  <span class="keywordflow">if</span> (inferenceIndex > 0)</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> &i: parentEvent->GetInstruments())</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  {</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">if</span> (i->HasKernelMeasurements())</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  {</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  numSkippedKernels = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(parentObject.m_Children.size() -</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  instrumentMeasurements.size());</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  childIdx = numSkippedKernels;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  }</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> measurementIndex = 0; measurementIndex < instrumentMeasurements.size(); ++measurementIndex, ++childIdx)</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  {</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keywordflow">if</span> (inferenceIndex == 0)</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  {</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <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>  JsonChildObject measurementObject{ instrumentMeasurements[measurementIndex].m_Name };</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  measurementObject.SetUnit(instrumentMeasurements[measurementIndex].m_Unit);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  measurementObject.SetType(JsonObjectType::Measurement);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <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>  parentObject.AddChild(measurementObject);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  }</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  {</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">if</span> (numSkippedKernels > 0)</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  parentObject.GetChild(--numSkippedKernels).AddMeasurement(0.0);</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  }</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  }</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  parentObject.GetChild(childIdx).AddMeasurement(instrumentMeasurements[measurementIndex].m_Value);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  }</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">auto</span> childEventsIt = descendantsMap.find(parentEvent);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">if</span> (childEventsIt != descendantsMap.end())</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> childEvent : childEventsIt->second)</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  {</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keywordflow">if</span> (inferenceIndex == 0)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <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>  JsonChildObject childObject{ childEvent->GetName() };</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  childObject.SetType(JsonObjectType::Event);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  parentObject.AddChild(childObject);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  }</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="comment">// It's possible that childIdx can overrun the parents' child vector. Check before we try to process a</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="comment">// non-existent child.</span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keywordflow">if</span> (childIdx < parentObject.NumChildren())</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  {</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="comment">// Recursively process children.</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <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>  childIdx++;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  }</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span> }</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 &parentObject, std::map< const Event *, std::vector< const Event *>> 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> {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keywordtype">float</span> scale = (max - min) / 255.f;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  int32_t offset = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><int32_t>((-min * 255.f) / (max - min));</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">for</span> (uint32_t i = 0; i < numElements; i++)</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  outputData[i] = <span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(armnn::Quantize<uint8_t>(inputData[i], scale, offset));</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  }</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keywordtype">float</span> scale = (max - min) / 255.f;</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  int32_t offset = armnn::numeric_cast<int32_t>((-min * 255.f) / (max - min));</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  </div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">for</span> (uint32_t i = 0; i < numElements; i++)</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  {</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  outputData[i] = <span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(armnn::Quantize<uint8_t>(inputData[i], scale, offset));</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  }</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</div> </div><!-- fragment --> </div> </div> -<a id="a6e64aab48baba12883c73e90bfd07e77"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a6e64aab48baba12883c73e90bfd07e77">◆ </a></span>FalseFunc()</h2> +<a id="a589f726622788501df0463460dac63c1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a589f726622788501df0463460dac63c1">◆ </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>< std::string &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::string & > </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> {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(reasonIfUnsupported);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> }</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 &&...)</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> {</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(reasonIfUnsupported);</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> }</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">◆ </a></span>FalseFuncF16()</h2> +<a id="a9b083e0201523891e08a2d86405c4e46"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9b083e0201523891e08a2d86405c4e46">◆ </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>< std::string &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::string & > </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> {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <a class="code" href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">"Layer is not supported with float16 data type"</span>);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</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 &&...)</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< T &> optionalRef, V &&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> {</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <a class="code" href="namespacearmnn.xhtml#a8c88a8a91827e9ccc3cf3ce6b14fcd17">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">"Layer is not supported with float16 data type"</span>);</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</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">◆ </a></span>FalseFuncF32()</h2> +<a id="a5b1231d5607d2dc1909c1cec828ba415"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5b1231d5607d2dc1909c1cec828ba415">◆ </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>< std::string &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::string & > </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> {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">"Layer is not supported with float32 data type"</span>);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</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 &&...)</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< T &> optionalRef, V &&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> {</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="namespacearmnn.xhtml#a8c88a8a91827e9ccc3cf3ce6b14fcd17">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">"Layer is not supported with float32 data type"</span>);</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</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">◆ </a></span>FalseFuncI32()</h2> +<a id="a7560a9e76988007d33039df264aeed3f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7560a9e76988007d33039df264aeed3f">◆ </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>< std::string &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::string & > </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> {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">"Layer is not supported with int32 data type"</span>);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</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 &&...)</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< T &> optionalRef, V &&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> {</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="namespacearmnn.xhtml#a8c88a8a91827e9ccc3cf3ce6b14fcd17">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">"Layer is not supported with int32 data type"</span>);</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</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">◆ </a></span>FalseFuncU8()</h2> +<a id="ae5039794f89bfaf2ebbe28fd35a815cf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae5039794f89bfaf2ebbe28fd35a815cf">◆ </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>< std::string &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::string & > </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> {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <a class="code" href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">"Layer is not supported with 8-bit data type"</span>);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> }</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 &&...)</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< T &> optionalRef, V &&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> {</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <a class="code" href="namespacearmnn.xhtml#a8c88a8a91827e9ccc3cf3ce6b14fcd17">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">"Layer is not supported with 8-bit data type"</span>);</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> }</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">◆ </a></span>FalseInputFuncF16()</h2> +<a id="a8cd64bd8701401fe3dda7eab78011d8a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8cd64bd8701401fe3dda7eab78011d8a">◆ </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>< std::string &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::string & > </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> {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="code" href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">"Layer is not supported with float16 data type input"</span>);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> }</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 &&...)</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< T &> optionalRef, V &&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> {</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="code" href="namespacearmnn.xhtml#a8c88a8a91827e9ccc3cf3ce6b14fcd17">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">"Layer is not supported with float16 data type input"</span>);</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> }</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">◆ </a></span>FalseInputFuncF32()</h2> +<a id="a59aa54d3652ffbef6793f6447314cbd0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a59aa54d3652ffbef6793f6447314cbd0">◆ </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>< std::string &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::string & > </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> {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">"Layer is not supported with float32 data type input"</span>);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</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 &&...)</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< T &> optionalRef, V &&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> {</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="namespacearmnn.xhtml#a8c88a8a91827e9ccc3cf3ce6b14fcd17">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">"Layer is not supported with float32 data type input"</span>);</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</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">◆ </a></span>FalseOutputFuncF16()</h2> +<a id="abc2b8312f25f2daa3cc277f1307b2067"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abc2b8312f25f2daa3cc277f1307b2067">◆ </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>< std::string &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::string & > </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> {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <a class="code" href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">"Layer is not supported with float16 data type output"</span>);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</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 &&...)</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< T &> optionalRef, V &&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> {</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <a class="code" href="namespacearmnn.xhtml#a8c88a8a91827e9ccc3cf3ce6b14fcd17">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">"Layer is not supported with float16 data type output"</span>);</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</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">◆ </a></span>FalseOutputFuncF32()</h2> +<a id="a55cbb728001f752173f5d4e34a874e83"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a55cbb728001f752173f5d4e34a874e83">◆ </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>< std::string &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::string & > </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> {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">"Layer is not supported with float32 data type output"</span>);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</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 &&...)</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< T &> optionalRef, V &&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> {</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="namespacearmnn.xhtml#a8c88a8a91827e9ccc3cf3ce6b14fcd17">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">"Layer is not supported with float32 data type output"</span>);</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</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< IType >::Set()</a>.</p> -<div class="fragment"><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> {</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < desiredOutputShape.GetNumElements(); ++i)</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  output[i];</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  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>  }</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> }</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> {</div> +<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < desiredOutputShape.GetNumElements(); ++i)</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  {</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  output[i];</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  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>  }</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> }</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< IType >::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> {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  std::vector<Measurement> measurements;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// Search through the measurements.</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>& measurement : event->GetMeasurements())</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">if</span> (measurement.m_Name.rfind(<span class="stringliteral">"OpenClKernelTimer"</span>, 0) == 0</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  || measurement.m_Name.rfind(<span class="stringliteral">"NeonKernelTimer"</span>, 0) == 0)</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="comment">// Measurement found.</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  measurements.push_back(measurement);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> measurements;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</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> {</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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>  </div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  std::vector<Measurement> measurements;</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  </div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// Search through the measurements.</span></div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>& measurement : event->GetMeasurements())</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  {</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">if</span> (measurement.m_Name.rfind(<span class="stringliteral">"OpenClKernelTimer"</span>, 0) == 0</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  || measurement.m_Name.rfind(<span class="stringliteral">"NeonKernelTimer"</span>, 0) == 0)</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  {</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="comment">// Measurement found.</span></div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  measurements.push_back(measurement);</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  }</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  </div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> measurements;</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</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> {</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  </div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <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>  </div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="comment">// Search though the measurements.</span></div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>& measurement : event->GetMeasurements())</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  {</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">if</span> (measurement.m_Name == name)</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="comment">// Measurement found.</span></div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">return</span> measurement;</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  </div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="comment">// Measurement not found.</span></div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975">Measurement</a>{ <span class="stringliteral">""</span>, 0.f, Measurement::Unit::TIME_MS };</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> }</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> {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <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> </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="comment">// Search though the measurements.</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>& measurement : event->GetMeasurements())</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">if</span> (measurement.m_Name == name)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="comment">// Measurement found.</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">return</span> measurement;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="comment">// Measurement not found.</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975">Measurement</a>{ <span class="stringliteral">""</span>, 0.f, Measurement::Unit::TIME_MS };</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> }</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>  {</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  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> }</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>  {</div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  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> }</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>  {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  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> }</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>  {</div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  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> }</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> {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  IConnectableLayer* replacement =</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  optimizationViews.GetINetwork()->AddPooling2dLayer(poolDescriptor, <span class="stringliteral">"folded-pad-into-pool2d"</span>);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <a class="code" href="namespacearmnn.xhtml#ae4b69405416c09ee6878e01d27c9450b">FoldPadLayer</a>(optimizationViews,</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  baseLayer,</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  replacementLayer,</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  padLayer);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> }</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 &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> {</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  IConnectableLayer* replacement =</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  optimizationViews.GetINetwork()->AddPooling2dLayer(poolDescriptor, <span class="stringliteral">"folded-pad-into-pool2d"</span>);</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  </div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <a class="code" href="namespacearmnn.xhtml#ae4b69405416c09ee6878e01d27c9450b">FoldPadLayer</a>(optimizationViews,</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  baseLayer,</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  replacementLayer,</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  padLayer);</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  </div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">return</span> replacementLayer;</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> }</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> {</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  SubgraphView substitutionSubgraph({padLayer, baseLayer},</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  CreateIInputsFrom({padLayer}),</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  CreateIOutputsFrom({baseLayer}));</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  SubgraphView replacementSubgraph(replacementLayer);</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  </div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  </div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">return</span> replacementLayer;</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</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> {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  SubgraphView substitutionSubgraph({padLayer, baseLayer},</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  CreateIInputsFrom({padLayer}),</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  CreateIOutputsFrom({baseLayer}));</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  SubgraphView replacementSubgraph(replacementLayer);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</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> {</div> +<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  Layer& layer = *PolymorphicDowncast<Layer*>(layerInfo.m_Layer);</div> +<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  </div> +<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <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>  {</div> +<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keyword">auto</span> connectedInput = PolymorphicDowncast<OutputSlot*>(inputSlot.GetConnection());</div> +<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(connectedInput, <span class="stringliteral">"Dangling input slot detected."</span>);</div> +<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  Layer& inputLayer = connectedInput->GetOwningLayer();</div> +<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  </div> +<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keyword">auto</span> parentInfo = layerInfos.find(&inputLayer);</div> +<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">if</span> (parentInfo != layerInfos.end())</div> +<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  {</div> +<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keyword">function</span>(parentInfo->second);</div> +<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  }</div> +<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  }</div> +<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> }</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> {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  Layer& layer = *PolymorphicDowncast<Layer*>(layerInfo.m_Layer);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <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>  {</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keyword">auto</span> connectedInput = PolymorphicDowncast<OutputSlot*>(inputSlot.GetConnection());</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(connectedInput, <span class="stringliteral">"Dangling input slot detected."</span>);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  Layer& inputLayer = connectedInput->GetOwningLayer();</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keyword">auto</span> parentInfo = layerInfos.find(&inputLayer);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">if</span> (parentInfo != layerInfos.end())</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keyword">function</span>(parentInfo->second);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  }</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> }</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> {</div> +<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  Layer& layer = *PolymorphicDowncast<Layer*>(layerInfo.m_Layer);</div> +<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  </div> +<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>& outputSlot : layer.GetOutputSlots())</div> +<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  {</div> +<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>& output : outputSlot.GetConnections())</div> +<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  {</div> +<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  Layer& childLayer = output->GetOwningLayer();</div> +<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  </div> +<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keyword">auto</span> childInfo = layerInfos.find(&childLayer);</div> +<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="keywordflow">if</span> (childInfo != layerInfos.end())</div> +<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  {</div> +<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keyword">function</span>(childInfo->second);</div> +<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  }</div> +<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  }</div> +<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  }</div> +<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> }</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> {</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  Layer& layer = *PolymorphicDowncast<Layer*>(layerInfo.m_Layer);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>& outputSlot : layer.GetOutputSlots())</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>& output : outputSlot.GetConnections())</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  Layer& childLayer = output->GetOwningLayer();</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keyword">auto</span> childInfo = layerInfos.find(&childLayer);</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="keywordflow">if</span> (childInfo != layerInfos.end())</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keyword">function</span>(childInfo->second);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  }</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> }</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< IType >::DecodeTensor()</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder< IType >::Set()</a>.</p> -<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="comment">// Perform FullyConnected implementation</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">const</span> std::vector<float> 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>  <span class="keyword">const</span> std::vector<float> 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> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">const</span> TensorShape biasShape{outputSize};</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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>  <span class="keyword">const</span> std::vector<float> decodedBiases = biasEnabled ? pBiasDecoder-><a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(biasShape) : std::vector<float>();</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n = 0; n < rInputShape[0]; n++)</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelOutput = 0; channelOutput < outputSize; channelOutput++)</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  {</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordtype">float</span> outval = 0.f;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelInput = 0; channelInput < K; channelInput++)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordtype">float</span> weight;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">if</span> (transposeWeights)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  weight = decodedWeights[channelOutput * K + channelInput];</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  }</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  weight = decodedWeights[channelInput * outputSize + channelOutput];</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  outval += weight * decodedInputs[n * K + channelInput];</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">if</span> (biasEnabled)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  outval += decodedBiases[channelOutput];</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  rOutputEncoder[n * outputSize + channelOutput];</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  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>  }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> }</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< float > DecodeTensor(const TensorShape &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> {</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="comment">// Perform FullyConnected implementation</span></div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  </div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">const</span> std::vector<float> 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>  <span class="keyword">const</span> std::vector<float> 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>  </div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">const</span> TensorShape biasShape{outputSize};</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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>  <span class="keyword">const</span> std::vector<float> decodedBiases = biasEnabled ? pBiasDecoder-><a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(biasShape) : std::vector<float>();</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  </div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n = 0; n < rInputShape[0]; n++)</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelOutput = 0; channelOutput < outputSize; channelOutput++)</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  {</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordtype">float</span> outval = 0.f;</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelInput = 0; channelInput < K; channelInput++)</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  {</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordtype">float</span> weight;</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">if</span> (transposeWeights)</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  {</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  weight = decodedWeights[channelOutput * K + channelInput];</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  }</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  weight = decodedWeights[channelInput * outputSize + channelOutput];</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  }</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  </div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  outval += weight * decodedInputs[n * K + channelInput];</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  }</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  </div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">if</span> (biasEnabled)</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  outval += decodedBiases[channelOutput];</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  </div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  rOutputEncoder[n * outputSize + channelOutput];</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  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>  }</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> }</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< IType >::DecodeTensor()</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder< IType >::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> {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  IConnectableLayer* replacement = optimizationViews.GetINetwork()->AddAdditionLayer(name.c_str());</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  baseLayer,</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  replacementLayer,</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  activationLayer,</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  activationDesc);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</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 &optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &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> {</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  IConnectableLayer* replacement = optimizationViews.GetINetwork()->AddAdditionLayer(name.c_str());</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  </div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  baseLayer,</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  replacementLayer,</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  activationLayer,</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  activationDesc);</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  </div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">return</span> replacementLayer;</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</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> {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  IConnectableLayer* replacement =</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  optimizationViews.GetINetwork()->AddBatchNormalizationLayer(baseLayer->GetParameters(),</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  ConstTensor(),</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  ConstTensor(),</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  ConstTensor(),</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  ConstTensor(),</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  name.c_str());</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  baseLayer,</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  replacementLayer,</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  activationLayer,</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  activationDesc);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  SubgraphView substitutionSubgraph({baseLayer, activationLayer},</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  CreateIInputsFrom({baseLayer}),</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  CreateIOutputsFrom({activationLayer}));</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  SubgraphView replacementSubgraph(replacementLayer);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> }</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 &optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &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> {</div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  IConnectableLayer* replacement =</div> +<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  optimizationViews.GetINetwork()->AddBatchNormalizationLayer(baseLayer->GetParameters(),</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  ConstTensor(),</div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  ConstTensor(),</div> +<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  ConstTensor(),</div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  ConstTensor(),</div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  name.c_str());</div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div> +<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  </div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div> +<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  baseLayer,</div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  replacementLayer,</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  activationLayer,</div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  activationDesc);</div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  </div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  SubgraphView substitutionSubgraph({baseLayer, activationLayer},</div> +<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  CreateIInputsFrom({baseLayer}),</div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  CreateIOutputsFrom({activationLayer}));</div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  SubgraphView replacementSubgraph(replacementLayer);</div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  </div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">return</span> replacementLayer;</div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> }</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> {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  IConnectableLayer* replacement = optimizationViews.GetINetwork()</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  ->AddConvolution2dLayer(baseLayer->GetParameters(), name.c_str());</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  baseLayer,</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  replacementLayer,</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  activationLayer,</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  activationDesc);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</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 &optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &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> {</div> +<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  IConnectableLayer* replacement = optimizationViews.GetINetwork()</div> +<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  ->AddConvolution2dLayer(baseLayer->GetParameters(), name.c_str());</div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  </div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div> +<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  </div> +<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  </div> +<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  baseLayer,</div> +<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  replacementLayer,</div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  activationLayer,</div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  activationDesc);</div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  </div> +<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">return</span> replacementLayer;</div> +<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</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> {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  IConnectableLayer* replacement =</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  optimizationViews.GetINetwork()->AddDepthwiseConvolution2dLayer(baseLayer->GetParameters(), name.c_str());</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  baseLayer,</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  replacementLayer,</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  activationLayer,</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  activationDesc);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> }</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 &optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &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> {</div> +<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  IConnectableLayer* replacement =</div> +<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  optimizationViews.GetINetwork()->AddDepthwiseConvolution2dLayer(baseLayer->GetParameters(), name.c_str());</div> +<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  </div> +<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div> +<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  </div> +<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  </div> +<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div> +<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  baseLayer,</div> +<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  replacementLayer,</div> +<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  activationLayer,</div> +<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  activationDesc);</div> +<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  </div> +<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">return</span> replacementLayer;</div> +<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> }</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> {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  IConnectableLayer* replacement = optimizationViews.GetINetwork()->AddDivisionLayer(name.c_str());</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  baseLayer,</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  replacementLayer,</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  activationLayer,</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  activationDesc);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> }</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 &optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &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> {</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  IConnectableLayer* replacement = optimizationViews.GetINetwork()->AddDivisionLayer(name.c_str());</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  </div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  baseLayer,</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  replacementLayer,</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  activationLayer,</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  activationDesc);</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  </div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">return</span> replacementLayer;</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> }</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> {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  IConnectableLayer* replacement =</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  optimizationViews.GetINetwork()->AddFullyConnectedLayer(baseLayer->GetParameters(),</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  name.c_str());</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  baseLayer,</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  replacementLayer,</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  activationLayer,</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  activationDesc);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> }</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 &optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &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> {</div> +<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  IConnectableLayer* replacement =</div> +<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  optimizationViews.GetINetwork()->AddFullyConnectedLayer(baseLayer->GetParameters(),</div> +<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  name.c_str());</div> +<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div> +<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  </div> +<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div> +<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  baseLayer,</div> +<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  replacementLayer,</div> +<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  activationLayer,</div> +<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  activationDesc);</div> +<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  </div> +<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  </div> +<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">return</span> replacementLayer;</div> +<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> }</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> {</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  replacementLayer->SetAdditionalInfoForObject(</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  std::make_shared<ActivationDescriptor>(activationDesc));</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  </div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  SubgraphView substitutionSubgraph({baseLayer, activationLayer},</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  CreateIInputsFrom({baseLayer}),</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  CreateIOutputsFrom({activationLayer}));</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  SubgraphView replacementSubgraph(replacementLayer);</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  </div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  </div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> replacementLayer;</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</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> {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  replacementLayer->SetAdditionalInfoForObject(</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  std::make_shared<ActivationDescriptor>(activationDesc));</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  SubgraphView substitutionSubgraph({baseLayer, activationLayer},</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  CreateIInputsFrom({baseLayer}),</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  CreateIOutputsFrom({activationLayer}));</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  SubgraphView replacementSubgraph(replacementLayer);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</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> {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  IConnectableLayer* replacement = optimizationViews.GetINetwork()->AddMultiplicationLayer(name.c_str());</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  baseLayer,</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  replacementLayer,</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  activationLayer,</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  activationDesc);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</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 &optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &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> {</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  IConnectableLayer* replacement = optimizationViews.GetINetwork()->AddMultiplicationLayer(name.c_str());</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  </div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  baseLayer,</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  replacementLayer,</div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  activationLayer,</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  activationDesc);</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  </div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> replacementLayer;</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</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> {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  IConnectableLayer* replacement = optimizationViews.GetINetwork()->AddSubtractionLayer(name.c_str());</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  baseLayer,</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  replacementLayer,</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  activationLayer,</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  activationDesc);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</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 &optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &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> {</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  IConnectableLayer* replacement = optimizationViews.GetINetwork()->AddSubtractionLayer(name.c_str());</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  </div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  baseLayer,</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  replacementLayer,</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  activationLayer,</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  activationDesc);</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  </div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">return</span> replacementLayer;</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</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< IType >::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< IType >::Set()</a>.</p> -<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(outputInfo);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> paramsRank = <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(paramsInfo.GetNumDimensions());</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(-1 * paramsRank <= axis_int && axis_int < paramsRank);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axis = (axis_int < 0) ? static_cast<unsigned int>(paramsRank + axis_int)</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  : static_cast<unsigned int>(axis_int);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">const</span> TensorShape& paramsShape = paramsInfo.GetShape();</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < axis; ++i)</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  paramsOuterProduct *= paramsShape[i];</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  }</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> k = 1 + axis; k < paramsInfo.GetNumDimensions(); ++k)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  paramsInnerProduct *= paramsShape[k];</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < paramsOuterProduct; ++i)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j < indicesInfo.GetNumElements(); ++j)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>>(indices[j]);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(indices[j] >= 0 && index < paramsShape[axis]);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <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>  <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> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> k = startOffset; k < endOffset; ++k)</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  params[k];</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <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>  output[outIndex];</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  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>  ++outIndex;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  offset += paramsShape[axis] * paramsInnerProduct;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <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> }</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 &&...)</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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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">◆ </a></span>GatherTensorHandlePairs()</h2> +<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(outputInfo);</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> paramsRank = <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(paramsInfo.GetNumDimensions());</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(-1 * paramsRank <= axis_int && axis_int < paramsRank);</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axis = (axis_int < 0) ? static_cast<unsigned int>(paramsRank + axis_int)</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  : static_cast<unsigned int>(axis_int);</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">const</span> TensorShape& paramsShape = paramsInfo.GetShape();</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < axis; ++i)</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  {</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  paramsOuterProduct *= paramsShape[i];</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  }</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> k = 1 + axis; k < paramsInfo.GetNumDimensions(); ++k)</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  paramsInnerProduct *= paramsShape[k];</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < paramsOuterProduct; ++i)</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  {</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j < indicesInfo.GetNumElements(); ++j)</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  {</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = armnn::numeric_cast<unsigned int>(indices[j]);</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(indices[j] >= 0 && index < paramsShape[axis]);</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  </div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <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>  <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>  </div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> k = startOffset; k < endOffset; ++k)</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  {</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  params[k];</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <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>  output[outIndex];</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  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>  ++outIndex;</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  }</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  offset += paramsShape[axis] * paramsInnerProduct;</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  </div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <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> }</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< IType >::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< IType >::Set()</a>.</p> + +</div> +</div> +<a id="a844d7fa4dde82e1c6b0606e1c68890bb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a844d7fa4dde82e1c6b0606e1c68890bb">◆ </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< std::pair< SrcTensorHandleType *, DstTensorHandleType *>> & </td> + <td class="paramtype">std::vector< std::pair< SrcTensorHandleType *, DstTensorHandleType * >> & </td> <td class="paramname"><em>tensorHandlePairs</em> </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> {</div> +<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputs = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(descriptor.m_Inputs.size());</div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  tensorHandlePairs.reserve(numInputs);</div> +<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  </div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numInputs; ++i)</div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  {</div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  SrcTensorHandleType* <span class="keyword">const</span> srcTensorHandle =</div> +<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  PolymorphicDowncast<SrcTensorHandleType*>(descriptor.m_Inputs[i]);</div> +<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  DstTensorHandleType* <span class="keyword">const</span> dstTensorHandle =</div> +<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  PolymorphicDowncast<DstTensorHandleType*>(descriptor.m_Outputs[i]);</div> +<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  </div> +<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  tensorHandlePairs.emplace_back(srcTensorHandle, dstTensorHandle);</div> +<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  }</div> +<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> }</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> {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputs = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(descriptor.m_Inputs.size());</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  tensorHandlePairs.reserve(numInputs);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numInputs; ++i)</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  {</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  SrcTensorHandleType* <span class="keyword">const</span> srcTensorHandle =</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  PolymorphicDowncast<SrcTensorHandleType*>(descriptor.m_Inputs[i]);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  DstTensorHandleType* <span class="keyword">const</span> dstTensorHandle =</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  PolymorphicDowncast<DstTensorHandleType*>(descriptor.m_Outputs[i]);</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  tensorHandlePairs.emplace_back(srcTensorHandle, dstTensorHandle);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> }</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> {</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <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>  <span class="keywordflow">switch</span> (rank)</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordflow">case</span> 2:</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  permutationVector = {1U, 0U};</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordflow">case</span> 3:</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  permutationVector = {0U, 2U, 1U};</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordflow">case</span> 4:</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  permutationVector = {0U, 1U, 3U, 2U};</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keywordflow">throw</span> Exception(<span class="stringliteral">"Invalid number of dimensions."</span>);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keywordflow">return</span> permutationVector;</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> }</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> {</div> +<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <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>  <span class="keywordflow">switch</span> (rank)</div> +<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  {</div> +<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordflow">case</span> 2:</div> +<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  permutationVector = {1U, 0U};</div> +<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordflow">case</span> 3:</div> +<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  permutationVector = {0U, 2U, 1U};</div> +<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordflow">case</span> 4:</div> +<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  permutationVector = {0U, 1U, 3U, 2U};</div> +<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keywordflow">throw</span> Exception(<span class="stringliteral">"Invalid number of dimensions."</span>);</div> +<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div> +<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keywordflow">return</span> permutationVector;</div> +<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> }</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> {</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  std::vector<unsigned int> range(k);</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  std::iota(range.begin(), range.end(), 0);</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keywordflow">return</span> range;</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> }</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> {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  std::vector<unsigned int> range(k);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  std::iota(range.begin(), range.end(), 0);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keywordflow">return</span> range;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> }</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> {</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">switch</span> (activation)</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  {</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">case</span> ActivationFunction::Sigmoid: <span class="keywordflow">return</span> <span class="stringliteral">"Sigmoid"</span>;</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">case</span> ActivationFunction::TanH: <span class="keywordflow">return</span> <span class="stringliteral">"TanH"</span>;</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">case</span> ActivationFunction::Linear: <span class="keywordflow">return</span> <span class="stringliteral">"Linear"</span>;</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">case</span> ActivationFunction::ReLu: <span class="keywordflow">return</span> <span class="stringliteral">"ReLu"</span>;</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">case</span> ActivationFunction::BoundedReLu: <span class="keywordflow">return</span> <span class="stringliteral">"BoundedReLu"</span>;</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">case</span> ActivationFunction::SoftReLu: <span class="keywordflow">return</span> <span class="stringliteral">"SoftReLu"</span>;</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">case</span> ActivationFunction::LeakyReLu: <span class="keywordflow">return</span> <span class="stringliteral">"LeakyReLu"</span>;</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">case</span> ActivationFunction::Abs: <span class="keywordflow">return</span> <span class="stringliteral">"Abs"</span>;</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">case</span> ActivationFunction::Sqrt: <span class="keywordflow">return</span> <span class="stringliteral">"Sqrt"</span>;</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">case</span> ActivationFunction::Square: <span class="keywordflow">return</span> <span class="stringliteral">"Square"</span>;</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">case</span> ActivationFunction::Elu: <span class="keywordflow">return</span> <span class="stringliteral">"Elu"</span>;</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">case</span> ActivationFunction::HardSwish: <span class="keywordflow">return</span> <span class="stringliteral">"HardSwish"</span>;</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  }</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> }</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< ActivationDescriptor >::Serialize()</a>.</p> -<div class="fragment"><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> {</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">switch</span> (activation)</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">case</span> ActivationFunction::Sigmoid: <span class="keywordflow">return</span> <span class="stringliteral">"Sigmoid"</span>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">case</span> ActivationFunction::TanH: <span class="keywordflow">return</span> <span class="stringliteral">"TanH"</span>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">case</span> ActivationFunction::Linear: <span class="keywordflow">return</span> <span class="stringliteral">"Linear"</span>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">case</span> ActivationFunction::ReLu: <span class="keywordflow">return</span> <span class="stringliteral">"ReLu"</span>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">case</span> ActivationFunction::BoundedReLu: <span class="keywordflow">return</span> <span class="stringliteral">"BoundedReLu"</span>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">case</span> ActivationFunction::SoftReLu: <span class="keywordflow">return</span> <span class="stringliteral">"SoftReLu"</span>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">case</span> ActivationFunction::LeakyReLu: <span class="keywordflow">return</span> <span class="stringliteral">"LeakyReLu"</span>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">case</span> ActivationFunction::Abs: <span class="keywordflow">return</span> <span class="stringliteral">"Abs"</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">case</span> ActivationFunction::Sqrt: <span class="keywordflow">return</span> <span class="stringliteral">"Sqrt"</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">case</span> ActivationFunction::Square: <span class="keywordflow">return</span> <span class="stringliteral">"Square"</span>;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">case</span> ActivationFunction::Elu: <span class="keywordflow">return</span> <span class="stringliteral">"Elu"</span>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">case</span> ActivationFunction::HardSwish: <span class="keywordflow">return</span> <span class="stringliteral">"HardSwish"</span>;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> }</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> {</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">switch</span> (<span class="keyword">function</span>)</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  {</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">case</span> ArgMinMaxFunction::Max: <span class="keywordflow">return</span> <span class="stringliteral">"Max"</span>;</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">case</span> ArgMinMaxFunction::Min: <span class="keywordflow">return</span> <span class="stringliteral">"Min"</span>;</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  }</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</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> {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">switch</span> (<span class="keyword">function</span>)</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">case</span> ArgMinMaxFunction::Max: <span class="keywordflow">return</span> <span class="stringliteral">"Max"</span>;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">case</span> ArgMinMaxFunction::Min: <span class="keywordflow">return</span> <span class="stringliteral">"Min"</span>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</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< std::is_reference< T >::value, T >::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> {</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">switch</span> (inputDataType)</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  {</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">case</span> DataType::Float16:</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">return</span> DataType::Float16;</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">case</span> DataType::BFloat16:</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">case</span> DataType::Float32:</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">return</span> DataType::Float32;</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">case</span> DataType::QAsymmS8:</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">return</span> DataType::Signed32;</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">case</span> DataType::QAsymmU8:</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">return</span> DataType::Signed32;</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">return</span> DataType::Signed32;</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">case</span> DataType::QSymmS16:</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">return</span> DataType::Signed32;</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"Invalid input data type"</span>);</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">return</span> DataType::Float32;</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  }</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> }</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> {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">switch</span> (inputDataType)</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">case</span> DataType::Float16:</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">return</span> DataType::Float16;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">case</span> DataType::BFloat16:</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">return</span> DataType::Float32;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">return</span> DataType::Signed32;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">return</span> DataType::Signed32;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">return</span> DataType::Signed32;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">case</span> DataType::QSymmS16:</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">return</span> DataType::Signed32;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"Invalid input data type"</span>);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">return</span> DataType::Float32;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> }</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> {</div> +<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <span class="keywordflow">if</span> (!weightsType)</div> +<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  {</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keywordflow">return</span> weightsType;</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  }</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  </div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  <span class="keywordflow">return</span> weightsType;</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <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>  <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>  <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>  <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>  <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>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"GetBiasTypeFromWeightsType(): Unsupported data type."</span>);</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  }</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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> }</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< std::is_reference< T >::value, T >::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> {</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <span class="keywordflow">if</span> (!weightsType)</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  {</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keywordflow">return</span> weightsType;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  }</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  <span class="keywordflow">return</span> weightsType;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <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>  <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>  <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>  <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>  <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>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"GetBiasTypeFromWeightsType(): Unsupported data type."</span>);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  }</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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> }</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< std::is_reference< T >::value, T >::value</a></div><div class="ttdeci">const T & 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">◆ </a></span>GetCapability() <span class="overload">[1/2]</span></h2> +<a id="a8d70f94d3f0ffb06067a66c49b2f8689"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8d70f94d3f0ffb06067a66c49b2f8689">◆ </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> & </td> - <td class="paramname"><em>capabilities</em> </td> + <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> & </td> + <td class="paramname"><em>backend</em> </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> {</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">auto</span> <span class="keyword">const</span>& backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>();</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  {</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">auto</span> backendObject = factoryFunc();</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keyword">auto</span> capabilities = backendObject->GetCapabilities();</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <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>  }</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">return</span> EmptyOptional();</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> }</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> {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i < capabilities.GetOptionCount(); i++)</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  {</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& capability = capabilities.GetOption(i);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">if</span> (backendCapabilityName == capability.GetName())</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> capability;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">return</span> EmptyOptional();</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> }</div></div><!-- fragment --> </div> </div> -<a id="a8d70f94d3f0ffb06067a66c49b2f8689"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a8d70f94d3f0ffb06067a66c49b2f8689">◆ </a></span>GetCapability() <span class="overload">[2/2]</span></h2> +<a id="a71c3bdadfe1c69aba2cbf054bff47744"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a71c3bdadfe1c69aba2cbf054bff47744">◆ </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> & </td> - <td class="paramname"><em>backend</em> </td> + <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> & </td> + <td class="paramname"><em>capabilities</em> </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> {</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">auto</span> <span class="keyword">const</span>& backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>();</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">auto</span> backendObject = factoryFunc();</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keyword">auto</span> capabilities = backendObject->GetCapabilities();</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <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>  }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">return</span> EmptyOptional();</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> }</div><div class="ttc" id="namespacearmnn_xhtml_a71c3bdadfe1c69aba2cbf054bff47744"><div class="ttname"><a href="namespacearmnn.xhtml#a71c3bdadfe1c69aba2cbf054bff47744">armnn::GetCapability</a></div><div class="ttdeci">Optional< const BackendOptions::BackendOption > GetCapability(const std::string &backendCapabilityName, const BackendCapabilities &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 & 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> {</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i < capabilities.GetOptionCount(); i++)</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  {</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& capability = capabilities.GetOption(i);</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">if</span> (backendCapabilityName == capability.GetName())</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  {</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> capability;</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  }</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  }</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">return</span> EmptyOptional();</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> }</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>  {</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">return</span> flatbuffers::GetRoot<armnn::ClContext>(buf);</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</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>  {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">return</span> flatbuffers::GetRoot<armnn::ClContext>(buf);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</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> {</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">switch</span> (operation)</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  {</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">case</span> ComparisonOperation::Equal: <span class="keywordflow">return</span> <span class="stringliteral">"Equal"</span>;</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">case</span> ComparisonOperation::Greater: <span class="keywordflow">return</span> <span class="stringliteral">"Greater"</span>;</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">case</span> ComparisonOperation::GreaterOrEqual: <span class="keywordflow">return</span> <span class="stringliteral">"GreaterOrEqual"</span>;</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">case</span> ComparisonOperation::Less: <span class="keywordflow">return</span> <span class="stringliteral">"Less"</span>;</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">case</span> ComparisonOperation::LessOrEqual: <span class="keywordflow">return</span> <span class="stringliteral">"LessOrEqual"</span>;</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">case</span> ComparisonOperation::NotEqual: <span class="keywordflow">return</span> <span class="stringliteral">"NotEqual"</span>;</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  }</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> }</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< ComparisonDescriptor >::Serialize()</a>.</p> -<div class="fragment"><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">switch</span> (operation)</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">case</span> ComparisonOperation::Equal: <span class="keywordflow">return</span> <span class="stringliteral">"Equal"</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">case</span> ComparisonOperation::Greater: <span class="keywordflow">return</span> <span class="stringliteral">"Greater"</span>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">case</span> ComparisonOperation::GreaterOrEqual: <span class="keywordflow">return</span> <span class="stringliteral">"GreaterOrEqual"</span>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">case</span> ComparisonOperation::Less: <span class="keywordflow">return</span> <span class="stringliteral">"Less"</span>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">case</span> ComparisonOperation::LessOrEqual: <span class="keywordflow">return</span> <span class="stringliteral">"LessOrEqual"</span>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">case</span> ComparisonOperation::NotEqual: <span class="keywordflow">return</span> <span class="stringliteral">"NotEqual"</span>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  }</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> }</div></div><!-- fragment --> +<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00081">StringifyLayerParameters< ComparisonDescriptor >::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> {</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">switch</span> (compute)</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a>: <span class="keywordflow">return</span> <span class="stringliteral">"CpuRef"</span>;</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a>: <span class="keywordflow">return</span> <span class="stringliteral">"CpuAcc"</span>;</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</a>: <span class="keywordflow">return</span> <span class="stringliteral">"GpuAcc"</span>;</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> }</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<<()</a>.</p> -<div class="fragment"><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">switch</span> (compute)</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a>: <span class="keywordflow">return</span> <span class="stringliteral">"CpuRef"</span>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a>: <span class="keywordflow">return</span> <span class="stringliteral">"CpuAcc"</span>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</a>: <span class="keywordflow">return</span> <span class="stringliteral">"GpuAcc"</span>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> }</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<<()</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> {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">switch</span> (convolutionMethod)</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  {</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::FFT:</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">return</span> <span class="stringliteral">"FFT"</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::DIRECT:</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Direct"</span>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::GEMM:</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">return</span> <span class="stringliteral">"GEMM"</span>;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::WINOGRAD:</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Winograd"</span>;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> {</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">switch</span> (convolutionMethod)</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  {</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::FFT:</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">return</span> <span class="stringliteral">"FFT"</span>;</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::DIRECT:</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Direct"</span>;</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::GEMM:</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">return</span> <span class="stringliteral">"GEMM"</span>;</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::WINOGRAD:</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Winograd"</span>;</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  }</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</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> {</div> +<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">switch</span> (dataLayout)</div> +<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  {</div> +<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">case</span> DataLayout::NCHW: <span class="keywordflow">return</span> <span class="stringliteral">"NCHW"</span>;</div> +<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">case</span> DataLayout::NHWC: <span class="keywordflow">return</span> <span class="stringliteral">"NHWC"</span>;</div> +<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">case</span> DataLayout::NDHWC: <span class="keywordflow">return</span> <span class="stringliteral">"NDHWC"</span>;</div> +<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">case</span> DataLayout::NCDHW: <span class="keywordflow">return</span> <span class="stringliteral">"NCDHW"</span>;</div> +<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  }</div> +<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> }</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< BatchNormalizationDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00038">StringifyLayerParameters< BatchToSpaceNdDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00087">StringifyLayerParameters< Convolution2dDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00113">StringifyLayerParameters< Convolution3dDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00163">StringifyLayerParameters< DepthwiseConvolution2dDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00216">StringifyLayerParameters< L2NormalizationDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00253">StringifyLayerParameters< NormalizationDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00321">StringifyLayerParameters< Pooling2dDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00349">StringifyLayerParameters< Pooling3dDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00426">StringifyLayerParameters< ResizeDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00444">StringifyLayerParameters< SpaceToBatchNdDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00480">StringifyLayerParameters< SpaceToDepthDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00498">StringifyLayerParameters< StridedSliceDescriptor >::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00554">StringifyLayerParameters< TransposeConvolution2dDescriptor >::Serialize()</a>.</p> -<div class="fragment"><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> {</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">switch</span> (dataLayout)</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">case</span> DataLayout::NCHW: <span class="keywordflow">return</span> <span class="stringliteral">"NCHW"</span>;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">case</span> DataLayout::NHWC: <span class="keywordflow">return</span> <span class="stringliteral">"NHWC"</span>;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">case</span> DataLayout::NDHWC: <span class="keywordflow">return</span> <span class="stringliteral">"NDHWC"</span>;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">case</span> DataLayout::NCDHW: <span class="keywordflow">return</span> <span class="stringliteral">"NCDHW"</span>;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> }</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< BatchNormalizationDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00038">StringifyLayerParameters< BatchToSpaceNdDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00087">StringifyLayerParameters< Convolution2dDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00113">StringifyLayerParameters< Convolution3dDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00163">StringifyLayerParameters< DepthwiseConvolution2dDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00216">StringifyLayerParameters< L2NormalizationDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00253">StringifyLayerParameters< NormalizationDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00321">StringifyLayerParameters< Pooling2dDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00349">StringifyLayerParameters< Pooling3dDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00426">StringifyLayerParameters< ResizeDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00444">StringifyLayerParameters< SpaceToBatchNdDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00480">StringifyLayerParameters< SpaceToDepthDescriptor >::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00498">StringifyLayerParameters< StridedSliceDescriptor >::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00554">StringifyLayerParameters< TransposeConvolution2dDescriptor >::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> {</div> +<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">switch</span> (dataType)</div> +<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  {</div> +<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">case</span> DataType::Float16: <span class="keywordflow">return</span> <span class="stringliteral">"Float16"</span>;</div> +<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">case</span> DataType::Float32: <span class="keywordflow">return</span> <span class="stringliteral">"Float32"</span>;</div> +<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">case</span> DataType::Signed64: <span class="keywordflow">return</span> <span class="stringliteral">"Signed64"</span>;</div> +<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">case</span> DataType::QAsymmU8: <span class="keywordflow">return</span> <span class="stringliteral">"QAsymmU8"</span>;</div> +<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">case</span> DataType::QAsymmS8: <span class="keywordflow">return</span> <span class="stringliteral">"QAsymmS8"</span>;</div> +<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">case</span> DataType::QSymmS8: <span class="keywordflow">return</span> <span class="stringliteral">"QSymmS8"</span>;</div> +<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keywordflow">case</span> DataType::QSymmS16: <span class="keywordflow">return</span> <span class="stringliteral">"QSymm16"</span>;</div> +<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">case</span> DataType::Signed32: <span class="keywordflow">return</span> <span class="stringliteral">"Signed32"</span>;</div> +<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">case</span> DataType::Boolean: <span class="keywordflow">return</span> <span class="stringliteral">"Boolean"</span>;</div> +<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">case</span> DataType::BFloat16: <span class="keywordflow">return</span> <span class="stringliteral">"BFloat16"</span>;</div> +<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  </div> +<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  }</div> +<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> }</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< DataType >::GetName()</a>, <a class="el" href="_ref_permute_workload_8hpp_source.xhtml#l00019">RefPermuteWorkload< DataType >::GetName()</a>, <a class="el" href="_ref_debug_workload_8hpp_source.xhtml#l00023">RefDebugWorkload< DataType >::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> {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">switch</span> (dataType)</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  {</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">case</span> DataType::Float16: <span class="keywordflow">return</span> <span class="stringliteral">"Float16"</span>;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">case</span> DataType::Float32: <span class="keywordflow">return</span> <span class="stringliteral">"Float32"</span>;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">case</span> DataType::Signed64: <span class="keywordflow">return</span> <span class="stringliteral">"Signed64"</span>;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">case</span> DataType::QAsymmU8: <span class="keywordflow">return</span> <span class="stringliteral">"QAsymmU8"</span>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">case</span> DataType::QAsymmS8: <span class="keywordflow">return</span> <span class="stringliteral">"QAsymmS8"</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">case</span> DataType::QSymmS8: <span class="keywordflow">return</span> <span class="stringliteral">"QSymmS8"</span>;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keywordflow">case</span> DataType::QSymmS16: <span class="keywordflow">return</span> <span class="stringliteral">"QSymm16"</span>;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">case</span> DataType::Signed32: <span class="keywordflow">return</span> <span class="stringliteral">"Signed32"</span>;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">case</span> DataType::Boolean: <span class="keywordflow">return</span> <span class="stringliteral">"Boolean"</span>;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">case</span> DataType::BFloat16: <span class="keywordflow">return</span> <span class="stringliteral">"BFloat16"</span>;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> }</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< DataType >::GetName()</a>, <a class="el" href="_ref_permute_workload_8hpp_source.xhtml#l00019">RefPermuteWorkload< DataType >::GetName()</a>, <a class="el" href="_ref_debug_workload_8hpp_source.xhtml#l00023">RefDebugWorkload< DataType >::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> {</div> +<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">switch</span> (dataType)</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  {</div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">case</span> DataType::BFloat16:</div> +<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <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>  <span class="keywordflow">case</span> DataType::Float32:</div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> 0U;</div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> }</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> {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">switch</span> (dataType)</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">case</span> DataType::BFloat16:</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <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>  <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> 0U;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> }</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> { <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> { <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> {<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> {<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> {</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">return</span> optNet-><a class="code" href="classarmnn_1_1_i_optimized_network.xhtml#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->GetGraph();</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</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> {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">return</span> optNet-><a class="code" href="classarmnn_1_1_i_optimized_network.xhtml#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->GetGraph();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</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< OptimizedNetworkImpl > 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> {</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  BackendRegistry& backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>();</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">if</span> (!backendRegistry.IsBackendRegistered(backend))</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  {</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">return</span> LayerSupportHandle(<span class="keyword">nullptr</span>);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  }</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  </div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">auto</span> backendObject = factoryFunc();</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">return</span> LayerSupportHandle(backendObject->GetLayerSupport(), backend);</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> }</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> {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  BackendRegistry& backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>();</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">if</span> (!backendRegistry.IsBackendRegistered(backend))</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">return</span> LayerSupportHandle(<span class="keyword">nullptr</span>);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  }</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">auto</span> backendObject = factoryFunc();</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">return</span> LayerSupportHandle(backendObject->GetLayerSupport(), backend);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> }</div><div class="ttc" id="namespacearmnn_xhtml_ac2807505b850738bc8a1991ce669dd47"><div class="ttname"><a href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a></div><div class="ttdeci">BackendRegistry & 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> {</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>  <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>  {</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>  <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>  <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == layerId)</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  {</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>  <span class="keywordflow">return</span> inputTensorPair.second;</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>  }</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>  }</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Input does not exist."</span>);</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> }</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> {</div> +<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>  <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>  {</div> +<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>  <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>  <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == layerId)</div> +<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  {</div> +<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>  <span class="keywordflow">return</span> inputTensorPair.second;</div> +<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>  }</div> +<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>  }</div> +<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Input does not exist."</span>);</div> +<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> }</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> {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">const</span> ITensorHandle* tensorHandle = data.m_Inputs[idx];</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>*<span class="keyword">></span>(tensorHandle->Map());</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> }</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> {</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">const</span> ITensorHandle* tensorHandle = data.m_Inputs[idx];</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>*<span class="keyword">></span>(tensorHandle->Map());</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> }</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> {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> GetInputTensorData<BFloat16>(idx, data);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> {</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> GetInputTensorData<BFloat16>(idx, data);</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</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> {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">return</span> GetInputTensorData<float>(idx, data);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> {</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">return</span> GetInputTensorData<float>(idx, data);</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</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> {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> GetInputTensorData<Half>(idx, data);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> {</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> GetInputTensorData<Half>(idx, data);</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</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> {</div> +<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataTypeIn = layer->GetNumInputSlots() == 0 ? DataType::Float32 :</div> +<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  layer->GetInputSlot(0).GetConnectedOutputSlot()->GetTensorInfo().GetDataType();</div> +<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataTypeOut = layer->GetNumOutputSlots() == 0 ? DataType::Float32 :</div> +<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  layer->GetOutputSlot(0).GetTensorInfo().GetDataType();</div> +<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keywordflow">return</span> {dataTypeIn, dataTypeOut};</div> +<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> }</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> {</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataTypeIn = layer->GetNumInputSlots() == 0 ? DataType::Float32 :</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  layer->GetInputSlot(0).GetConnectedOutputSlot()->GetTensorInfo().GetDataType();</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataTypeOut = layer->GetNumOutputSlots() == 0 ? DataType::Float32 :</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  layer->GetOutputSlot(0).GetTensorInfo().GetDataType();</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keywordflow">return</span> {dataTypeIn, dataTypeOut};</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span> }</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> {</div> +<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keywordflow">switch</span> (type)</div> +<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  {</div> +<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <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>  <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> <span class="preprocessor">#undef X</span></div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"Unknown layer type"</span>);</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  }</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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< DefaultStrategy >::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> {</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keywordflow">switch</span> (type)</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  {</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <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>  <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> <span class="preprocessor">#undef X</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"Unknown layer type"</span>);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  }</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">switch</span> (operation)</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  {</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">case</span> LogicalBinaryOperation::LogicalAnd: <span class="keywordflow">return</span> <span class="stringliteral">"LogicalAnd"</span>;</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">case</span> LogicalBinaryOperation::LogicalOr: <span class="keywordflow">return</span> <span class="stringliteral">"LogicalOr"</span>;</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</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> {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">switch</span> (operation)</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  {</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">case</span> LogicalBinaryOperation::LogicalAnd: <span class="keywordflow">return</span> <span class="stringliteral">"LogicalAnd"</span>;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">case</span> LogicalBinaryOperation::LogicalOr: <span class="keywordflow">return</span> <span class="stringliteral">"LogicalOr"</span>;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</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> {</div> +<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">switch</span> (memBlockStrategyType)</div> +<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  {</div> +<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">case</span> MemBlockStrategyType::SingleAxisPacking: <span class="keywordflow">return</span> <span class="stringliteral">"SingleAxisPacking"</span>;</div> +<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">case</span> MemBlockStrategyType::MultiAxisPacking: <span class="keywordflow">return</span> <span class="stringliteral">"MultiAxisPacking"</span>;</div> +<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  }</div> +<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> }</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> {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">switch</span> (memBlockStrategyType)</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  {</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">case</span> MemBlockStrategyType::SingleAxisPacking: <span class="keywordflow">return</span> <span class="stringliteral">"SingleAxisPacking"</span>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">case</span> MemBlockStrategyType::MultiAxisPacking: <span class="keywordflow">return</span> <span class="stringliteral">"MultiAxisPacking"</span>;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> }</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> {</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& strategyFactoryMap = GetStrategyFactories();</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">auto</span> strategyFactory = strategyFactoryMap.find(strategyName);</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">if</span> (strategyFactory != GetStrategyFactories().end())</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  {</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">return</span> strategyFactory->second->CreateMemoryOptimizerStrategy();</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  }</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</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> {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& strategyFactoryMap = GetStrategyFactories();</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">auto</span> strategyFactory = strategyFactoryMap.find(strategyName);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">if</span> (strategyFactory != GetStrategyFactories().end())</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  {</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">return</span> strategyFactory->second->CreateMemoryOptimizerStrategy();</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</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> {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& strategyFactoryMap = GetStrategyFactories();</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  std::vector<std::string> strategyNames;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>& strategyFactory : strategyFactoryMap)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  strategyNames.emplace_back(strategyFactory.first);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">return</span> strategyNames;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> {</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& strategyFactoryMap = GetStrategyFactories();</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  std::vector<std::string> strategyNames;</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>& strategyFactory : strategyFactoryMap)</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  strategyNames.emplace_back(strategyFactory.first);</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  }</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">return</span> strategyNames;</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> }</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> {</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">return</span> optNet-><a class="code" href="classarmnn_1_1_i_optimized_network.xhtml#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->GetModelOptions();</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> }</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> {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">return</span> optNet-><a class="code" href="classarmnn_1_1_i_optimized_network.xhtml#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->GetModelOptions();</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> }</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< OptimizedNetworkImpl > 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> {</div> +<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordflow">switch</span> (channel)</div> +<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  {</div> +<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">case</span> NormalizationAlgorithmChannel::Across: <span class="keywordflow">return</span> <span class="stringliteral">"Across"</span>;</div> +<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordflow">case</span> NormalizationAlgorithmChannel::Within: <span class="keywordflow">return</span> <span class="stringliteral">"Within"</span>;</div> +<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  }</div> +<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> }</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< NormalizationDescriptor >::Serialize()</a>.</p> -<div class="fragment"><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordflow">switch</span> (channel)</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  {</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">case</span> NormalizationAlgorithmChannel::Across: <span class="keywordflow">return</span> <span class="stringliteral">"Across"</span>;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordflow">case</span> NormalizationAlgorithmChannel::Within: <span class="keywordflow">return</span> <span class="stringliteral">"Within"</span>;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> }</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> {</div> +<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">switch</span> (method)</div> +<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  {</div> +<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">case</span> NormalizationAlgorithmMethod::LocalBrightness: <span class="keywordflow">return</span> <span class="stringliteral">"LocalBrightness"</span>;</div> +<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordflow">case</span> NormalizationAlgorithmMethod::LocalContrast: <span class="keywordflow">return</span> <span class="stringliteral">"LocalContrast"</span>;</div> +<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  }</div> +<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> }</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< NormalizationDescriptor >::Serialize()</a>.</p> -<div class="fragment"><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">switch</span> (method)</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">case</span> NormalizationAlgorithmMethod::LocalBrightness: <span class="keywordflow">return</span> <span class="stringliteral">"LocalBrightness"</span>;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordflow">case</span> NormalizationAlgorithmMethod::LocalContrast: <span class="keywordflow">return</span> <span class="stringliteral">"LocalContrast"</span>;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  }</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> }</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> {</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1; i < inputInfo.GetNumDimensions(); i++)</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  numActivations *= inputInfo.GetShape()[i];</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  }</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> numActivations;</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1; i < inputInfo.GetNumDimensions(); i++)</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  numActivations *= inputInfo.GetShape()[i];</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  }</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> numActivations;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keyword">auto</span> <span class="keyword">const</span>& backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>();</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">auto</span> backendObject = factoryFunc();</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">return</span> backendObject->GetNumberOfCacheFiles();</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">return</span> 0;</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</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> {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keyword">auto</span> <span class="keyword">const</span>& backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>();</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">auto</span> backendObject = factoryFunc();</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">return</span> backendObject->GetNumberOfCacheFiles();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</div><div class="ttc" id="namespacearmnn_xhtml_ac2807505b850738bc8a1991ce669dd47"><div class="ttname"><a href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a></div><div class="ttdeci">BackendRegistry & 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> {</div> +<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <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>  <span class="keywordflow">if</span> (biasEnabled)</div> +<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  {</div> +<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  numInputs = 3;</div> +<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  }</div> +<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">return</span> numInputs;</div> +<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> }</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> {</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <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>  <span class="keywordflow">if</span> (biasEnabled)</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  numInputs = 3;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">return</span> numInputs;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span> }</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> {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  {</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  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>  }</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  {</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  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>  }</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> }</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> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  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>  }</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  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>  }</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> }</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> {</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">switch</span> (rounding)</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  {</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">case</span> OutputShapeRounding::Ceiling: <span class="keywordflow">return</span> <span class="stringliteral">"Ceiling"</span>;</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordflow">case</span> OutputShapeRounding::Floor: <span class="keywordflow">return</span> <span class="stringliteral">"Floor"</span>;</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  }</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</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< Pooling2dDescriptor >::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00349">StringifyLayerParameters< Pooling3dDescriptor >::Serialize()</a>.</p> -<div class="fragment"><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">switch</span> (rounding)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">case</span> OutputShapeRounding::Ceiling: <span class="keywordflow">return</span> <span class="stringliteral">"Ceiling"</span>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordflow">case</span> OutputShapeRounding::Floor: <span class="keywordflow">return</span> <span class="stringliteral">"Floor"</span>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</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> {</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>  <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>  {</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>  <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>  <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == layerId)</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>  {</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>  <span class="keywordflow">return</span> outputTensorPair.second;</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>  }</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>  }</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Output does not exist."</span>);</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> }</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> {</div> +<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>  <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>  {</div> +<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>  <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>  <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == layerId)</div> +<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>  {</div> +<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>  <span class="keywordflow">return</span> outputTensorPair.second;</div> +<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>  }</div> +<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>  }</div> +<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Output does not exist."</span>);</div> +<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> }</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> {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>*<span class="keyword">></span>(tensorHandle->Map());</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</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> {</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>*<span class="keyword">></span>(tensorHandle->Map());</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</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> {</div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  ITensorHandle* tensorHandle = data.m_Outputs[idx];</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>*<span class="keyword">></span>(tensorHandle->Map());</div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> }</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> {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  ITensorHandle* tensorHandle = data.m_Outputs[idx];</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>*<span class="keyword">></span>(tensorHandle->Map());</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> }</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> {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">return</span> GetOutputTensorData<BFloat16>(idx, data);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> {</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">return</span> GetOutputTensorData<BFloat16>(idx, data);</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</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> {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">return</span> GetOutputTensorData<float>(idx, data);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> {</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">return</span> GetOutputTensorData<float>(idx, data);</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> }</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> {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">return</span> GetOutputTensorData<Half>(idx, data);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> {</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">return</span> GetOutputTensorData<Half>(idx, data);</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> }</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> {</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">switch</span> (method)</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  {</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">case</span> PaddingMethod::Exclude: <span class="keywordflow">return</span> <span class="stringliteral">"Exclude"</span>;</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">case</span> PaddingMethod::IgnoreValue: <span class="keywordflow">return</span> <span class="stringliteral">"IgnoreValue"</span>;</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</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< Pooling2dDescriptor >::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00349">StringifyLayerParameters< Pooling3dDescriptor >::Serialize()</a>.</p> -<div class="fragment"><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">switch</span> (method)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">case</span> PaddingMethod::Exclude: <span class="keywordflow">return</span> <span class="stringliteral">"Exclude"</span>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">case</span> PaddingMethod::IgnoreValue: <span class="keywordflow">return</span> <span class="stringliteral">"IgnoreValue"</span>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</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> {</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">switch</span> (mode)</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  {</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">case</span> PaddingMode::Constant: <span class="keywordflow">return</span> <span class="stringliteral">"Exclude"</span>;</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">case</span> PaddingMode::Symmetric: <span class="keywordflow">return</span> <span class="stringliteral">"Symmetric"</span>;</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">case</span> PaddingMode::Reflect: <span class="keywordflow">return</span> <span class="stringliteral">"Reflect"</span>;</div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  }</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</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< PadDescriptor >::Serialize()</a>.</p> -<div class="fragment"><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">switch</span> (mode)</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">case</span> PaddingMode::Constant: <span class="keywordflow">return</span> <span class="stringliteral">"Exclude"</span>;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">case</span> PaddingMode::Symmetric: <span class="keywordflow">return</span> <span class="stringliteral">"Symmetric"</span>;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">case</span> PaddingMode::Reflect: <span class="keywordflow">return</span> <span class="stringliteral">"Reflect"</span>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</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> {</div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">switch</span> (pooling)</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  {</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">case</span> PoolingAlgorithm::Average: <span class="keywordflow">return</span> <span class="stringliteral">"Average"</span>;</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">case</span> PoolingAlgorithm::Max: <span class="keywordflow">return</span> <span class="stringliteral">"Max"</span>;</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">case</span> PoolingAlgorithm::L2: <span class="keywordflow">return</span> <span class="stringliteral">"L2"</span>;</div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</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< Pooling2dDescriptor >::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00349">StringifyLayerParameters< Pooling3dDescriptor >::Serialize()</a>.</p> -<div class="fragment"><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">switch</span> (pooling)</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">case</span> PoolingAlgorithm::Average: <span class="keywordflow">return</span> <span class="stringliteral">"Average"</span>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">case</span> PoolingAlgorithm::Max: <span class="keywordflow">return</span> <span class="stringliteral">"Max"</span>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">case</span> PoolingAlgorithm::L2: <span class="keywordflow">return</span> <span class="stringliteral">"L2"</span>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</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> {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> *(runtime->m_ProfilingService.get());</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> *(runtime->m_ProfilingService.get());</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</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> {</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">switch</span> (reduce_operation)</div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  {</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">case</span> ReduceOperation::Sum: <span class="keywordflow">return</span> <span class="stringliteral">"Sum"</span>;</div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">case</span> ReduceOperation::Max: <span class="keywordflow">return</span> <span class="stringliteral">"Max"</span>;</div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">case</span> ReduceOperation::Mean: <span class="keywordflow">return</span> <span class="stringliteral">"Mean"</span>;</div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">case</span> ReduceOperation::Min: <span class="keywordflow">return</span> <span class="stringliteral">"Min"</span>;</div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">case</span> ReduceOperation::Prod: <span class="keywordflow">return</span> <span class="stringliteral">"Prod"</span>;</div> +<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  }</div> +<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</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< ReduceDescriptor >::Serialize()</a>.</p> -<div class="fragment"><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">switch</span> (reduce_operation)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">case</span> ReduceOperation::Sum: <span class="keywordflow">return</span> <span class="stringliteral">"Sum"</span>;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">case</span> ReduceOperation::Max: <span class="keywordflow">return</span> <span class="stringliteral">"Max"</span>;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">case</span> ReduceOperation::Mean: <span class="keywordflow">return</span> <span class="stringliteral">"Mean"</span>;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">case</span> ReduceOperation::Min: <span class="keywordflow">return</span> <span class="stringliteral">"Min"</span>;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">case</span> ReduceOperation::Prod: <span class="keywordflow">return</span> <span class="stringliteral">"Prod"</span>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</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> {</div> +<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">switch</span> (method)</div> +<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  {</div> +<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">case</span> ResizeMethod::Bilinear: <span class="keywordflow">return</span> <span class="stringliteral">"Bilinear"</span>;</div> +<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">case</span> ResizeMethod::NearestNeighbor: <span class="keywordflow">return</span> <span class="stringliteral">"NearestNeighbour"</span>;</div> +<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  }</div> +<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> }</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< ResizeDescriptor >::Serialize()</a>.</p> -<div class="fragment"><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">switch</span> (method)</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  {</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">case</span> ResizeMethod::Bilinear: <span class="keywordflow">return</span> <span class="stringliteral">"Bilinear"</span>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">case</span> ResizeMethod::NearestNeighbor: <span class="keywordflow">return</span> <span class="stringliteral">"NearestNeighbour"</span>;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> }</div></div><!-- fragment --> +<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00426">StringifyLayerParameters< ResizeDescriptor >::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>  {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">return</span> flatbuffers::GetSizePrefixedRoot<armnn::ClContext>(buf);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  {</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">return</span> flatbuffers::GetSizePrefixedRoot<armnn::ClContext>(buf);</div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> }</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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">switch</span> (status)</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  {</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Status::Success</a>: <span class="keywordflow">return</span> <span class="stringliteral">"Status::Success"</span>;</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">armnn::Status::Failure</a>: <span class="keywordflow">return</span> <span class="stringliteral">"Status::Failure"</span>;</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  }</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</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<<()</a>.</p> -<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">switch</span> (status)</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Status::Success</a>: <span class="keywordflow">return</span> <span class="stringliteral">"Status::Success"</span>;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">armnn::Status::Failure</a>: <span class="keywordflow">return</span> <span class="stringliteral">"Status::Failure"</span>;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  }</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</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> {</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  <span class="keyword">const</span> TensorHandleType* refTensorHandle =</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  PolymorphicDowncast<const TensorHandleType*>(tensorHandle);</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">return</span> refTensorHandle->GetTensorInfo();</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> }</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< Functor, ParentDescriptor, DebugString >::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< DataType >::ExecuteAsync()</a>, <a class="el" href="_ref_permute_workload_8cpp_source.xhtml#l00023">RefPermuteWorkload< DataType >::ExecuteAsync()</a>, <a class="el" href="_ref_debug_workload_8cpp_source.xhtml#l00024">RefDebugWorkload< DataType >::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> {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  <span class="keyword">const</span> TensorHandleType* refTensorHandle =</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  PolymorphicDowncast<const TensorHandleType*>(tensorHandle);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">return</span> refTensorHandle->GetTensorInfo();</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> }</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> {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> std::chrono::duration<double, std::milli>(<a class="code" href="namespacearmnn.xhtml#ac895f6f6897ce335b7b433201bae0b48">GetTimeNow</a>() - start_time);</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> }</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> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> std::chrono::duration<double, std::milli>(<a class="code" href="namespacearmnn.xhtml#ac895f6f6897ce335b7b433201bae0b48">GetTimeNow</a>() - start_time);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> }</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> {</div> +<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <span class="keywordflow">return</span> std::chrono::high_resolution_clock::now();</div> +<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> }</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> {</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <span class="keywordflow">return</span> std::chrono::high_resolution_clock::now();</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> }</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> {</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">switch</span> (operation)</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">case</span> UnaryOperation::Abs: <span class="keywordflow">return</span> <span class="stringliteral">"Abs"</span>;</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">case</span> UnaryOperation::Exp: <span class="keywordflow">return</span> <span class="stringliteral">"Exp"</span>;</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">case</span> UnaryOperation::Sqrt: <span class="keywordflow">return</span> <span class="stringliteral">"Sqrt"</span>;</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">case</span> UnaryOperation::Rsqrt: <span class="keywordflow">return</span> <span class="stringliteral">"Rsqrt"</span>;</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">case</span> UnaryOperation::Neg: <span class="keywordflow">return</span> <span class="stringliteral">"Neg"</span>;</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">case</span> UnaryOperation::Log: <span class="keywordflow">return</span> <span class="stringliteral">"Log"</span>;</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">case</span> UnaryOperation::LogicalNot: <span class="keywordflow">return</span> <span class="stringliteral">"LogicalNot"</span>;</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">case</span> UnaryOperation::Sin: <span class="keywordflow">return</span> <span class="stringliteral">"Sin"</span>;</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</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< ElementwiseUnaryDescriptor >::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< ElementwiseUnaryDescriptor >::Serialize()</a>.</p> -<div class="fragment"><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">switch</span> (operation)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">case</span> UnaryOperation::Abs: <span class="keywordflow">return</span> <span class="stringliteral">"Abs"</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">case</span> UnaryOperation::Exp: <span class="keywordflow">return</span> <span class="stringliteral">"Exp"</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">case</span> UnaryOperation::Sqrt: <span class="keywordflow">return</span> <span class="stringliteral">"Sqrt"</span>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">case</span> UnaryOperation::Rsqrt: <span class="keywordflow">return</span> <span class="stringliteral">"Rsqrt"</span>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">case</span> UnaryOperation::Neg: <span class="keywordflow">return</span> <span class="stringliteral">"Neg"</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">case</span> UnaryOperation::Log: <span class="keywordflow">return</span> <span class="stringliteral">"Log"</span>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">case</span> UnaryOperation::LogicalNot: <span class="keywordflow">return</span> <span class="stringliteral">"LogicalNot"</span>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">case</span> UnaryOperation::Sin: <span class="keywordflow">return</span> <span class="stringliteral">"Sin"</span>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</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> {</div> +<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  TensorShape shape(tensorInfo.GetShape());</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <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>  <span class="keyword">auto</span> runningSize = size;</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  std::vector<unsigned int> strides(shape.GetNumDimensions());</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">auto</span> lastIdx = shape.GetNumDimensions()-1;</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i < lastIdx ; i++)</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  {</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  strides[lastIdx-i] = runningSize;</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  runningSize *= shape[lastIdx-i];</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  }</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  strides[0] = runningSize;</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">return</span> TensorShape(shape.GetNumDimensions(), strides.data());</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</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> {</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  TensorShape shape(tensorInfo.GetShape());</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <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>  <span class="keyword">auto</span> runningSize = size;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  std::vector<unsigned int> strides(shape.GetNumDimensions());</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">auto</span> lastIdx = shape.GetNumDimensions()-1;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i < lastIdx ; i++)</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  strides[lastIdx-i] = runningSize;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  runningSize *= shape[lastIdx-i];</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  }</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  strides[0] = runningSize;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">return</span> TensorShape(shape.GetNumDimensions(), strides.data());</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</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> {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <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> }</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: "X.Y.Z" 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> {</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <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> }</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">◆ </a></span>HasCapability() <span class="overload">[1/4]</span></h2> +<a id="a78fe085e22e9822075ad791aa5cc34d5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a78fe085e22e9822075ad791aa5cc34d5">◆ </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 & </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> & </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> & </td> - <td class="paramname"><em>capabilities</em> </td> + <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> & </td> + <td class="paramname"><em>backend</em> </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> {</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <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> }</div><div class="ttc" id="namespacearmnn_xhtml_a71c3bdadfe1c69aba2cbf054bff47744"><div class="ttname"><a href="namespacearmnn.xhtml#a71c3bdadfe1c69aba2cbf054bff47744">armnn::GetCapability</a></div><div class="ttdeci">Optional< const BackendOptions::BackendOption > GetCapability(const std::string &backendCapabilityName, const BackendCapabilities &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> {</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keyword">auto</span> <span class="keyword">const</span>& backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>();</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  {</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">auto</span> backendObject = factoryFunc();</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">auto</span> capabilities = backendObject->GetCapabilities();</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <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>  }</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</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">◆ </a></span>HasCapability() <span class="overload">[2/4]</span></h2> +<a id="ae702febbc6139e20b2b8c4f03ff89b01"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae702febbc6139e20b2b8c4f03ff89b01">◆ </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 & </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> & </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> & </td> - <td class="paramname"><em>backend</em> </td> + <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> & </td> + <td class="paramname"><em>capabilities</em> </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> {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <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> }</div><div class="ttc" id="namespacearmnn_xhtml_a71c3bdadfe1c69aba2cbf054bff47744"><div class="ttname"><a href="namespacearmnn.xhtml#a71c3bdadfe1c69aba2cbf054bff47744">armnn::GetCapability</a></div><div class="ttdeci">Optional< const BackendOptions::BackendOption > GetCapability(const std::string &backendCapabilityName, const BackendCapabilities &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> {</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i < capabilities.GetOptionCount(); i++)</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& backendCapability = capabilities.GetOption(i);</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">if</span> (capability.GetName() == backendCapability.GetName())</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  {</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">if</span> (capability.GetValue().IsBool() && backendCapability.GetValue().IsBool())</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  {</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">return</span> capability.GetValue().AsBool() == backendCapability.GetValue().AsBool();</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsFloat() && backendCapability.GetValue().IsFloat())</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  {</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">return</span> capability.GetValue().AsFloat() == backendCapability.GetValue().AsFloat();</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsInt() && backendCapability.GetValue().IsInt())</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  {</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">return</span> capability.GetValue().AsInt() == backendCapability.GetValue().AsInt();</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  }</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsString() && backendCapability.GetValue().IsString())</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  {</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">return</span> capability.GetValue().AsString() == backendCapability.GetValue().AsString();</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  }</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsUnsignedInt() && backendCapability.GetValue().IsUnsignedInt())</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  {</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">return</span> capability.GetValue().AsUnsignedInt() == backendCapability.GetValue().AsUnsignedInt();</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  }</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  }</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> }</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">◆ </a></span>HasCapability() <span class="overload">[3/4]</span></h2> +<a id="a8439e8b224a1fb7abdf449c8e6775469"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8439e8b224a1fb7abdf449c8e6775469">◆ </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> & </td> - <td class="paramname"><em>capability</em>, </td> + <td class="paramtype">const std::string & </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> & </td> - <td class="paramname"><em>capabilities</em> </td> + <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> & </td> + <td class="paramname"><em>backend</em> </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> {</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <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> }</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> {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i < capabilities.GetOptionCount(); i++)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& backendCapability = capabilities.GetOption(i);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">if</span> (capability.GetName() == backendCapability.GetName())</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">if</span> (capability.GetValue().IsBool() && backendCapability.GetValue().IsBool())</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">return</span> capability.GetValue().AsBool() == backendCapability.GetValue().AsBool();</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsFloat() && backendCapability.GetValue().IsFloat())</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">return</span> capability.GetValue().AsFloat() == backendCapability.GetValue().AsFloat();</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsInt() && backendCapability.GetValue().IsInt())</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">return</span> capability.GetValue().AsInt() == backendCapability.GetValue().AsInt();</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  }</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsString() && backendCapability.GetValue().IsString())</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">return</span> capability.GetValue().AsString() == backendCapability.GetValue().AsString();</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsUnsignedInt() && backendCapability.GetValue().IsUnsignedInt())</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  {</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">return</span> capability.GetValue().AsUnsignedInt() == backendCapability.GetValue().AsUnsignedInt();</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> }</div></div><!-- fragment --> </div> </div> -<a id="a78fe085e22e9822075ad791aa5cc34d5"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a78fe085e22e9822075ad791aa5cc34d5">◆ </a></span>HasCapability() <span class="overload">[4/4]</span></h2> +<a id="abd839f0f103c1ae19a4b38d59b869108"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abd839f0f103c1ae19a4b38d59b869108">◆ </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> & </td> - <td class="paramname"><em>backendOption</em>, </td> + <td class="paramtype">const std::string & </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> & </td> - <td class="paramname"><em>backend</em> </td> + <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> & </td> + <td class="paramname"><em>capabilities</em> </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> {</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keyword">auto</span> <span class="keyword">const</span>& backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>();</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">auto</span> backendObject = factoryFunc();</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">auto</span> capabilities = backendObject->GetCapabilities();</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <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>  }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</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 &name, const BackendCapabilities &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 & 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> {</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <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> }</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> {}</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< T, false >::Dequantize()</a>, <a class="el" href="_quantize_helper_8hpp_source.xhtml#l00061">SelectiveQuantizer< armnn::Half, false >::Dequantize()</a>, <a class="el" href="_quantize_helper_8hpp_source.xhtml#l00077">SelectiveQuantizer< armnn::BFloat16, false >::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< DefaultStrategy >::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< T, false >::Quantize()</a>, <a class="el" href="_quantize_helper_8hpp_source.xhtml#l00055">SelectiveQuantizer< armnn::Half, false >::Quantize()</a>, <a class="el" href="_quantize_helper_8hpp_source.xhtml#l00071">SelectiveQuantizer< armnn::BFloat16, false >::Quantize()</a>, <a class="el" href="_workload_8hpp_source.xhtml#l00069">BaseWorkload< SplitterQueueDescriptor >::ReplaceInputTensorHandle()</a>, <a class="el" href="_workload_8hpp_source.xhtml#l00076">BaseWorkload< SplitterQueueDescriptor >::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< PermuteType >::Run()</a>, <a class="el" href="_squash_equal_siblings_8hpp_source.xhtml#l00025">SquashEqualSiblingsImpl< Comparable >::Run()</a>, <a class="el" href="_fuse_batch_norm_8hpp_source.xhtml#l00027">FuseBatchNorm< ConvLayer, ArmnnType, T >::Run()</a>, <a class="el" href="_convert_constants_8hpp_source.xhtml#l00071">ConvertConstants< Converter, Predicate >::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< InputLayer >::~LayerInGraph()</a>, and <a class="el" href="_graph_8hpp_source.xhtml#l00440">Graph::LayerInGraph< OutputLayer >::~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< T, false >::Dequantize()</a>, <a class="el" href="_quantize_helper_8hpp_source.xhtml#l00061">SelectiveQuantizer< armnn::Half, false >::Dequantize()</a>, <a class="el" href="_quantize_helper_8hpp_source.xhtml#l00077">SelectiveQuantizer< armnn::BFloat16, false >::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< DefaultStrategy >::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< T, false >::Quantize()</a>, <a class="el" href="_quantize_helper_8hpp_source.xhtml#l00055">SelectiveQuantizer< armnn::Half, false >::Quantize()</a>, <a class="el" href="_quantize_helper_8hpp_source.xhtml#l00071">SelectiveQuantizer< armnn::BFloat16, false >::Quantize()</a>, <a class="el" href="_workload_8hpp_source.xhtml#l00069">BaseWorkload< Convolution2dQueueDescriptor >::ReplaceInputTensorHandle()</a>, <a class="el" href="_workload_8hpp_source.xhtml#l00076">BaseWorkload< Convolution2dQueueDescriptor >::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< PermuteType >::Run()</a>, <a class="el" href="_squash_equal_siblings_8hpp_source.xhtml#l00025">SquashEqualSiblingsImpl< Comparable >::Run()</a>, <a class="el" href="_fuse_batch_norm_8hpp_source.xhtml#l00027">FuseBatchNorm< ConvLayer, ArmnnType, T >::Run()</a>, <a class="el" href="_convert_constants_8hpp_source.xhtml#l00071">ConvertConstants< Converter, Predicate >::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< InputLayer >::~LayerInGraph()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00440">Graph::LayerInGraph< OutputLayer >::~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> {}</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> {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <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> </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  armcomputetensorutils::InitialiseArmComputeTensorEmpty(clTensor);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">switch</span>(handle->GetTensorInfo().GetDataType())</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">case</span> DataType::Float16:</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle->GetConstTensor<<a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a>>());</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle->GetConstTensor<<span class="keywordtype">float</span>>());</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle->GetConstTensor<uint8_t>());</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle->GetConstTensor<int8_t>());</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">case</span> DataType::QSymmS16:</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle->GetConstTensor<int16_t>());</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle->GetConstTensor<int32_t>());</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">case</span> DataType::BFloat16:</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle->GetConstTensor<<a class="code" href="classarmnn_1_1_b_float16.xhtml">armnn::BFloat16</a>>());</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <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>  <span class="keywordflow">throw</span> Exception(<span class="stringliteral">"Unexpected tensor type during InitializeArmComputeClTensorData()."</span>);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> };</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 &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> {</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <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>  </div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  armcomputetensorutils::InitialiseArmComputeTensorEmpty(clTensor);</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">switch</span>(handle->GetTensorInfo().GetDataType())</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">case</span> DataType::Float16:</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle->GetConstTensor<<a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a>>());</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">case</span> DataType::Float32:</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle->GetConstTensor<<span class="keywordtype">float</span>>());</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">case</span> DataType::QAsymmU8:</div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle->GetConstTensor<uint8_t>());</div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">case</span> DataType::QAsymmS8:</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle->GetConstTensor<int8_t>());</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">case</span> DataType::QSymmS16:</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle->GetConstTensor<int16_t>());</div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">case</span> DataType::Signed32:</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle->GetConstTensor<int32_t>());</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">case</span> DataType::BFloat16:</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle->GetConstTensor<<a class="code" href="classarmnn_1_1_b_float16.xhtml">armnn::BFloat16</a>>());</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <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>  <span class="keywordflow">throw</span> Exception(<span class="stringliteral">"Unexpected tensor type during InitializeArmComputeClTensorData()."</span>);</div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> };</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">◆ </a></span>InitializeArmComputeTensorData() <span class="overload">[1/2]</span></h2> +<a id="acf8e1f43fc13cf7603564cc15743fce2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acf8e1f43fc13cf7603564cc15743fce2">◆ </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> </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> * </td> + <td class="paramtype">const <a class="el" href="classarmnn_1_1_const_tensor_handle.xhtml">ConstTensorHandle</a> * </td> <td class="paramname"><em>handle</em> </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> {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">switch</span>(tensorInfo.GetDataType())</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">case</span> DataType::Float16:</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, reinterpret_cast<const armnn::Half*>(handle->Map()));</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, reinterpret_cast<const float*>(handle->Map()));</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, reinterpret_cast<const uint8_t*>(handle->Map()));</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, reinterpret_cast<const int8_t*>(handle->Map()));</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, reinterpret_cast<const int32_t*>(handle->Map()));</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">case</span> DataType::QSymmS16:</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, reinterpret_cast<const int16_t*>(handle->Map()));</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">case</span> DataType::BFloat16:</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, reinterpret_cast<const armnn::BFloat16*>(handle->Map()));</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <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>  <span class="keywordflow">throw</span> Exception(<span class="stringliteral">"Unexpected tensor type during InitializeArmComputeTensorData()."</span>);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  }</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> };</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 &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> {</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <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>  </div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">switch</span>(handle->GetTensorInfo().GetDataType())</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  {</div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">case</span> DataType::Float16:</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle->GetConstTensor<<a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a>>());</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">case</span> DataType::Float32:</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle->GetConstTensor<<span class="keywordtype">float</span>>());</div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">case</span> DataType::QAsymmU8:</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle->GetConstTensor<uint8_t>());</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">case</span> DataType::QAsymmS8:</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle->GetConstTensor<int8_t>());</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">case</span> DataType::Signed32:</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle->GetConstTensor<int32_t>());</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">case</span> DataType::QSymmS16:</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle->GetConstTensor<int16_t>());</div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">case</span> DataType::BFloat16:</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle->GetConstTensor<<a class="code" href="classarmnn_1_1_b_float16.xhtml">armnn::BFloat16</a>>());</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <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>  <span class="keywordflow">throw</span> Exception(<span class="stringliteral">"Unexpected tensor type during InitializeArmComputeTensorData()."</span>);</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> };</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">◆ </a></span>InitializeArmComputeTensorData() <span class="overload">[2/2]</span></h2> +<a id="a611208865d55ea576cc89ac86d7c19b7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a611208865d55ea576cc89ac86d7c19b7">◆ </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> * </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> </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> * </td> <td class="paramname"><em>handle</em> </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> {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <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> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">switch</span>(handle->GetTensorInfo().GetDataType())</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">case</span> DataType::Float16:</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle->GetConstTensor<<a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a>>());</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle->GetConstTensor<<span class="keywordtype">float</span>>());</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle->GetConstTensor<uint8_t>());</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle->GetConstTensor<int8_t>());</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle->GetConstTensor<int32_t>());</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">case</span> DataType::QSymmS16:</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle->GetConstTensor<int16_t>());</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">case</span> DataType::BFloat16:</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle->GetConstTensor<<a class="code" href="classarmnn_1_1_b_float16.xhtml">armnn::BFloat16</a>>());</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <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>  <span class="keywordflow">throw</span> Exception(<span class="stringliteral">"Unexpected tensor type during InitializeArmComputeTensorData()."</span>);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> };</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 &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> {</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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>  </div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">switch</span>(tensorInfo.GetDataType())</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  {</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">case</span> DataType::Float16:</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a>*<span class="keyword">></span>(handle->Map()));</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">case</span> DataType::Float32:</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">float</span>*<span class="keyword">></span>(handle->Map()));</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">case</span> DataType::QAsymmU8:</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>uint8_t*<span class="keyword">></span>(handle->Map()));</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">case</span> DataType::QAsymmS8:</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>int8_t*<span class="keyword">></span>(handle->Map()));</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">case</span> DataType::Signed32:</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>int32_t*<span class="keyword">></span>(handle->Map()));</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">case</span> DataType::QSymmS16:</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>int16_t*<span class="keyword">></span>(handle->Map()));</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">case</span> DataType::BFloat16:</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="classarmnn_1_1_b_float16.xhtml">armnn::BFloat16</a>*<span class="keyword">></span>(handle->Map()));</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <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>  <span class="keywordflow">throw</span> Exception(<span class="stringliteral">"Unexpected tensor type during InitializeArmComputeTensorData()."</span>);</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  }</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> };</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> {</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  std::vector<ConvertFp16ToFp32Layer*> convertLayers;</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  convertLayers.reserve(layer.GetNumInputSlots());</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  </div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="comment">// Insert a ConvertFp16ToFp32Layer before each input slot</span></div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& inputSlot = layer.BeginInputSlots(); inputSlot != layer.EndInputSlots(); ++inputSlot)</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  {</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordtype">bool</span> allowInsert = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">if</span> (expectCorrectInputType)</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="comment">// Only insert ConvertFp16ToFp32Layer before FP16 input slots</span></div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  OutputSlot* connectedOutputSlot = inputSlot->GetConnectedOutputSlot();</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  allowInsert =</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  connectedOutputSlot && connectedOutputSlot->GetTensorInfo().GetDataType() == DataType::Float16;</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  }</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  </div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">if</span> (allowInsert)</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">const</span> std::string name =</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  std::string(<span class="stringliteral">"convert_fp16_to_fp32-"</span> + std::to_string(inputSlot->GetSlotIndex()) + <span class="stringliteral">"-"</span>) +</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  layer.GetName();</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  ConvertFp16ToFp32Layer* convertLayer =</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  graph.InsertNewLayer<ConvertFp16ToFp32Layer>(*inputSlot, name.c_str());</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  </div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  TensorInfo convertInfo = convertLayer->GetInputSlot(0).GetConnectedOutputSlot()->GetTensorInfo();</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  convertInfo.SetDataType(DataType::Float32);</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  </div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  convertLayer->GetOutputSlot().SetTensorInfo(convertInfo);</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  </div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  convertLayers.emplace_back(convertLayer);</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  }</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  }</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  </div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">return</span> convertLayers;</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> }</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> {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  std::vector<ConvertFp16ToFp32Layer*> convertLayers;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  convertLayers.reserve(layer.GetNumInputSlots());</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="comment">// Insert a ConvertFp16ToFp32Layer before each input slot</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& inputSlot = layer.BeginInputSlots(); inputSlot != layer.EndInputSlots(); ++inputSlot)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordtype">bool</span> allowInsert = <span class="keyword">true</span>;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">if</span> (expectCorrectInputType)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="comment">// Only insert ConvertFp16ToFp32Layer before FP16 input slots</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  OutputSlot* connectedOutputSlot = inputSlot->GetConnectedOutputSlot();</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  allowInsert =</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  connectedOutputSlot && connectedOutputSlot->GetTensorInfo().GetDataType() == DataType::Float16;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">if</span> (allowInsert)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">const</span> std::string name =</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  std::string(<span class="stringliteral">"convert_fp16_to_fp32-"</span> + std::to_string(inputSlot->GetSlotIndex()) + <span class="stringliteral">"-"</span>) +</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  layer.GetName();</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  ConvertFp16ToFp32Layer* convertLayer =</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  graph.InsertNewLayer<ConvertFp16ToFp32Layer>(*inputSlot, name.c_str());</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  TensorInfo convertInfo = convertLayer->GetInputSlot(0).GetConnectedOutputSlot()->GetTensorInfo();</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  convertInfo.SetDataType(DataType::Float32);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  convertLayer->GetOutputSlot().SetTensorInfo(convertInfo);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  convertLayers.emplace_back(convertLayer);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  }</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  }</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">return</span> convertLayers;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> }</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> {</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <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>  </div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  std::vector<ConvertFp32ToFp16Layer*> convertLayers;</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  convertLayers.reserve(numOutputSlots);</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  </div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <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>  ChangeOutputFp16ToFp32(layer);</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  </div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slotIndex = 0u; slotIndex < numOutputSlots; ++slotIndex)</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  {</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  OutputSlot& outputSlot = layer.GetOutputSlot(slotIndex);</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">if</span>(outputSlot.GetTensorInfo().GetDataType() == DataType::Float32)</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  {</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keyword">const</span> std::string name =</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  std::string(<span class="stringliteral">"convert_fp32_to_fp16-"</span> + std::to_string(slotIndex) + <span class="stringliteral">"-"</span>) + layer.GetName();</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  ConvertFp32ToFp16Layer* convertLayer =</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  graph.InsertNewLayer<ConvertFp32ToFp16Layer>(outputSlot, name.c_str());</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  </div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  TensorInfo convertInfo = convertLayer->GetInputSlot(0).GetConnectedOutputSlot()->GetTensorInfo();</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  convertInfo.SetDataType(DataType::Float16);</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  </div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  convertLayer->GetOutputSlot().SetTensorInfo(convertInfo);</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  </div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  convertLayers.emplace_back(convertLayer);</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  </div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">return</span> convertLayers;</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</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> {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <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> </div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  std::vector<ConvertFp32ToFp16Layer*> convertLayers;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  convertLayers.reserve(numOutputSlots);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <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>  ChangeOutputFp16ToFp32(layer);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slotIndex = 0u; slotIndex < numOutputSlots; ++slotIndex)</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  OutputSlot& outputSlot = layer.GetOutputSlot(slotIndex);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">if</span>(outputSlot.GetTensorInfo().GetDataType() == DataType::Float32)</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  {</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keyword">const</span> std::string name =</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  std::string(<span class="stringliteral">"convert_fp32_to_fp16-"</span> + std::to_string(slotIndex) + <span class="stringliteral">"-"</span>) + layer.GetName();</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  ConvertFp32ToFp16Layer* convertLayer =</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  graph.InsertNewLayer<ConvertFp32ToFp16Layer>(outputSlot, name.c_str());</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  TensorInfo convertInfo = convertLayer->GetInputSlot(0).GetConnectedOutputSlot()->GetTensorInfo();</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  convertInfo.SetDataType(DataType::Float16);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  convertLayer->GetOutputSlot().SetTensorInfo(convertInfo);</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  convertLayers.emplace_back(convertLayer);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">return</span> convertLayers;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</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> {</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  std::vector<DebugLayer*> debugLayers;</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  debugLayers.reserve(layer.GetNumOutputSlots());</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  </div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <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>  uint32_t outputSlotIdx = 0;</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <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>  {</div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">const</span> std::string debugName = std::string(<span class="stringliteral">"DebugLayerAfter"</span>) + layer.GetNameStr() + <span class="stringliteral">"_"</span> +</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  std::to_string(outputSlotIdx);</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  </div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  DebugLayer* debugLayer =</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  graph.InsertNewLayer<DebugLayer>(*outputSlot, debugName.c_str(), toFile);</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  </div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <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>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(debugLayer->GetInputSlot(0).GetConnectedOutputSlot() == &(*outputSlot));</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  TensorInfo debugInfo = debugLayer->GetInputSlot(0).GetConnectedOutputSlot()->GetTensorInfo();</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  </div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  debugLayer->GetOutputSlot().SetTensorInfo(debugInfo);</div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  </div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <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>  debugLayer->SetBackendId(Compute::CpuRef);</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  </div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  debugLayers.emplace_back(debugLayer);</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  </div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  ++outputSlotIdx;</div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  }</div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  </div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">return</span> debugLayers;</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</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> {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  std::vector<DebugLayer*> debugLayers;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  debugLayers.reserve(layer.GetNumOutputSlots());</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <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>  uint32_t outputSlotIdx = 0;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <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>  {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">const</span> std::string debugName = std::string(<span class="stringliteral">"DebugLayerAfter"</span>) + layer.GetNameStr() + <span class="stringliteral">"_"</span> +</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  std::to_string(outputSlotIdx);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  DebugLayer* debugLayer =</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  graph.InsertNewLayer<DebugLayer>(*outputSlot, debugName.c_str(), toFile);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <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>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(debugLayer->GetInputSlot(0).GetConnectedOutputSlot() == &(*outputSlot));</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  TensorInfo debugInfo = debugLayer->GetInputSlot(0).GetConnectedOutputSlot()->GetTensorInfo();</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  debugLayer->GetOutputSlot().SetTensorInfo(debugInfo);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <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>  debugLayer->SetBackendId(Compute::CpuRef);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  debugLayers.emplace_back(debugLayer);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  ++outputSlotIdx;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  }</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">return</span> debugLayers;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">const</span> TensorShape inputShape = inputInfo.GetShape();</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordtype">float</span> beta = data.m_Parameters.m_Beta;</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordtype">float</span> eps = data.m_Parameters.m_Eps;</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordtype">float</span> gamma = data.m_Parameters.m_Gamma;</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  </div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n = 0; n < inputBatches; ++n)</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < inputChannels; ++c)</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordtype">float</span> mean = 0, var = 0;</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="comment">//Calculate Mean</span></div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h < inputHeight; h++)</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  {</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < inputWidth; w++)</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <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>  </div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  inputDecoder[index];</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <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>  mean += value;</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  }</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  }</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  mean /= <span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(inputHeight * inputWidth);</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  </div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="comment">//Calculate Variance</span></div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h < inputHeight; h++)</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  {</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < inputWidth; w++)</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <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>  </div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  inputDecoder[index];</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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>  var += (value - mean) * (value - mean);</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  var /= <span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(inputHeight * inputWidth);</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  </div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="comment">// Apply Instance Normalisation</span></div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h < inputHeight; ++h)</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  {</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < inputWidth; ++w)</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  {</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <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>  inputDecoder[index];</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  outputEncoder[index];</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  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>  }</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  </div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  }</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> }</div> +</div><!-- fragment --> <p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder< IType >::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< LayerDescriptor >::m_Parameters</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder< IType >::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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">const</span> TensorShape inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordtype">float</span> beta = data.m_Parameters.m_Beta;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordtype">float</span> eps = data.m_Parameters.m_Eps;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordtype">float</span> gamma = data.m_Parameters.m_Gamma;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n = 0; n < inputBatches; ++n)</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < inputChannels; ++c)</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordtype">float</span> mean = 0, var = 0;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="comment">//Calculate Mean</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h < inputHeight; h++)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < inputWidth; w++)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <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> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  inputDecoder[index];</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <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>  mean += value;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  mean /= <span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(inputHeight * inputWidth);</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="comment">//Calculate Variance</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h < inputHeight; h++)</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < inputWidth; w++)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <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> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  inputDecoder[index];</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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>  var += (value - mean) * (value - mean);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  var /= <span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(inputHeight * inputWidth);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="comment">// Apply Instance Normalisation</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h < inputHeight; ++h)</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < inputWidth; ++w)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <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>  inputDecoder[index];</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  outputEncoder[index];</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  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>  }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> }</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> {</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="comment">// Box-corner format: ymin, xmin, ymax, xmax.</span></div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  std::max(xMaxIntersection - xMinIntersection, 0.0f);</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordtype">float</span> areaUnion = areaI + areaJ - areaIntersection;</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">return</span> areaIntersection / areaUnion;</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</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> {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="comment">// Box-corner format: ymin, xmin, ymax, xmax.</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  std::max(xMaxIntersection - xMinIntersection, 0.0f);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordtype">float</span> areaUnion = areaI + areaJ - areaIntersection;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">return</span> areaIntersection / areaUnion;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</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> {</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">return</span> IsDataType<DataType::BFloat16>(info);</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> }</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> {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">return</span> IsDataType<DataType::BFloat16>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> }</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">◆ </a></span>IsConcatSupported()</h2> +<a id="ac8b3d64c6b38fe4bc59bd05959577fb6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac8b3d64c6b38fe4bc59bd05959577fb6">◆ </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< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *> </td> + <td class="paramtype">const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> * > </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> {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">auto</span> checkType = [](<span class="keyword">const</span> TensorInfo& tensorInfo) {<span class="keywordflow">return</span> tensorInfo.GetDataType() == ArmnnType;};</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  <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>  {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  }</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  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>  <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>  {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</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> {</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">auto</span> checkType = [](<span class="keyword">const</span> TensorInfo& tensorInfo) {<span class="keywordflow">return</span> tensorInfo.GetDataType() == ArmnnType;};</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  <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>  {</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  }</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  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>  <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>  {</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  }</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</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> {</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">return</span> IsDataType<DataType::Float16>(info);</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> }</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> {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">return</span> IsDataType<DataType::Float16>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> }</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">◆ </a></span>IsLayerOptimizable() <span class="overload">[1/2]</span></h2> +<a id="ab432cc781460dbb619afabeb88139a15"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab432cc781460dbb619afabeb88139a15">◆ </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> * </td> + <td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.xhtml">armnn::Layer</a> & </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> {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <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> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="comment">// A Layer is not optimizable if its name contains "unoptimizable"</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keyword">const</span> std::string layerName(layer-><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>  <span class="keywordtype">bool</span> optimizable = layerName.find(<span class="stringliteral">"unoptimizable"</span>) == std::string::npos;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">return</span> optimizable;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> }</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> {</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#ab432cc781460dbb619afabeb88139a15">IsLayerOptimizable</a>(&layer);</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</div> </div><!-- fragment --> </div> </div> -<a id="ab432cc781460dbb619afabeb88139a15"></a> -<h2 class="memtitle"><span class="permalink"><a href="#ab432cc781460dbb619afabeb88139a15">◆ </a></span>IsLayerOptimizable() <span class="overload">[2/2]</span></h2> +<a id="aeb099eb45d76b4ce62d87be11c634538"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aeb099eb45d76b4ce62d87be11c634538">◆ </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> & </td> + <td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.xhtml">armnn::Layer</a> * </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> {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#ab432cc781460dbb619afabeb88139a15">IsLayerOptimizable</a>(&layer);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</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 &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> {</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <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>  </div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="comment">// A Layer is not optimizable if its name contains "unoptimizable"</span></div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keyword">const</span> std::string layerName(layer-><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>  <span class="keywordtype">bool</span> optimizable = layerName.find(<span class="stringliteral">"unoptimizable"</span>) == std::string::npos;</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  </div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">return</span> optimizable;</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> }</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">◆ </a></span>IsLayerSupported() <span class="overload">[1/2]</span></h2> +<a id="a0c99a284637e7c8d3547dac8686bed3a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0c99a284637e7c8d3547dac8686bed3a">◆ </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> * </td> + <td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.xhtml">armnn::Layer</a> & </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> {</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <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> </div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a> layerType = layer-><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>  <span class="keywordflow">switch</span> (layerType)</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  {</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <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>  <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>  <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>  <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>  <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>  <span class="comment">// Layer supported</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="comment">// Layer unsupported</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> }</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> {</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a0c99a284637e7c8d3547dac8686bed3a">IsLayerSupported</a>(&layer);</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div> </div><!-- fragment --> </div> </div> -<a id="a0c99a284637e7c8d3547dac8686bed3a"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a0c99a284637e7c8d3547dac8686bed3a">◆ </a></span>IsLayerSupported() <span class="overload">[2/2]</span></h2> +<a id="a138ca3929b888fa8d9088c076e9de48c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a138ca3929b888fa8d9088c076e9de48c">◆ </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> & </td> + <td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.xhtml">armnn::Layer</a> * </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> {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a0c99a284637e7c8d3547dac8686bed3a">IsLayerSupported</a>(&layer);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</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 &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> {</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <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>  </div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a> layerType = layer-><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>  <span class="keywordflow">switch</span> (layerType)</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  {</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <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>  <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>  <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>  <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>  <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>  <span class="comment">// Layer supported</span></div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="comment">// Layer unsupported</span></div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  }</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> }</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">◆ </a></span>IsLayerTypeSupported()</h2> +<a id="a8c69ca5000838df92215ca5053141cf6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8c69ca5000838df92215ca5053141cf6">◆ </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>< std::string &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::string & > </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< std::is_reference< T >::value, T >::value()</a>.</p> +<div class="fragment"><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> {</div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">switch</span> (type)</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  {</div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <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>  <span class="keywordflow">return</span> support.IsActivationSupported(infos[0],</div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  infos[1],</div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  *(PolymorphicDowncast<const ActivationDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">case</span> LayerType::Addition:</div> +<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <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>  <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>  <span class="keywordflow">return</span> support.IsArgMinMaxSupported(infos[0],</div> +<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  infos[1],</div> +<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  *(PolymorphicDowncast<const ArgMinMaxDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">case</span> LayerType::BatchMatMul:</div> +<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordflow">return</span> support.IsBatchMatMulSupported(infos[0],</div> +<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  infos[1],</div> +<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  infos[2],</div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  *(PolymorphicDowncast<const BatchMatMulDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">case</span> LayerType::BatchNormalization:</div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">return</span> support.IsBatchNormalizationSupported(infos[0],</div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  infos[1],</div> +<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  infos[2],</div> +<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  infos[3],</div> +<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  infos[4],</div> +<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  infos[5],</div> +<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div> +<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  BatchNormalizationDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <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>  <span class="keywordflow">return</span> support.IsBatchToSpaceNdSupported(infos[0],</div> +<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  infos[1],</div> +<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div> +<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  BatchToSpaceNdDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">case</span> LayerType::Cast:</div> +<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <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>  <span class="keywordflow">case</span> LayerType::ChannelShuffle:</div> +<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">return</span> support.IsChannelShuffleSupported(infos[0],</div> +<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  infos[1],</div> +<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div> +<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  ChannelShuffleDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">case</span> LayerType::Comparison:</div> +<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">return</span> support.IsComparisonSupported(infos[0],</div> +<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  infos[1],</div> +<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  infos[2],</div> +<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  *(PolymorphicDowncast<const ComparisonDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">case</span> LayerType::Concat:</div> +<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  {</div> +<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  std::vector<const TensorInfo*> inputInfos;</div> +<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">for</span> (uint32_t i = 0; i < (infos.size() - 1); i++)</div> +<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  {</div> +<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  inputInfos.push_back(&infos[i]);</div> +<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  }</div> +<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">return</span> support.IsConcatSupported(inputInfos,</div> +<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  infos[infos.size() - 1],</div> +<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  *(PolymorphicDowncast<const OriginsDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  }</div> +<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">case</span> LayerType::Constant:</div> +<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">return</span> support.IsConstantSupported(infos[0], reasonIfUnsupported);</div> +<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">case</span> LayerType::ConvertFp16ToFp32:</div> +<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <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>  <span class="keywordflow">case</span> LayerType::ConvertFp32ToFp16:</div> +<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <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>  <span class="keywordflow">case</span> LayerType::Convolution2d:</div> +<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  {</div> +<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">if</span> (infos.size() != 4)</div> +<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  {</div> +<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Invalid number of TransposeConvolution2d TensorInfos. "</span></div> +<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="stringliteral">"TensorInfos should be of format: {input, output, weights, biases}."</span>);</div> +<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  }</div> +<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  </div> +<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keyword">auto</span> desc = *(PolymorphicDowncast<const Convolution2dDescriptor*>(&descriptor));</div> +<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">if</span> (infos[3] == TensorInfo())</div> +<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  {</div> +<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">return</span> support.IsConvolution2dSupported(infos[0],</div> +<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  infos[1],</div> +<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  desc,</div> +<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  infos[2],</div> +<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  EmptyOptional(),</div> +<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  }</div> +<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  {</div> +<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">return</span> support.IsConvolution2dSupported(infos[0],</div> +<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  infos[1],</div> +<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  desc,</div> +<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  infos[2],</div> +<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  infos[3],</div> +<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  }</div> +<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  }</div> +<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">case</span> LayerType::Convolution3d:</div> +<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  {</div> +<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">if</span> (infos.size() != 4)</div> +<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  {</div> +<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Invalid number of Convolution3d TensorInfos. "</span></div> +<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="stringliteral">"TensorInfos should be of format: {input, output, weights, biases}."</span>);</div> +<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  }</div> +<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  </div> +<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keyword">auto</span> desc = *(PolymorphicDowncast<const Convolution3dDescriptor*>(&descriptor));</div> +<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">if</span> (infos[3] == TensorInfo())</div> +<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  {</div> +<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordflow">return</span> support.IsConvolution3dSupported(infos[0],</div> +<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  infos[1],</div> +<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  desc,</div> +<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  infos[2],</div> +<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  EmptyOptional(),</div> +<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  }</div> +<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  {</div> +<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">return</span> support.IsConvolution3dSupported(infos[0],</div> +<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  infos[1],</div> +<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  desc,</div> +<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  infos[2],</div> +<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  infos[3],</div> +<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  }</div> +<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  }</div> +<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <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>  <span class="keywordflow">return</span> support.IsDepthToSpaceSupported(infos[0],</div> +<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  infos[1],</div> +<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  *(PolymorphicDowncast<const DepthToSpaceDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">case</span> LayerType::DepthwiseConvolution2d:</div> +<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  {</div> +<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">if</span> (infos.size() != 4)</div> +<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  {</div> +<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Invalid number of DepthwiseConvolution2d TensorInfos. "</span></div> +<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="stringliteral">"TensorInfos should be of format: {input, output, weights, biases}."</span>);</div> +<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  }</div> +<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  </div> +<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keyword">auto</span> desc = *(PolymorphicDowncast<const DepthwiseConvolution2dDescriptor*>(&descriptor));</div> +<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">if</span> (infos[3] == TensorInfo())</div> +<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  {</div> +<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keywordflow">return</span> support.IsDepthwiseConvolutionSupported(infos[0],</div> +<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  infos[1],</div> +<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  desc,</div> +<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  infos[2],</div> +<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  EmptyOptional(),</div> +<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  }</div> +<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  {</div> +<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">return</span> support.IsDepthwiseConvolutionSupported(infos[0],</div> +<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  infos[1],</div> +<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  desc,</div> +<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  infos[2],</div> +<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  infos[3],</div> +<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div> +<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  }</div> +<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <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>  <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>  <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>  {</div> +<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keyword">auto</span> desc = *(PolymorphicDowncast<const DetectionPostProcessDescriptor*>(&descriptor));</div> +<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">return</span> support.IsDetectionPostProcessSupported(infos[0],</div> +<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  infos[1],</div> +<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  infos[2],</div> +<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  infos[3],</div> +<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  infos[4],</div> +<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  infos[5],</div> +<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  infos[6],</div> +<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  desc,</div> +<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  }</div> +<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">case</span> LayerType::Division:</div> +<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <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>  <span class="keywordflow">case</span> LayerType::ElementwiseUnary:</div> +<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">return</span> support.IsElementwiseUnarySupported(infos[0],</div> +<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  infos[1],</div> +<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div> +<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  ElementwiseUnaryDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <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>  <span class="keywordflow">return</span> support.IsFillSupported(infos[0],</div> +<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  infos[1],</div> +<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  *(PolymorphicDowncast<const FillDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">case</span> LayerType::Floor:</div> +<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <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>  <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>  <span class="keywordflow">return</span> support.IsFullyConnectedSupported(infos[0],</div> +<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  infos[1],</div> +<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  infos[2],</div> +<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  infos[3],</div> +<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div> +<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  FullyConnectedDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <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>  <span class="keywordflow">return</span> support.IsGatherSupported(infos[0],</div> +<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  infos[1],</div> +<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  infos[2],</div> +<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  *(PolymorphicDowncast<const GatherDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">case</span> LayerType::GatherNd:</div> +<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keywordflow">return</span> support.IsGatherNdSupported(infos[0],</div> +<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  infos[1],</div> +<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  infos[2],</div> +<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">case</span> LayerType::Input:</div> +<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keywordflow">return</span> support.IsInputSupported(infos[0], reasonIfUnsupported);</div> +<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keywordflow">case</span> LayerType::InstanceNormalization:</div> +<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">return</span> support.IsInstanceNormalizationSupported(infos[0],</div> +<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  infos[1],</div> +<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div> +<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  InstanceNormalizationDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keywordflow">case</span> LayerType::L2Normalization:</div> +<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keywordflow">return</span> support.IsL2NormalizationSupported(infos[0],</div> +<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  infos[1],</div> +<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div> +<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  L2NormalizationDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keywordflow">case</span> LayerType::LogicalBinary:</div> +<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="keywordflow">return</span> support.IsLogicalBinarySupported(infos[0],</div> +<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  infos[1],</div> +<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  infos[2],</div> +<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div> +<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  LogicalBinaryDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <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>  <span class="keywordflow">return</span> support.IsLogSoftmaxSupported(infos[0],</div> +<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  infos[1],</div> +<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  *(PolymorphicDowncast<const LogSoftmaxDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keywordflow">case</span> LayerType::Lstm:</div> +<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keywordflow">return</span> support.IsLstmSupported(infos[0],</div> +<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  infos[1],</div> +<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  infos[2],</div> +<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  infos[3],</div> +<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  infos[4],</div> +<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  infos[5],</div> +<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  infos[6],</div> +<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  *(PolymorphicDowncast<const LstmDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  lstmParamsInfo.value(),</div> +<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordflow">case</span> LayerType::Map:</div> +<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">case</span> LayerType::Maximum:</div> +<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <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>  <span class="keywordflow">case</span> LayerType::Mean:</div> +<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordflow">return</span> support.IsMeanSupported(infos[0],</div> +<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  infos[1],</div> +<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  *(PolymorphicDowncast<const MeanDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">case</span> LayerType::MemCopy:</div> +<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <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>  <span class="keywordflow">case</span> LayerType::MemImport:</div> +<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <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>  <span class="keywordflow">case</span> LayerType::Merge:</div> +<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordflow">return</span> support.IsMergeSupported(infos[0],</div> +<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  infos[1],</div> +<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  infos[2],</div> +<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">case</span> LayerType::Minimum:</div> +<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <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>  <span class="keywordflow">case</span> LayerType::Multiplication:</div> +<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <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>  <span class="keywordflow">case</span> LayerType::Normalization:</div> +<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordflow">return</span> support.IsNormalizationSupported(infos[0],</div> +<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  infos[1],</div> +<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div> +<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  NormalizationDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="keywordflow">case</span> LayerType::Output:</div> +<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keywordflow">return</span> support.IsOutputSupported(infos[0], reasonIfUnsupported);</div> +<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <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>  <span class="keywordflow">return</span> support.IsPadSupported(infos[0],</div> +<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  infos[1],</div> +<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  *(PolymorphicDowncast<const PadDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <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>  <span class="keywordflow">return</span> support.IsPermuteSupported(infos[0],</div> +<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  infos[1],</div> +<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  *(PolymorphicDowncast<const PermuteDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <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>  <span class="keywordflow">return</span> support.IsPooling2dSupported(infos[0],</div> +<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  infos[1],</div> +<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  *(PolymorphicDowncast<const Pooling2dDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <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>  <span class="keywordflow">return</span> support.IsPooling3dSupported(infos[0],</div> +<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  infos[1],</div> +<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  *(PolymorphicDowncast<const Pooling3dDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordflow">case</span> LayerType::Prelu:</div> +<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <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>  <span class="keywordflow">case</span> LayerType::QLstm:</div> +<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keywordflow">return</span> support.IsQLstmSupported(infos[0],</div> +<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  infos[1],</div> +<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  infos[2],</div> +<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  infos[3],</div> +<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  infos[4],</div> +<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  infos[5],</div> +<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  *(PolymorphicDowncast<const QLstmDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  lstmParamsInfo.value(),</div> +<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <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>  <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>  <span class="keywordflow">case</span> LayerType::QuantizedLstm:</div> +<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">return</span> support.IsQuantizedLstmSupported(infos[0],</div> +<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  infos[1],</div> +<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  infos[2],</div> +<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  infos[3],</div> +<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  infos[4],</div> +<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  quantizedLstmParamsInfo.value(),</div> +<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">case</span> LayerType::Rank:</div> +<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordflow">case</span> LayerType::Reshape:</div> +<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="keywordflow">return</span> support.IsReshapeSupported(infos[0],</div> +<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  infos[1],</div> +<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  *(PolymorphicDowncast<const ReshapeDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <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>  <span class="keywordflow">return</span> support.IsResizeSupported(infos[0],</div> +<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  infos[1],</div> +<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  *(PolymorphicDowncast<const ResizeDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <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>  <span class="keywordflow">return</span> support.IsReduceSupported(infos[0],</div> +<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  infos[1],</div> +<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  *(PolymorphicDowncast<const ReduceDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">case</span> LayerType::Shape:</div> +<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keywordflow">return</span> support.IsShapeSupported(infos[0],</div> +<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  infos[1],</div> +<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <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>  <span class="keywordflow">return</span> support.IsSliceSupported(infos[0],</div> +<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  infos[1],</div> +<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  *(PolymorphicDowncast<const SliceDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <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>  <span class="keywordflow">return</span> support.IsSoftmaxSupported(infos[0],</div> +<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  infos[1],</div> +<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  *(PolymorphicDowncast<const SoftmaxDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <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>  <span class="keywordflow">return</span> support.IsSpaceToBatchNdSupported(infos[0],</div> +<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  infos[1],</div> +<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div> +<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  SpaceToBatchNdDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <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>  <span class="keywordflow">return</span> support.IsSpaceToDepthSupported(infos[0],</div> +<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  infos[1],</div> +<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  *(PolymorphicDowncast<const SpaceToDepthDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <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>  {</div> +<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  std::vector<TensorInfo> outputInfos;</div> +<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="keywordflow">for</span> (uint32_t i = 1; i < infos.size(); i++)</div> +<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  {</div> +<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  outputInfos.push_back(infos[i]);</div> +<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  }</div> +<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keywordflow">return</span> support.IsSplitterSupported(infos[0],</div> +<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  {outputInfos.begin(), outputInfos.end()},</div> +<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  *(PolymorphicDowncast<const ViewsDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  }</div> +<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <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>  {</div> +<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  std::vector<const TensorInfo*> inputInfos;</div> +<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">for</span> (uint32_t i = 0; i < infos.size() - 1; i++)</div> +<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  {</div> +<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  inputInfos.push_back(&infos[i]);</div> +<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  }</div> +<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordflow">return</span> support.IsStackSupported(inputInfos,</div> +<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  infos[infos.size() - 1],</div> +<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  *(PolymorphicDowncast<const StackDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  }</div> +<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <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>  <span class="keywordflow">return</span> support.IsStridedSliceSupported(infos[0],</div> +<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  infos[1],</div> +<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  *(PolymorphicDowncast<const StridedSliceDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <span class="keywordflow">case</span> LayerType::Subtraction:</div> +<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <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>  <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>  <span class="keywordflow">return</span> support.IsTransposeSupported(infos[0],</div> +<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  infos[1],</div> +<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  *(PolymorphicDowncast<const TransposeDescriptor*>(&descriptor)),</div> +<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">case</span> LayerType::TransposeConvolution2d:</div> +<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  {</div> +<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordflow">if</span> (infos.size() != 4)</div> +<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  {</div> +<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Invalid number of TransposeConvolution2d TensorInfos. "</span></div> +<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="stringliteral">"TensorInfos should be of format: {input, output, weights, biases}."</span>);</div> +<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  }</div> +<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  </div> +<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keyword">auto</span> desc = *(PolymorphicDowncast<const TransposeConvolution2dDescriptor*>(&descriptor));</div> +<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="keywordflow">if</span> (infos[3] == TensorInfo())</div> +<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  {</div> +<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="keywordflow">return</span> support.IsTransposeConvolution2dSupported(infos[0],</div> +<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  infos[1],</div> +<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  desc,</div> +<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  infos[2],</div> +<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  EmptyOptional(),</div> +<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  }</div> +<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  {</div> +<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="keywordflow">return</span> support.IsTransposeConvolution2dSupported(infos[0],</div> +<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  infos[1],</div> +<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  desc,</div> +<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  infos[2],</div> +<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  infos[3],</div> +<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  }</div> +<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  }</div> +<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <span class="keywordflow">case</span> LayerType::UnidirectionalSequenceLstm:</div> +<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  {</div> +<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <span class="keyword">auto</span> desc = *(PolymorphicDowncast<const UnidirectionalSequenceLstmDescriptor*>(&descriptor));</div> +<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="keywordflow">return</span> support.IsUnidirectionalSequenceLstmSupported(infos[0],</div> +<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  infos[1],</div> +<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  infos[2],</div> +<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  infos[3],</div> +<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  infos[4],</div> +<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  infos[5],</div> +<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  desc,</div> +<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  lstmParamsInfo.value(),</div> +<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  reasonIfUnsupported);</div> +<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  }</div> +<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="keywordflow">case</span> LayerType::Unmap:</div> +<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="comment">// layers not supported in neon by default:</span></div> +<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="comment">// debug, fakequantization, precompiled,</span></div> +<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="comment">// standin, switch</span></div> +<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  }</div> +<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> }</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< std::is_reference< T >::value, T >::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> {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">switch</span> (type)</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  {</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <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>  <span class="keywordflow">return</span> support.IsActivationSupported(infos[0],</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  infos[1],</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  *(PolymorphicDowncast<const ActivationDescriptor*>(&descriptor)),</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  reasonIfUnsupported);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">case</span> LayerType::Addition:</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <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>  <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>  <span class="keywordflow">return</span> support.IsArgMinMaxSupported(infos[0],</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  infos[1],</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  *(PolymorphicDowncast<const ArgMinMaxDescriptor*>(&descriptor)),</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  reasonIfUnsupported);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">case</span> LayerType::BatchMatMul:</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordflow">return</span> support.IsBatchMatMulSupported(infos[0],</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  infos[1],</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  infos[2],</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  *(PolymorphicDowncast<const BatchMatMulDescriptor*>(&descriptor)),</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  reasonIfUnsupported);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">case</span> LayerType::BatchNormalization:</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">return</span> support.IsBatchNormalizationSupported(infos[0],</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  infos[1],</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  infos[2],</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  infos[3],</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  infos[4],</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  infos[5],</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  BatchNormalizationDescriptor*>(&descriptor)),</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  reasonIfUnsupported);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <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>  <span class="keywordflow">return</span> support.IsBatchToSpaceNdSupported(infos[0],</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  infos[1],</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  BatchToSpaceNdDescriptor*>(&descriptor)),</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  reasonIfUnsupported);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">case</span> LayerType::Cast:</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <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>  <span class="keywordflow">case</span> LayerType::ChannelShuffle:</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">return</span> support.IsChannelShuffleSupported(infos[0],</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  infos[1],</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  ChannelShuffleDescriptor*>(&descriptor)),</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  reasonIfUnsupported);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">case</span> LayerType::Comparison:</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">return</span> support.IsComparisonSupported(infos[0],</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  infos[1],</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  infos[2],</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  *(PolymorphicDowncast<const ComparisonDescriptor*>(&descriptor)),</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  reasonIfUnsupported);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">case</span> LayerType::Concat:</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  std::vector<const TensorInfo*> inputInfos;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">for</span> (uint32_t i = 0; i < (infos.size() - 1); i++)</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  inputInfos.push_back(&infos[i]);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">return</span> support.IsConcatSupported(inputInfos,</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  infos[infos.size() - 1],</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  *(PolymorphicDowncast<const OriginsDescriptor*>(&descriptor)),</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  reasonIfUnsupported);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  }</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">case</span> LayerType::Constant:</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">return</span> support.IsConstantSupported(infos[0], reasonIfUnsupported);</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">case</span> LayerType::ConvertFp16ToFp32:</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <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>  <span class="keywordflow">case</span> LayerType::ConvertFp32ToFp16:</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <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>  <span class="keywordflow">case</span> LayerType::Convolution2d:</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  {</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">if</span> (infos.size() != 4)</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Invalid number of TransposeConvolution2d TensorInfos. "</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="stringliteral">"TensorInfos should be of format: {input, output, weights, biases}."</span>);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  }</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keyword">auto</span> desc = *(PolymorphicDowncast<const Convolution2dDescriptor*>(&descriptor));</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">if</span> (infos[3] == TensorInfo())</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  {</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">return</span> support.IsConvolution2dSupported(infos[0],</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  infos[1],</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  desc,</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  infos[2],</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  EmptyOptional(),</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  reasonIfUnsupported);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">return</span> support.IsConvolution2dSupported(infos[0],</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  infos[1],</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  desc,</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  infos[2],</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  infos[3],</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  reasonIfUnsupported);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  }</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">case</span> LayerType::Convolution3d:</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">if</span> (infos.size() != 4)</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  {</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Invalid number of Convolution3d TensorInfos. "</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="stringliteral">"TensorInfos should be of format: {input, output, weights, biases}."</span>);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keyword">auto</span> desc = *(PolymorphicDowncast<const Convolution3dDescriptor*>(&descriptor));</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">if</span> (infos[3] == TensorInfo())</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordflow">return</span> support.IsConvolution3dSupported(infos[0],</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  infos[1],</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  desc,</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  infos[2],</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  EmptyOptional(),</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  reasonIfUnsupported);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  }</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">return</span> support.IsConvolution3dSupported(infos[0],</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  infos[1],</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  desc,</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  infos[2],</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  infos[3],</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  reasonIfUnsupported);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  }</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <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>  <span class="keywordflow">return</span> support.IsDepthToSpaceSupported(infos[0],</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  infos[1],</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  *(PolymorphicDowncast<const DepthToSpaceDescriptor*>(&descriptor)),</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  reasonIfUnsupported);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">case</span> LayerType::DepthwiseConvolution2d:</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">if</span> (infos.size() != 4)</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Invalid number of DepthwiseConvolution2d TensorInfos. "</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="stringliteral">"TensorInfos should be of format: {input, output, weights, biases}."</span>);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keyword">auto</span> desc = *(PolymorphicDowncast<const DepthwiseConvolution2dDescriptor*>(&descriptor));</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">if</span> (infos[3] == TensorInfo())</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  {</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keywordflow">return</span> support.IsDepthwiseConvolutionSupported(infos[0],</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  infos[1],</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  desc,</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  infos[2],</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  EmptyOptional(),</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  reasonIfUnsupported);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  }</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  {</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">return</span> support.IsDepthwiseConvolutionSupported(infos[0],</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  infos[1],</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  desc,</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  infos[2],</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  infos[3],</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  reasonIfUnsupported);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  }</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <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>  <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>  <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>  {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keyword">auto</span> desc = *(PolymorphicDowncast<const DetectionPostProcessDescriptor*>(&descriptor));</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">return</span> support.IsDetectionPostProcessSupported(infos[0],</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  infos[1],</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  infos[2],</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  infos[3],</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  infos[4],</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  infos[5],</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  infos[6],</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  desc,</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  reasonIfUnsupported);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  }</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">case</span> LayerType::Division:</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <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>  <span class="keywordflow">case</span> LayerType::ElementwiseUnary:</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">return</span> support.IsElementwiseUnarySupported(infos[0],</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  infos[1],</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  ElementwiseUnaryDescriptor*>(&descriptor)),</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  reasonIfUnsupported);</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <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>  <span class="keywordflow">return</span> support.IsFillSupported(infos[0],</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  infos[1],</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  *(PolymorphicDowncast<const FillDescriptor*>(&descriptor)),</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  reasonIfUnsupported);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">case</span> LayerType::Floor:</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <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>  <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>  <span class="keywordflow">return</span> support.IsFullyConnectedSupported(infos[0],</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  infos[1],</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  infos[2],</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  infos[3],</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  FullyConnectedDescriptor*>(&descriptor)),</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  reasonIfUnsupported);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <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>  <span class="keywordflow">return</span> support.IsGatherSupported(infos[0],</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  infos[1],</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  infos[2],</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  *(PolymorphicDowncast<const GatherDescriptor*>(&descriptor)),</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  reasonIfUnsupported);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">case</span> LayerType::GatherNd:</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keywordflow">return</span> support.IsGatherNdSupported(infos[0],</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  infos[1],</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  infos[2],</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  reasonIfUnsupported);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">case</span> LayerType::Input:</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keywordflow">return</span> support.IsInputSupported(infos[0], reasonIfUnsupported);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keywordflow">case</span> LayerType::InstanceNormalization:</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">return</span> support.IsInstanceNormalizationSupported(infos[0],</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  infos[1],</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  InstanceNormalizationDescriptor*>(&descriptor)),</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  reasonIfUnsupported);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keywordflow">case</span> LayerType::L2Normalization:</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keywordflow">return</span> support.IsL2NormalizationSupported(infos[0],</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  infos[1],</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  L2NormalizationDescriptor*>(&descriptor)),</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  reasonIfUnsupported);</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keywordflow">case</span> LayerType::LogicalBinary:</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="keywordflow">return</span> support.IsLogicalBinarySupported(infos[0],</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  infos[1],</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  infos[2],</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  LogicalBinaryDescriptor*>(&descriptor)),</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  reasonIfUnsupported);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <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>  <span class="keywordflow">return</span> support.IsLogSoftmaxSupported(infos[0],</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  infos[1],</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  *(PolymorphicDowncast<const LogSoftmaxDescriptor*>(&descriptor)),</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  reasonIfUnsupported);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keywordflow">case</span> LayerType::Lstm:</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keywordflow">return</span> support.IsLstmSupported(infos[0],</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  infos[1],</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  infos[2],</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  infos[3],</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  infos[4],</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  infos[5],</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  infos[6],</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  *(PolymorphicDowncast<const LstmDescriptor*>(&descriptor)),</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  lstmParamsInfo.value(),</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  reasonIfUnsupported);</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordflow">case</span> LayerType::Map:</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">case</span> LayerType::Maximum:</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <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>  <span class="keywordflow">case</span> LayerType::Mean:</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordflow">return</span> support.IsMeanSupported(infos[0],</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  infos[1],</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  *(PolymorphicDowncast<const MeanDescriptor*>(&descriptor)),</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  reasonIfUnsupported);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">case</span> LayerType::MemCopy:</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <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>  <span class="keywordflow">case</span> LayerType::MemImport:</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <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>  <span class="keywordflow">case</span> LayerType::Merge:</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordflow">return</span> support.IsMergeSupported(infos[0],</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  infos[1],</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  infos[2],</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  reasonIfUnsupported);</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">case</span> LayerType::Minimum:</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <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>  <span class="keywordflow">case</span> LayerType::Multiplication:</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <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>  <span class="keywordflow">case</span> LayerType::Normalization:</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordflow">return</span> support.IsNormalizationSupported(infos[0],</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  infos[1],</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  NormalizationDescriptor*>(&descriptor)),</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  reasonIfUnsupported);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="keywordflow">case</span> LayerType::Output:</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keywordflow">return</span> support.IsOutputSupported(infos[0], reasonIfUnsupported);</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <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>  <span class="keywordflow">return</span> support.IsPadSupported(infos[0],</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  infos[1],</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  *(PolymorphicDowncast<const PadDescriptor*>(&descriptor)),</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  reasonIfUnsupported);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <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>  <span class="keywordflow">return</span> support.IsPermuteSupported(infos[0],</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  infos[1],</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  *(PolymorphicDowncast<const PermuteDescriptor*>(&descriptor)),</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  reasonIfUnsupported);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <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>  <span class="keywordflow">return</span> support.IsPooling2dSupported(infos[0],</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  infos[1],</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  *(PolymorphicDowncast<const Pooling2dDescriptor*>(&descriptor)),</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  reasonIfUnsupported);</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <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>  <span class="keywordflow">return</span> support.IsPooling3dSupported(infos[0],</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  infos[1],</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  *(PolymorphicDowncast<const Pooling3dDescriptor*>(&descriptor)),</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  reasonIfUnsupported);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordflow">case</span> LayerType::Prelu:</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <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>  <span class="keywordflow">case</span> LayerType::QLstm:</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keywordflow">return</span> support.IsQLstmSupported(infos[0],</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  infos[1],</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  infos[2],</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  infos[3],</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  infos[4],</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  infos[5],</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  *(PolymorphicDowncast<const QLstmDescriptor*>(&descriptor)),</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  lstmParamsInfo.value(),</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  reasonIfUnsupported);</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <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>  <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>  <span class="keywordflow">case</span> LayerType::QuantizedLstm:</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">return</span> support.IsQuantizedLstmSupported(infos[0],</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  infos[1],</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  infos[2],</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  infos[3],</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  infos[4],</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  quantizedLstmParamsInfo.value(),</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  reasonIfUnsupported);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">case</span> LayerType::Rank:</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordflow">case</span> LayerType::Reshape:</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="keywordflow">return</span> support.IsReshapeSupported(infos[0],</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  infos[1],</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  *(PolymorphicDowncast<const ReshapeDescriptor*>(&descriptor)),</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  reasonIfUnsupported);</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <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>  <span class="keywordflow">return</span> support.IsResizeSupported(infos[0],</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  infos[1],</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  *(PolymorphicDowncast<const ResizeDescriptor*>(&descriptor)),</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  reasonIfUnsupported);</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <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>  <span class="keywordflow">return</span> support.IsReduceSupported(infos[0],</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  infos[1],</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  *(PolymorphicDowncast<const ReduceDescriptor*>(&descriptor)),</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  reasonIfUnsupported);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">case</span> LayerType::Shape:</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keywordflow">return</span> support.IsShapeSupported(infos[0],</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  infos[1],</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  reasonIfUnsupported);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <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>  <span class="keywordflow">return</span> support.IsSliceSupported(infos[0],</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  infos[1],</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  *(PolymorphicDowncast<const SliceDescriptor*>(&descriptor)),</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  reasonIfUnsupported);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <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>  <span class="keywordflow">return</span> support.IsSoftmaxSupported(infos[0],</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  infos[1],</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  *(PolymorphicDowncast<const SoftmaxDescriptor*>(&descriptor)),</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  reasonIfUnsupported);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <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>  <span class="keywordflow">return</span> support.IsSpaceToBatchNdSupported(infos[0],</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  infos[1],</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a><<span class="keyword">const</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  SpaceToBatchNdDescriptor*>(&descriptor)),</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  reasonIfUnsupported);</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <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>  <span class="keywordflow">return</span> support.IsSpaceToDepthSupported(infos[0],</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  infos[1],</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  *(PolymorphicDowncast<const SpaceToDepthDescriptor*>(&descriptor)),</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  reasonIfUnsupported);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <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>  {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  std::vector<TensorInfo> outputInfos;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="keywordflow">for</span> (uint32_t i = 1; i < infos.size(); i++)</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  {</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  outputInfos.push_back(infos[i]);</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  }</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keywordflow">return</span> support.IsSplitterSupported(infos[0],</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  {outputInfos.begin(), outputInfos.end()},</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  *(PolymorphicDowncast<const ViewsDescriptor*>(&descriptor)),</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  reasonIfUnsupported);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  }</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <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>  {</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  std::vector<const TensorInfo*> inputInfos;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">for</span> (uint32_t i = 0; i < infos.size() - 1; i++)</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  {</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  inputInfos.push_back(&infos[i]);</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  }</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordflow">return</span> support.IsStackSupported(inputInfos,</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  infos[infos.size() - 1],</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  *(PolymorphicDowncast<const StackDescriptor*>(&descriptor)),</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  reasonIfUnsupported);</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <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>  <span class="keywordflow">return</span> support.IsStridedSliceSupported(infos[0],</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  infos[1],</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  *(PolymorphicDowncast<const StridedSliceDescriptor*>(&descriptor)),</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  reasonIfUnsupported);</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <span class="keywordflow">case</span> LayerType::Subtraction:</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <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>  <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>  <span class="keywordflow">return</span> support.IsTransposeSupported(infos[0],</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  infos[1],</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  *(PolymorphicDowncast<const TransposeDescriptor*>(&descriptor)),</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  reasonIfUnsupported);</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">case</span> LayerType::TransposeConvolution2d:</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordflow">if</span> (infos.size() != 4)</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Invalid number of TransposeConvolution2d TensorInfos. "</span></div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="stringliteral">"TensorInfos should be of format: {input, output, weights, biases}."</span>);</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  }</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> </div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keyword">auto</span> desc = *(PolymorphicDowncast<const TransposeConvolution2dDescriptor*>(&descriptor));</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="keywordflow">if</span> (infos[3] == TensorInfo())</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  {</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="keywordflow">return</span> support.IsTransposeConvolution2dSupported(infos[0],</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  infos[1],</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  desc,</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  infos[2],</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  EmptyOptional(),</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  reasonIfUnsupported);</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  }</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  {</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="keywordflow">return</span> support.IsTransposeConvolution2dSupported(infos[0],</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  infos[1],</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  desc,</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  infos[2],</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  infos[3],</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  reasonIfUnsupported);</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  }</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  }</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <span class="keywordflow">case</span> LayerType::UnidirectionalSequenceLstm:</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  {</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <span class="keyword">auto</span> desc = *(PolymorphicDowncast<const UnidirectionalSequenceLstmDescriptor*>(&descriptor));</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="keywordflow">return</span> support.IsUnidirectionalSequenceLstmSupported(infos[0],</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  infos[1],</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  infos[2],</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  infos[3],</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  infos[4],</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  infos[5],</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  desc,</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  lstmParamsInfo.value(),</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  reasonIfUnsupported);</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  }</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="keywordflow">case</span> LayerType::Unmap:</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="comment">// layers not supported in neon by default:</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="comment">// debug, fakequantization, precompiled,</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="comment">// standin, switch</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  }</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span> }</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 &paramsInfo, const TensorInfo &indicesInfo, const TensorInfo &outputInfo, Decoder< float > &params, const int32_t *indices, Encoder< float > &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 &inputInfo, const SliceDescriptor &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 &data, std::vector< ITensorHandle *> inputs, std::vector< ITensorHandle *> 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 &data, std::vector< std::unique_ptr< Decoder< float >>> &inputs, Encoder< float > &output, const TensorInfo &inputInfo, const TensorInfo &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< float > &output, const TensorShape &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 &inputInfo, const TensorInfo &outputInfo, Decoder< float > &input, Encoder< float > &output, const std::vector< uint32_t > 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 &dstShape, const armnn::PermutationVector &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 &inputInfo, const DepthToSpaceDescriptor &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< float > &in, OUT *out, const TensorInfo &inputTensorInfo, const TensorInfo &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 &dstShape, const armnn::PermutationVector &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 &boxEncodingsInfo, const TensorInfo &scoresInfo, const TensorInfo &anchorsInfo, const TensorInfo &detectionBoxesInfo, const TensorInfo &detectionClassesInfo, const TensorInfo &detectionScoresInfo, const TensorInfo &numDetectionsInfo, const DetectionPostProcessDescriptor &desc, Decoder< float > &boxEncodings, Decoder< float > &scores, Decoder< float > &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 &inputInfo, const TensorInfo &outputInfo, const ITensorHandle *inputHandle, ITensorHandle *outputHandle, const PadQueueDescriptor &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< float > &input, Encoder< float > &output, const TensorInfo &inputInfo, const LogSoftmaxDescriptor &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 &inputInfo, const TensorInfo &outputInfo, const SpaceToBatchNdDescriptor &params, Decoder< float > &inputData, Encoder< float > &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 &inputInfo, const StridedSliceDescriptor &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< float > &rInputDecoder, Encoder< float > &rOutputEncoder, const TensorInfo &inputInfo, const TensorInfo &outputInfo, const Pooling3dDescriptor &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 &inputInfo, const TensorInfo &outputInfo, const SpaceToDepthDescriptor &params, Decoder< float > &inputData, Encoder< float > &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 &dataLayout, const TensorInfo &inputTensorInfo, const TensorInfo &outputTensorInfo, const std::vector< unsigned int > &blockShape, const std::vector< std::pair< unsigned int, unsigned int >> &cropsData, Decoder< float > &inputDecoder, Encoder< float > &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< float > &rInputDecoder, Encoder< float > &rOutputEncoder, const TensorInfo &inputInfo, const TensorInfo &outputInfo, const Pooling2dDescriptor &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< float > &in, Encoder< float > &out, const TensorInfo &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< float > &in, const TensorInfo &inputInfo, Encoder< float > &out, const TensorInfo &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 &rInputShape, Decoder< float > &rInputDecoder, const TensorShape &rOutputShape, Encoder< float > &rOutputEncoder, const TensorShape &rWeightsShape, Decoder< float > &rWeightDecoder, Decoder< float > *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">◆ </a></span>IsOperationQueueDescriptor() <span class="overload">[1/4]</span></h2> +<a id="a05323af66b9f762e269a27562a2bbdd0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a05323af66b9f762e269a27562a2bbdd0">◆ </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 & </td> + <td class="paramtype">const <a class="el" href="structarmnn_1_1_constant_queue_descriptor.xhtml">ConstantQueueDescriptor</a> & </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> { <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> { <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> { <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> { <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">◆ </a></span>IsOperationQueueDescriptor() <span class="overload">[3/4]</span></h2> +<a id="a91332212b6a2cc9c0ea32af03c600b4f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a91332212b6a2cc9c0ea32af03c600b4f">◆ </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> & </td> + <td class="paramtype">const <a class="el" href="structarmnn_1_1_permute_queue_descriptor.xhtml">PermuteQueueDescriptor</a> & </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> { <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> { <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">◆ </a></span>IsOperationQueueDescriptor() <span class="overload">[4/4]</span></h2> +<a id="ad05c0670c947d35d39b3b0217e9975cf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad05c0670c947d35d39b3b0217e9975cf">◆ </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> & </td> + <td class="paramtype">const QueueDescriptorType & </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> { <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> { <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> {</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">return</span> IsDataType<DataType::QAsymmS8>(info);</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> }</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> {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">return</span> IsDataType<DataType::QAsymmS8>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> }</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> {</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">return</span> IsDataType<DataType::QAsymmU8>(info);</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> }</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> {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">return</span> IsDataType<DataType::QAsymmU8>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> }</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> {</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">return</span> IsDataType<DataType::QSymmS16>(info);</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> }</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> {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">return</span> IsDataType<DataType::QSymmS16>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> }</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> {</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> IsDataType<DataType::QSymmS8>(info);</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</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> {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> IsDataType<DataType::QSymmS8>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</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> {</div> +<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">return</span> dataType == DataType::QAsymmU8 ||</div> +<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  dataType == DataType::QAsymmS8 ||</div> +<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  dataType == DataType::QSymmS8;</div> +<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> }</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> {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">return</span> dataType == DataType::QAsymmU8 ||</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  dataType == DataType::QAsymmS8 ||</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  dataType == DataType::QSymmS8;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> }</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> {</div> +<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordflow">return</span> std::is_integral<T>::value;</div> +<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> }</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> {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordflow">return</span> std::is_integral<T>::value;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> }</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> {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <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> }</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> {</div> +<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <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> }</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> {</div> +<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordtype">bool</span> ready = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <a class="code" href="namespacearmnn.xhtml#afce94270d9c4a51cd0c4ac6a58af4e26">ForEachLayerInput</a>(layerInfos, layerInfo,</div> +<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  [&ready](LayerSelectionInfo& parentInfo)</div> +<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  {</div> +<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">if</span> (!parentInfo.m_IsProcessed)</div> +<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  {</div> +<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  ready = false;</div> +<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  }</div> +<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  });</div> +<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="keywordflow">return</span> ready;</div> +<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> }</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> {</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordtype">bool</span> ready = <span class="keyword">true</span>;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <a class="code" href="namespacearmnn.xhtml#afce94270d9c4a51cd0c4ac6a58af4e26">ForEachLayerInput</a>(layerInfos, layerInfo,</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  [&ready](LayerSelectionInfo& parentInfo)</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">if</span> (!parentInfo.m_IsProcessed)</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  {</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  ready = false;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  }</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  });</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="keywordflow">return</span> ready;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> }</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 &layerInfos, LayerSelectionInfo &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> {</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">return</span> IsDataType<DataType::Signed32>(info);</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> }</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> {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">return</span> IsDataType<DataType::Signed32>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> }</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">◆ </a></span>IsStackSupported()</h2> +<a id="a1ef301853035778cebf30782cae7b86d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1ef301853035778cebf30782cae7b86d">◆ </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< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *> </td> + <td class="paramtype">const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> * > </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">◆ </a></span>IsSupportedForDataTypeGeneric()</h2> +<a id="a23a5267702f036fe70a34f91e6c07490"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a23a5267702f036fe70a34f91e6c07490">◆ </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>< std::string &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::string & > </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> {</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">switch</span>(dataType)</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">case</span> DataType::Float16:</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> float16FuncPtr(reasonIfUnsupported, std::forward<Params>(params)...);</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">case</span> DataType::Float32:</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">return</span> float32FuncPtr(reasonIfUnsupported, std::forward<Params>(params)...);</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">case</span> DataType::QAsymmU8:</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">return</span> uint8FuncPtr(reasonIfUnsupported, std::forward<Params>(params)...);</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">case</span> DataType::Signed32:</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> int32FuncPtr(reasonIfUnsupported, std::forward<Params>(params)...);</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">case</span> DataType::Boolean:</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">return</span> booleanFuncPtr(reasonIfUnsupported, std::forward<Params>(params)...);</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  }</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> }</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> {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">switch</span>(dataType)</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">case</span> DataType::Float16:</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> float16FuncPtr(reasonIfUnsupported, std::forward<Params>(params)...);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">return</span> float32FuncPtr(reasonIfUnsupported, std::forward<Params>(params)...);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">return</span> uint8FuncPtr(reasonIfUnsupported, std::forward<Params>(params)...);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> int32FuncPtr(reasonIfUnsupported, std::forward<Params>(params)...);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">case</span> DataType::Boolean:</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">return</span> booleanFuncPtr(reasonIfUnsupported, std::forward<Params>(params)...);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  }</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> }</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">◆ </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 * </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">◆ </a></span>LayerEnumOf() <span class="overload">[2/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#afb1e69829289fb07cc349c0884f27abd">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[3/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#acc630e11a5baa28ad5723568a7a60109">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[4/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a324e860c347972fce7a1c07531bed06e">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[5/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a317945cbed8d24f155e43d976a355c14">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[6/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#ae22db3ab5196edbb2e4e5244adc512e3">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[7/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a87ffe3fb58ec36989d343e53e23fb0f8">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[8/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a0bce3e1a80419bc6966f60c8f2db9b92">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[9/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#af99801cff508d065bede5283a0ea1dc9">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[10/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a43b8024cb70c07116be132ca28b12a21">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[11/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a300c356944bb1e9d2dff6191d1c3501c">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[12/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a307007c2249288fe158bfdfaf9e1c413">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[13/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a4471d39d8390fc550c1f8688639e66f5">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[14/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#af8df06bed5f1257864645e45948afa5c">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[15/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#ab2f52d0c728933e36f581a07676d9fe9">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[16/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a8aa8025b92a7d302536ab63c1f0ea99c">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[17/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#ad596268fcd03c87a4b6fde86f4732546">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[18/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a939154289f544a02baec0735b27b8894">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[19/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a26a46c27bca08b5bd26abba341f1d795">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[20/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a95e2d190d7483017b4f4841dd07776e5">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[21/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a22772d461066f995cd72d13066b0f46d">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[22/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a955b1001b8c57c60ce443a1e31468f20">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[23/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a72f7601d11f32c8d9ccb49a80fcf662a">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[24/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a4acae0cdcdfab8e941af5c4e42e58cb3">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[25/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a12fdb9a7f3cb197316e3e67e036216dc">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[26/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a575f5487e62465b6b9edbc447a26f32f">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[27/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#aa689e4a3aa77e9d9e5851f566c5eb8b3">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[28/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a548fb17a9bff172e751ae4bd3add62b5">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[29/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#af786ed151cee66263c0ce890d11d15c9">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[30/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#adef1c8c63daa9d348a29e74eac33a054">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[31/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a57bcf309be7adcc91001834979f87bde">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[32/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a36f16b97bcb662caaa4eae24ea16cccf">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[33/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a78bb83e7a83c970a54ffe923386a79d0">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[34/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#afb6f9bd4f43118749a0336074bed7b35">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[35/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a0d08fb555c6d1cba705fd73b71797a28">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[36/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#ac2bd34e0328cda2e23ccb4c79fa72960">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[37/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a6b231c8a547d4030d9a4a1618810c20b">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[38/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#af079ba32db74f53aba1ad19193cd2a4b">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[39/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#aa17969606f64ea581c28431f2395e653">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[40/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a70f3d83f6d1e3918eab895c8083058fa">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[41/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a9e8199bdc39f928f694591a41d7aa0c0">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[42/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#ad32a13408ace1c1fa520ed64a2cbe70f">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[43/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a40f1546c0fa69f318eeab4b29cc64b70">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[44/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a140713619ee498a149854a5376b8d072">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[45/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a7a6e68f66d1d3819640b0f2d46a55fd1">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[46/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#ab6f1994db909dcc399cb1f8bc50c2d3d">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[47/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a1e6b17606926b8f69dbeda7f7ff1df95">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[48/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#ade84059b48b38da3a233bed287864c5b">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[49/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a5afa84427b91f83f2977382da7a9c62f">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[50/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a6e5eaa19ff232f11daa9a1c6caccf7fe">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[51/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a58a5defa35b12773a97760efadffef4f">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[52/73]</span></h2> +<a id="a1da1712abdf8eb56a3fd34d09a30f88a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1da1712abdf8eb56a3fd34d09a30f88a">◆ </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> * </td> + <td class="paramtype">const <a class="el" href="classarmnn_1_1_q_lstm_layer.xhtml">QLstmLayer</a> * </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">◆ </a></span>LayerEnumOf() <span class="overload">[53/73]</span></h2> +<a id="a31bcd6f755df954a4d7b020a09499105"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a31bcd6f755df954a4d7b020a09499105">◆ </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> * </td> + <td class="paramtype">const <a class="el" href="classarmnn_1_1_quantized_lstm_layer.xhtml">QuantizedLstmLayer</a> * </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">◆ </a></span>LayerEnumOf() <span class="overload">[54/73]</span></h2> +<a id="aaaaf64c0888ab25bfae770bd4c2ec34b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aaaaf64c0888ab25bfae770bd4c2ec34b">◆ </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> * </td> + <td class="paramtype">const <a class="el" href="classarmnn_1_1_quantize_layer.xhtml">QuantizeLayer</a> * </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">◆ </a></span>LayerEnumOf() <span class="overload">[55/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a0c5d6fb244a3e38da85257afb91edd80">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[56/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a2419883b22222c7bad914095ae3a9ad2">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[57/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a6a17f58da2071720e3003a56a092aab3">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[58/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#aafc370ea363f0565c3a8bced1e37c79e">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[59/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a914ed6d4cdc4525ff0020148d4c4155c">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[60/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a3cbbb4e00618b072ace46751e660a295">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[61/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#af6af4b51e08d3e811620811ab5e0cd2d">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[62/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#ac2d31ced5505a9d05287f5b71d25e34a">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[63/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a81c31de4f532a95ab85ed6d999029332">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[64/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a24d3abbfc1ed81df673452c7148aa0cc">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[65/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#ab676aab9119d1417764849099a099ecf">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[66/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a1b5ff142f1d4420a8d83d9bcff1bfff4">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[67/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#ad640080ff4ea3e4f9ff05823e32ce15f">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[68/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a9cc235c8c5e2ef3d2788cd558d676b0a">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[69/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a110b9fdf7f17a1d065cd59ebc4bb76f7">◆ </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">◆ </a></span>LayerEnumOf() <span class="overload">[70/73]</span></h2> +<a id="ac4fb1513cf6f4f3f40ab3d6559ec4067"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac4fb1513cf6f4f3f40ab3d6559ec4067">◆ </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> * </td> - <td class="paramname"></td><td>)</td> + <td class="paramtype">const T * </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">◆ </a></span>LayerEnumOf() <span class="overload">[71/73]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a60af5a86cf0261d0bdf4312736ab4461">◆ </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">◆ </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> * </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">◆ </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> {</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keywordflow">switch</span>(level)</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  {</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keywordflow">case</span> LogSeverity::Trace:</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Trace"</span>;</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <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>  <span class="keywordflow">return</span> <span class="stringliteral">"Debug"</span>;</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">case</span> LogSeverity::Info:</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Info"</span>;</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">case</span> LogSeverity::Warning:</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Warning"</span>;</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">case</span> LogSeverity::Error:</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Error"</span>;</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">case</span> LogSeverity::Fatal:</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Fatal"</span>;</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Log"</span>;</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  }</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> }</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> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keywordflow">switch</span>(level)</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keywordflow">case</span> LogSeverity::Trace:</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Trace"</span>;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <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>  <span class="keywordflow">return</span> <span class="stringliteral">"Debug"</span>;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">case</span> LogSeverity::Info:</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Info"</span>;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">case</span> LogSeverity::Warning:</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Warning"</span>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">case</span> LogSeverity::Error:</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Error"</span>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">case</span> LogSeverity::Fatal:</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Fatal"</span>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Log"</span>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  }</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> }</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 &inputInfo, const T *inputData, LayerGuid guid, const std::string &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> {</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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>  </div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordtype">bool</span> axisIsValid = ValidateAxis(descriptor.m_Axis, numDimensions);</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <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>  <span class="stringliteral">"Axis index is not in range [-numDimensions, numDimensions)."</span>);</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(axisIsValid);</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  </div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> uAxis = descriptor.m_Axis < 0 ?</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  numDimensions - armnn::numeric_cast<unsigned int>(std::abs(descriptor.m_Axis)) :</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <a class="code" href="namespacearmnn.xhtml">armnn</a>::<a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">numeric_cast</a><unsigned int>(descriptor.m_Axis);</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">const</span> TensorShape& inputShape = inputInfo.GetShape();</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <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>  <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>  <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>  uAxis + 1,</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  inputShape.GetNumDimensions());</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  </div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outer = 0; outer < outerSize; ++outer)</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  {</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inner = 0; inner < innerSize; ++inner)</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  {</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="comment">// Find max</span></div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  input[outer * axisSize * innerSize + inner];</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1u; i < axisSize; ++i)</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  input[(outer * axisSize + i) * innerSize + inner];</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  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>  }</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  </div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="comment">// Compute sum</span></div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordtype">float</span> sum = 0.0f;</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i < axisSize; ++i)</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  input[(outer * axisSize + i) * innerSize + inner];</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  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>  }</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  </div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="comment">// Compute log sum</span></div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <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>  </div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="comment">// Compute result</span></div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i < axisSize; ++i)</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <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>  </div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  input [index];</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  output[index];</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  </div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  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>  }</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  }</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> }</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< IType >::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< IType >::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< IType >::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< IType >::Set()</a>.</p> -<div class="fragment"><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordtype">bool</span> axisIsValid = ValidateAxis(descriptor.m_Axis, numDimensions);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <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>  <span class="stringliteral">"Axis index is not in range [-numDimensions, numDimensions)."</span>);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(axisIsValid);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> uAxis = descriptor.m_Axis < 0 ?</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  numDimensions - <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>>(std::abs(descriptor.m_Axis)) :</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  armnn::numeric_cast<unsigned int>(descriptor.m_Axis);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">const</span> TensorShape& inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <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>  <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>  <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>  uAxis + 1,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  inputShape.GetNumDimensions());</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outer = 0; outer < outerSize; ++outer)</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  {</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inner = 0; inner < innerSize; ++inner)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="comment">// Find max</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  input[outer * axisSize * innerSize + inner];</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1u; i < axisSize; ++i)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  input[(outer * axisSize + i) * innerSize + inner];</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  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>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="comment">// Compute sum</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordtype">float</span> sum = 0.0f;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i < axisSize; ++i)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  input[(outer * axisSize + i) * innerSize + inner];</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  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>  }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="comment">// Compute log sum</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <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> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="comment">// Compute result</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i < axisSize; ++i)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <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> </div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  input [index];</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  output[index];</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  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>  }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> }</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 &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 &&...)</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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <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>  <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> </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">const</span> TensorShape& inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>& outputType = outputInfo.GetDataType();</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">const</span> uint32_t nBatch = inputShape[0];</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">const</span> uint32_t nInput = inputShape[1];</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">const</span> uint32_t nCell = inputToOutputWeightsShape[0];</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">const</span> uint32_t nOutput = recurrentToOutputWeightsShape[1];</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <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>  <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>  <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> </div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">if</span> (!useLayerNorm)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="comment">// Initialize scratch buffers with bias.</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">if</span> (!useCifg)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <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>  nCell, nBatch, *inputGateScratch);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <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>  nCell, nBatch, *forgetGateScratch);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <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>  nCell, nBatch, *cellScratch);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <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>  nCell, nBatch, *outputGateScratch);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="comment">// Initialize scratch buffers with zeroes.</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">if</span> (!useCifg)</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <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>  }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <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>  <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>  <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>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <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>  <span class="keywordflow">if</span> (!useCifg)</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <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>  nCell, nInput, *inputData, nBatch, *inputGateScratch);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  }</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <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>  nCell, nInput, *inputData, nBatch, *forgetGateScratch);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <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>  nCell, nInput, *inputData, nBatch, *cellScratch);</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <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>  nCell, nInput, *inputData, nBatch, *outputGateScratch);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <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>  <span class="keywordflow">if</span> (!useCifg)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <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>  nCell, nOutput, *outputStateIn, nBatch, *inputGateScratch);</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <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>  nCell, nOutput, *outputStateIn, nBatch, *forgetGateScratch);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <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>  nCell, nOutput, *outputStateIn, nBatch, *cellScratch);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <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>  nCell, nOutput, *outputStateIn, nBatch, *outputGateScratch);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <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>  <span class="keywordflow">if</span> (!useCifg)</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">if</span> (usePeephole)</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  {</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <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>  nCell, *cellStateIn, nBatch, *inputGateScratch);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">if</span> (useLayerNorm)</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <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>  *inputGateScratch, nCell, nBatch, layerNormEpsilon);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <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>  nCell, *inputGateScratchDecoder, nBatch, *inputGateScratch);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <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>  nCell, *inputGateScratchDecoder, nBatch, *inputGateScratch);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*inputGateScratchDecoder, *inputGateScratch,</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  TensorInfo({nCell, nBatch}, outputType),</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  ActivationFunction::Sigmoid, 0, 0);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <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>  <span class="keywordflow">if</span> (usePeephole)</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  {</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <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>  *cellStateIn, nBatch, *forgetGateScratch);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">if</span> (useLayerNorm)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <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>  *forgetGateScratch, nCell, nBatch, layerNormEpsilon);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <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>  nCell, *forgetGateScratchDecoder, nBatch, *forgetGateScratch);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <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>  nCell, *forgetGateScratchDecoder, nBatch, *forgetGateScratch);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*forgetGateScratchDecoder, *forgetGateScratch,</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  TensorInfo({nCell, nBatch}, outputType),</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  ActivationFunction::Sigmoid, 0, 0);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <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>  <span class="keywordflow">if</span> (useLayerNorm)</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <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>  *cellScratch, nCell, nBatch, layerNormEpsilon);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <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>  nCell, *cellScratchDecoder, nBatch, *cellScratch);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <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>  nCell, *cellScratchDecoder, nBatch, *cellScratch);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <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> </div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <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>  <span class="keywordtype">float</span> a = 0;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordtype">float</span> b = 0;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <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> </div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">if</span> (descriptor.m_ActivationFunc > 0)</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*cellScratchDecoder, *cellScratch,</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  TensorInfo({nCell, nBatch}, outputType),</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  armnnActivationFunc, a, b);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  }</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">if</span> (useCifg)</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <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>  <a class="code" href="_lstm_utils_8cpp.xhtml#a2e653f948d93f4177f267a7b1b4ed47d">VectorVectorCwiseProductAccumulate</a>(</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  *cellScratchDecoder, *forgetGateScratchDecoder, nBatch * nCell, *cellStateOut);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <a class="code" href="_lstm_utils_8cpp.xhtml#a2e653f948d93f4177f267a7b1b4ed47d">VectorVectorCwiseProductAccumulate</a>(</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  *cellScratchDecoder, *inputGateScratchDecoder, nBatch * nCell, *cellStateOut);</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keywordflow">if</span> (descriptor.m_ClippingThresCell > 0.0)</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  {</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <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>  }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <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>  <span class="keywordflow">if</span> (usePeephole)</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  {</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <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>  nCell, *cellStateOutDecoder, nBatch, *outputGateScratch);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">if</span> (useLayerNorm)</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <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>  *outputGateScratch, nCell, nBatch, layerNormEpsilon);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <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>  nCell, *outputGateScratchDecoder, nBatch, *outputGateScratch);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <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>  nCell, *outputGateScratchDecoder, nBatch, *outputGateScratch);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*outputGateScratchDecoder, *outputGateScratch,</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  TensorInfo({nCell, nBatch}, outputType),</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  ActivationFunction::Sigmoid, 0, 0);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">if</span> (descriptor.m_ActivationFunc > 0)</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  {</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*cellStateOutDecoder, *cellScratch,</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  TensorInfo({nCell, nBatch}, outputType),</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  armnnActivationFunc, a, b);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <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> </div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <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>  <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  {</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">if</span> (projectionBiasTensor)</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <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>  nOutput, nBatch, *output);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <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>  nOutput, nCell, *outputGateScratchDecoder, nBatch, *output);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">if</span> (descriptor.m_ClippingThresProj > 0.0)</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <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>  }</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  }</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  {</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <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>  }</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <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> }</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< float > &input_vector, armnn::Encoder< float > &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< float > &vector, uint32_t vSize, armnn::Decoder< float > &batchVector, uint32_t nBatch, armnn::Encoder< float > &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< float > &vector, uint32_t vSize, float absLimit, armnn::Encoder< float > &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< float > &vector, uint32_t vSize, armnn::Encoder< float > &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< float > &vector, uint32_t vSize, armnn::Encoder< float > &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< float > &vector, uint32_t vSize, armnn::Decoder< float > &batchVector, uint32_t nBatch, armnn::Encoder< float > &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< float > &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< float > &vector1, armnn::Decoder< float > &vector2, uint32_t vSize, armnn::Encoder< float > &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< float > &vector, uint32_t vSize, armnn::Decoder< float > &batchVector, uint32_t nBatch, armnn::Encoder< float > &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< float > &matrix, uint32_t mRows, uint32_t mCols, armnn::Decoder< float > &vector, uint32_t nBatch, armnn::Encoder< float > &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< float > &vector1, armnn::Decoder< float > &vector2, uint32_t vSize, armnn::Encoder< float > &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< float > &vector, uint32_t vSize, uint32_t nBatch, armnn::Encoder< float > &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 &outArmnnActivation, float &outA, float &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> {</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <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>  <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>  </div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">const</span> TensorShape& inputShape = inputInfo.GetShape();</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>& outputType = outputInfo.GetDataType();</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  </div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">const</span> uint32_t nBatch = inputShape[0];</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">const</span> uint32_t nInput = inputShape[1];</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  </div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">const</span> uint32_t nCell = inputToOutputWeightsShape[0];</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">const</span> uint32_t nOutput = recurrentToOutputWeightsShape[1];</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  </div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">if</span> (!useLayerNorm)</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  {</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="comment">// Initialize scratch buffers with bias.</span></div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">if</span> (!useCifg)</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <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>  nCell, nBatch, *inputGateScratch);</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <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>  nCell, nBatch, *forgetGateScratch);</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <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>  nCell, nBatch, *cellScratch);</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <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>  nCell, nBatch, *outputGateScratch);</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="comment">// Initialize scratch buffers with zeroes.</span></div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">if</span> (!useCifg)</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  {</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <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>  }</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <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>  <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>  <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>  }</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  </div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <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>  <span class="keywordflow">if</span> (!useCifg)</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  {</div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <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>  nCell, nInput, *inputData, nBatch, *inputGateScratch);</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  }</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <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>  nCell, nInput, *inputData, nBatch, *forgetGateScratch);</div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <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>  nCell, nInput, *inputData, nBatch, *cellScratch);</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <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>  nCell, nInput, *inputData, nBatch, *outputGateScratch);</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  </div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <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>  <span class="keywordflow">if</span> (!useCifg)</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  {</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <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>  nCell, nOutput, *outputStateIn, nBatch, *inputGateScratch);</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <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>  nCell, nOutput, *outputStateIn, nBatch, *forgetGateScratch);</div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <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>  nCell, nOutput, *outputStateIn, nBatch, *cellScratch);</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <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>  nCell, nOutput, *outputStateIn, nBatch, *outputGateScratch);</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  </div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <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>  <span class="keywordflow">if</span> (!useCifg)</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  {</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">if</span> (usePeephole)</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  {</div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <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>  nCell, *cellStateIn, nBatch, *inputGateScratch);</div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  }</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">if</span> (useLayerNorm)</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  {</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <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>  *inputGateScratch, nCell, nBatch, layerNormEpsilon);</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <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>  nCell, *inputGateScratchDecoder, nBatch, *inputGateScratch);</div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <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>  nCell, *inputGateScratchDecoder, nBatch, *inputGateScratch);</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*inputGateScratchDecoder, *inputGateScratch,</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  TensorInfo({nCell, nBatch}, outputType),</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  ActivationFunction::Sigmoid, 0, 0);</div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  }</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  </div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <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>  <span class="keywordflow">if</span> (usePeephole)</div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  {</div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <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>  *cellStateIn, nBatch, *forgetGateScratch);</div> +<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  }</div> +<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">if</span> (useLayerNorm)</div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <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>  *forgetGateScratch, nCell, nBatch, layerNormEpsilon);</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <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>  nCell, *forgetGateScratchDecoder, nBatch, *forgetGateScratch);</div> +<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <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>  nCell, *forgetGateScratchDecoder, nBatch, *forgetGateScratch);</div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  }</div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*forgetGateScratchDecoder, *forgetGateScratch,</div> +<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  TensorInfo({nCell, nBatch}, outputType),</div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  ActivationFunction::Sigmoid, 0, 0);</div> +<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  </div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <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>  <span class="keywordflow">if</span> (useLayerNorm)</div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  {</div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <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>  *cellScratch, nCell, nBatch, layerNormEpsilon);</div> +<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <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>  nCell, *cellScratchDecoder, nBatch, *cellScratch);</div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <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>  nCell, *cellScratchDecoder, nBatch, *cellScratch);</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  </div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <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>  </div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <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>  <span class="keywordtype">float</span> a = 0;</div> +<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordtype">float</span> b = 0;</div> +<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <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>  </div> +<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">if</span> (descriptor.m_ActivationFunc > 0)</div> +<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  {</div> +<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*cellScratchDecoder, *cellScratch,</div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  TensorInfo({nCell, nBatch}, outputType),</div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  armnnActivationFunc, a, b);</div> +<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  }</div> +<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">if</span> (useCifg)</div> +<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  {</div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <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>  <a class="code" href="_lstm_utils_8cpp.xhtml#a2e653f948d93f4177f267a7b1b4ed47d">VectorVectorCwiseProductAccumulate</a>(</div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  *cellScratchDecoder, *forgetGateScratchDecoder, nBatch * nCell, *cellStateOut);</div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  }</div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  {</div> +<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <a class="code" href="_lstm_utils_8cpp.xhtml#a2e653f948d93f4177f267a7b1b4ed47d">VectorVectorCwiseProductAccumulate</a>(</div> +<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  *cellScratchDecoder, *inputGateScratchDecoder, nBatch * nCell, *cellStateOut);</div> +<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  }</div> +<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keywordflow">if</span> (descriptor.m_ClippingThresCell > 0.0)</div> +<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  {</div> +<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <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>  }</div> +<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  </div> +<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <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>  <span class="keywordflow">if</span> (usePeephole)</div> +<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  {</div> +<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <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>  nCell, *cellStateOutDecoder, nBatch, *outputGateScratch);</div> +<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div> +<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">if</span> (useLayerNorm)</div> +<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  {</div> +<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <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>  *outputGateScratch, nCell, nBatch, layerNormEpsilon);</div> +<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <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>  nCell, *outputGateScratchDecoder, nBatch, *outputGateScratch);</div> +<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <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>  nCell, *outputGateScratchDecoder, nBatch, *outputGateScratch);</div> +<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div> +<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*outputGateScratchDecoder, *outputGateScratch,</div> +<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  TensorInfo({nCell, nBatch}, outputType),</div> +<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  ActivationFunction::Sigmoid, 0, 0);</div> +<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  </div> +<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">if</span> (descriptor.m_ActivationFunc > 0)</div> +<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  {</div> +<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*cellStateOutDecoder, *cellScratch,</div> +<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  TensorInfo({nCell, nBatch}, outputType),</div> +<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  armnnActivationFunc, a, b);</div> +<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  }</div> +<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  </div> +<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <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>  </div> +<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <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>  <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div> +<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  {</div> +<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">if</span> (projectionBiasTensor)</div> +<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  {</div> +<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <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>  nOutput, nBatch, *output);</div> +<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  }</div> +<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <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>  nOutput, nCell, *outputGateScratchDecoder, nBatch, *output);</div> +<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  </div> +<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">if</span> (descriptor.m_ClippingThresProj > 0.0)</div> +<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  {</div> +<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <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>  }</div> +<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  }</div> +<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  {</div> +<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <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>  }</div> +<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  </div> +<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <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> }</div> </div><!-- fragment --> -</div> -</div> -<a id="a1545cb162c5a64d75d9c0c05e8ea387c"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a1545cb162c5a64d75d9c0c05e8ea387c">◆ </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<<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a><T> > armnn::MakeDecoder </td> - <td>(</td> - <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> & </td> - <td class="paramname"><em>info</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">const void * </td> - <td class="paramname"><em>data</em> = <code>nullptr</code> </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> {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <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>  {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> std::make_unique<QASymmS8Decoder>(</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keyword">static_cast<</span><span class="keyword">const </span>int8_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> std::make_unique<QASymm8Decoder>(</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">static_cast<</span><span class="keyword">const </span>uint8_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">case</span> DataType::QSymmS16:</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">return</span> std::make_unique<QSymm16Decoder>(</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">static_cast<</span><span class="keyword">const </span>int16_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">case</span> DataType::Float16:</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">return</span> std::make_unique<Float16Decoder>(<span class="keyword">static_cast<</span><span class="keyword">const </span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</a>*<span class="keyword">></span>(data));</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">return</span> std::make_unique<Float32Decoder>(<span class="keyword">static_cast<</span><span class="keyword">const </span><span class="keywordtype">float</span>*<span class="keyword">></span>(data));</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">return</span> MakeSigned32Decoder(info, data);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <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>  {</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  std::pair<unsigned int, std::vector<float>> 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>  <span class="keywordflow">return</span> std::make_unique<QSymm8PerAxisDecoder>(<span class="keyword">static_cast<</span><span class="keyword">const </span>int8_t*<span class="keyword">></span>(data), info);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">return</span> std::make_unique<QSymmS8Decoder>(</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">static_cast<</span><span class="keyword">const </span>int8_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <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>  {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordflow">return</span> std::make_unique<BooleanDecoder>(<span class="keyword">static_cast<</span><span class="keyword">const </span>uint8_t*<span class="keyword">></span>(data));</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"Unsupported Data Type!"</span>);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</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< unsigned int, std::vector< float > > GetPerAxisParams(const armnn::TensorInfo &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">◆ </a></span>MakeDecoder() <span class="overload">[2/4]</span></h2> +<a id="a8cb12db00d6e4ab4ac5ccfa6e7a69374"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8cb12db00d6e4ab4ac5ccfa6e7a69374">◆ </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<<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a><float> > armnn::MakeDecoder </td> + <td class="memname">std::unique_ptr< <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>< int32_t > > MakeDecoder </td> <td>(</td> <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> & </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> {</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <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>  {</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">case</span> DataType::QAsymmS8:</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> std::make_unique<QASymmS8Decoder>(</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keyword">static_cast<</span><span class="keyword">const </span>int8_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">case</span> DataType::QAsymmU8:</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> std::make_unique<QASymm8Decoder>(</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">static_cast<</span><span class="keyword">const </span>uint8_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  }</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">case</span> DataType::QSymmS16:</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  {</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">return</span> std::make_unique<QSymm16Decoder>(</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">static_cast<</span><span class="keyword">const </span>int16_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">case</span> DataType::Float16:</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  {</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">return</span> std::make_unique<Float16Decoder>(<span class="keyword">static_cast<</span><span class="keyword">const </span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</a>*<span class="keyword">></span>(data));</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  }</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">case</span> DataType::Float32:</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  {</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">return</span> std::make_unique<Float32Decoder>(<span class="keyword">static_cast<</span><span class="keyword">const </span><span class="keywordtype">float</span>*<span class="keyword">></span>(data));</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">case</span> DataType::Signed32:</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">return</span> MakeSigned32Decoder(info, data);</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  {</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <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>  {</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  std::pair<unsigned int, std::vector<float>> 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>  <span class="keywordflow">return</span> std::make_unique<QSymm8PerAxisDecoder>(<span class="keyword">static_cast<</span><span class="keyword">const </span>int8_t*<span class="keyword">></span>(data), info);</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  {</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">return</span> std::make_unique<QSymmS8Decoder>(</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">static_cast<</span><span class="keyword">const </span>int8_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  }</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <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>  {</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordflow">return</span> std::make_unique<BooleanDecoder>(<span class="keyword">static_cast<</span><span class="keyword">const </span>uint8_t*<span class="keyword">></span>(data));</div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  }</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"Unsupported Data Type!"</span>);</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</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> {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <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>  {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> std::make_unique<QASymmS8Decoder>(</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keyword">static_cast<</span><span class="keyword">const </span>int8_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> std::make_unique<QASymm8Decoder>(</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">static_cast<</span><span class="keyword">const </span>uint8_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">case</span> DataType::QSymmS16:</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">return</span> std::make_unique<QSymm16Decoder>(</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">static_cast<</span><span class="keyword">const </span>int16_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">case</span> DataType::Float16:</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">return</span> std::make_unique<Float16Decoder>(<span class="keyword">static_cast<</span><span class="keyword">const </span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</a>*<span class="keyword">></span>(data));</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">return</span> std::make_unique<Float32Decoder>(<span class="keyword">static_cast<</span><span class="keyword">const </span><span class="keywordtype">float</span>*<span class="keyword">></span>(data));</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">return</span> MakeSigned32Decoder(info, data);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <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>  {</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  std::pair<unsigned int, std::vector<float>> 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>  <span class="keywordflow">return</span> std::make_unique<QSymm8PerAxisDecoder>(<span class="keyword">static_cast<</span><span class="keyword">const </span>int8_t*<span class="keyword">></span>(data), info);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">return</span> std::make_unique<QSymmS8Decoder>(</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">static_cast<</span><span class="keyword">const </span>int8_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <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>  {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordflow">return</span> std::make_unique<BooleanDecoder>(<span class="keyword">static_cast<</span><span class="keyword">const </span>uint8_t*<span class="keyword">></span>(data));</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"Unsupported Data Type!"</span>);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</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< unsigned int, std::vector< float > > GetPerAxisParams(const armnn::TensorInfo &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">◆ </a></span>MakeDecoder() <span class="overload">[3/4]</span></h2> +<a id="a1545cb162c5a64d75d9c0c05e8ea387c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1545cb162c5a64d75d9c0c05e8ea387c">◆ </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<<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a><bool> > armnn::MakeDecoder </td> + <td class="memname">std::unique_ptr<<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a><T> > armnn::MakeDecoder </td> <td>(</td> <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> & </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 * </td> - <td class="paramname"><em>data</em> </td> + <td class="paramname"><em>data</em> = <code>nullptr</code> </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> {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <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>  {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">case</span> DataType::Boolean:</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">return</span> std::make_unique<BooleanDecoderBool>(<span class="keyword">static_cast<</span><span class="keyword">const </span>uint8_t*<span class="keyword">></span>(data));</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  }</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"Unsupported Data Type!"</span>);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</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">◆ </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> {</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <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>  {</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">case</span> DataType::QAsymmS8:</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> std::make_unique<QASymmS8Decoder>(</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keyword">static_cast<</span><span class="keyword">const </span>int8_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">case</span> DataType::QAsymmU8:</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> std::make_unique<QASymm8Decoder>(</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">static_cast<</span><span class="keyword">const </span>uint8_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  }</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">case</span> DataType::QSymmS16:</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  {</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">return</span> std::make_unique<QSymm16Decoder>(</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">static_cast<</span><span class="keyword">const </span>int16_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">case</span> DataType::Float16:</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  {</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">return</span> std::make_unique<Float16Decoder>(<span class="keyword">static_cast<</span><span class="keyword">const </span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</a>*<span class="keyword">></span>(data));</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  }</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">case</span> DataType::Float32:</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  {</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">return</span> std::make_unique<Float32Decoder>(<span class="keyword">static_cast<</span><span class="keyword">const </span><span class="keywordtype">float</span>*<span class="keyword">></span>(data));</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">case</span> DataType::Signed32:</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">return</span> MakeSigned32Decoder(info, data);</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  {</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <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>  {</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  std::pair<unsigned int, std::vector<float>> 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>  <span class="keywordflow">return</span> std::make_unique<QSymm8PerAxisDecoder>(<span class="keyword">static_cast<</span><span class="keyword">const </span>int8_t*<span class="keyword">></span>(data), info);</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  {</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">return</span> std::make_unique<QSymmS8Decoder>(</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">static_cast<</span><span class="keyword">const </span>int8_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  }</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <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>  {</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordflow">return</span> std::make_unique<BooleanDecoder>(<span class="keyword">static_cast<</span><span class="keyword">const </span>uint8_t*<span class="keyword">></span>(data));</div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  }</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"Unsupported Data Type!"</span>);</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</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">◆ </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<<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a><int32_t> > armnn::MakeDecoder </td> + <td class="memname">std::unique_ptr< <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>< int32_t > > MakeEncoder </td> <td>(</td> <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> & </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 * </td> + <td class="paramtype">void * </td> <td class="paramname"><em>data</em> </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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  {</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  {</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> std::make_unique<QASymmS8Encoder>(</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">static_cast<</span>int8_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  }</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  {</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">return</span> std::make_unique<QASymm8Encoder>(</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">static_cast<</span>uint8_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  }</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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>  {</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  std::pair<unsigned int, std::vector<float>> 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>  <span class="keywordflow">return</span> std::make_unique<QSymm8PerAxisEncoder>(</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">static_cast<</span>int8_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  params.second,</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  params.first);</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  }</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  {</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">return</span> std::make_unique<QSymmS8Encoder>(</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">static_cast<</span>int8_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <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>  {</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">return</span> std::make_unique<QSymm16Encoder>(</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">static_cast<</span>int16_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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>  {</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> std::make_unique<Int32Encoder>(<span class="keyword">static_cast<</span>int32_t*<span class="keyword">></span>(data));</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <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>  {</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> std::make_unique<Float16Encoder>(<span class="keyword">static_cast<</span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</a>*<span class="keyword">></span>(data));</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <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>  {</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> std::make_unique<Float32Encoder>(<span class="keyword">static_cast<</span><span class="keywordtype">float</span>*<span class="keyword">></span>(data));</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  }</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"Unsupported target Data Type!"</span>);</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</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> {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <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>  {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">return</span> std::make_unique<Int32ToInt32tDecoder>(<span class="keyword">static_cast<</span><span class="keyword">const </span>int32_t*<span class="keyword">></span>(data));</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"Unsupported Data Type!"</span>);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</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">◆ </a></span>MakeEncoder() <span class="overload">[1/4]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a56867cc5245724ab56953604b1eec9ee">◆ </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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  {</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  {</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> std::make_unique<QASymmS8Encoder>(</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">static_cast<</span>int8_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  }</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  {</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">return</span> std::make_unique<QASymm8Encoder>(</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">static_cast<</span>uint8_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  }</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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>  {</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  std::pair<unsigned int, std::vector<float>> 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>  <span class="keywordflow">return</span> std::make_unique<QSymm8PerAxisEncoder>(</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">static_cast<</span>int8_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  params.second,</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  params.first);</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  }</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  {</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">return</span> std::make_unique<QSymmS8Encoder>(</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">static_cast<</span>int8_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <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>  {</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">return</span> std::make_unique<QSymm16Encoder>(</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">static_cast<</span>int16_t*<span class="keyword">></span>(data),</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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>  {</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> std::make_unique<Int32Encoder>(<span class="keyword">static_cast<</span>int32_t*<span class="keyword">></span>(data));</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <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>  {</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> std::make_unique<Float16Encoder>(<span class="keyword">static_cast<</span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</a>*<span class="keyword">></span>(data));</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <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>  {</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> std::make_unique<Float32Encoder>(<span class="keyword">static_cast<</span><span class="keywordtype">float</span>*<span class="keyword">></span>(data));</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  }</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"Unsupported target Data Type!"</span>);</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  {</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> std::make_unique<QASymmS8Encoder>(</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">static_cast<</span>int8_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  }</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">return</span> std::make_unique<QASymm8Encoder>(</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">static_cast<</span>uint8_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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>  {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  std::pair<unsigned int, std::vector<float>> 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>  <span class="keywordflow">return</span> std::make_unique<QSymm8PerAxisEncoder>(</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">static_cast<</span>int8_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  params.second,</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  params.first);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">return</span> std::make_unique<QSymmS8Encoder>(</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">static_cast<</span>int8_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <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>  {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">return</span> std::make_unique<QSymm16Encoder>(</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">static_cast<</span>int16_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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>  {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> std::make_unique<Int32Encoder>(<span class="keyword">static_cast<</span>int32_t*<span class="keyword">></span>(data));</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <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>  {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> std::make_unique<Float16Encoder>(<span class="keyword">static_cast<</span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</a>*<span class="keyword">></span>(data));</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <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>  {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> std::make_unique<Float32Encoder>(<span class="keyword">static_cast<</span><span class="keywordtype">float</span>*<span class="keyword">></span>(data));</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"Unsupported target Data Type!"</span>);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</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< unsigned int, std::vector< float > > GetPerAxisParams(const armnn::TensorInfo &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">◆ </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<<a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a><float> > armnn::MakeEncoder </td> - <td>(</td> - <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> & </td> - <td class="paramname"><em>info</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">void * </td> - <td class="paramname"><em>data</em> </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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  {</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> std::make_unique<QASymmS8Encoder>(</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">static_cast<</span>int8_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  }</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">return</span> std::make_unique<QASymm8Encoder>(</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">static_cast<</span>uint8_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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>  {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  std::pair<unsigned int, std::vector<float>> 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>  <span class="keywordflow">return</span> std::make_unique<QSymm8PerAxisEncoder>(</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">static_cast<</span>int8_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  params.second,</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  params.first);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">return</span> std::make_unique<QSymmS8Encoder>(</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">static_cast<</span>int8_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <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>  {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">return</span> std::make_unique<QSymm16Encoder>(</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">static_cast<</span>int16_t*<span class="keyword">></span>(data),</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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>  {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> std::make_unique<Int32Encoder>(<span class="keyword">static_cast<</span>int32_t*<span class="keyword">></span>(data));</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <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>  {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> std::make_unique<Float16Encoder>(<span class="keyword">static_cast<</span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</a>*<span class="keyword">></span>(data));</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <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>  {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> std::make_unique<Float32Encoder>(<span class="keyword">static_cast<</span><span class="keywordtype">float</span>*<span class="keyword">></span>(data));</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"Unsupported target Data Type!"</span>);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</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< unsigned int, std::vector< float > > GetPerAxisParams(const armnn::TensorInfo &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">◆ </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<<a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a><bool> > armnn::MakeEncoder </td> - <td>(</td> - <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> & </td> - <td class="paramname"><em>info</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">void * </td> - <td class="paramname"><em>data</em> </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> {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <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>  {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <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>  {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">return</span> std::make_unique<BooleanEncoder>(<span class="keyword">static_cast<</span>uint8_t*<span class="keyword">></span>(data));</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  }</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"Cannot encode from boolean. Not supported target Data Type!"</span>);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</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">◆ </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<<a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a><int32_t> > armnn::MakeEncoder </td> - <td>(</td> - <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> & </td> - <td class="paramname"><em>info</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">void * </td> - <td class="paramname"><em>data</em> </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> {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <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>  {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">return</span> std::make_unique<Int32ToInt32tEncoder>(<span class="keyword">static_cast<</span>int32_t*<span class="keyword">></span>(data));</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">"Unsupported Data Type!"</span>);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> }</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> {</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keywordflow">return</span> arm_compute::DetectionPostProcessLayerInfo(descriptor.m_MaxDetections,</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  descriptor.m_MaxClassesPerDetection,</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  descriptor.m_NmsScoreThreshold,</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  descriptor.m_NmsIouThreshold,</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  descriptor.m_NumClasses,</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  { descriptor.m_ScaleX,</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  descriptor.m_ScaleY,</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  descriptor.m_ScaleW,</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  descriptor.m_ScaleH },</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  descriptor.m_UseRegularNms,</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  descriptor.m_DetectionsPerClass);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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> {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keywordflow">return</span> arm_compute::DetectionPostProcessLayerInfo(descriptor.m_MaxDetections,</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  descriptor.m_MaxClassesPerDetection,</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  descriptor.m_NmsScoreThreshold,</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  descriptor.m_NmsIouThreshold,</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  descriptor.m_NumClasses,</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  { descriptor.m_ScaleX,</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  descriptor.m_ScaleY,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  descriptor.m_ScaleW,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  descriptor.m_ScaleH },</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  descriptor.m_UseRegularNms,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  descriptor.m_DetectionsPerClass);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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> {</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  Optimizer::Optimizations optimizations;</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  </div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <a class="code" href="namespacearmnn.xhtml#a0c8a28b71e49c04596289ff281e58f1a">Append</a>(optimizations, std::forward<Args>(args)...);</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  </div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> optimizations;</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> }</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> {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  Optimizer::Optimizations optimizations;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <a class="code" href="namespacearmnn.xhtml#a0c8a28b71e49c04596289ff281e58f1a">Append</a>(optimizations, std::forward<Args>(args)...);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> optimizations;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> }</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 &optimizations, Front &&front, Others &&... 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<T> 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> {</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">return</span> Optional<T>(<a class="code" href="_optional_8hpp.xhtml#acbec11f88a308826fa811f370d363a4a">CONSTRUCT_IN_PLACE</a>, std::forward<Args>(args)...);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> }</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> {</div> +<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">return</span> Optional<T>(<a class="code" href="_optional_8hpp.xhtml#acbec11f88a308826fa811f370d363a4a">CONSTRUCT_IN_PLACE</a>, std::forward<Args>(args)...);</div> +<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> }</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><Function, Iterator> 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> {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">return</span> TransformIterator<Function, Iterator>(i, f);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> {</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">return</span> TransformIterator<Function, Iterator>(i, f);</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> }</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> {</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">auto</span> padList = data.m_Parameters.m_PadList;</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <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>  </div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  TensorShape outputShape = outputInfo.GetShape();</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  TensorShape inputShape = inputInfo.GetShape();</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  </div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <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>  <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>  assert(numInputDimensions == outputShape.GetNumDimensions());</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  </div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <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>  <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>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> isReflect = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(paddingMode == PaddingMode::Reflect);</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < padList.size(); ++i)</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  {</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">if</span>(padList.at(i).first > (inputShape[i] - isReflect) ||</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  padList.at(i).second > (inputShape[i] - isReflect))</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">"Paddings must be less (Reflect) or "</span></div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="stringliteral">"equal (Symmetric) to the dimension size."</span>);</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  }</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  </div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keyword">auto</span> inputData = MakeDecoder<float>(inputInfo, inputHandle->Map());</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keyword">auto</span> outData = MakeEncoder<float>(outputInfo, outputHandle->Map());</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  </div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  Decoder<float>& input = *inputData;</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  Encoder<float>& output = *outData;</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  </div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx < numOutputElements; ++idx)</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  {</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <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>  <span class="keyword">const</span> std::vector<unsigned int> coord = IndexToCoord(outputShape, idx);</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  </div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  std::vector<unsigned int> dimensions;</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  std::vector<unsigned int> coords;</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  </div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numInputDimensions; ++i)</div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  {</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  dimensions.emplace_back(i);</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  coords.emplace_back(coord[i]);</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  </div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keyword">auto</span> isInPadding = [&](<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i)</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">return</span> (coords[i] < padList[i].first || coords[i] > inputShape[i] + padList[i].first - 1);</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  };</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  </div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">auto</span> getReflectIndex = [&](<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i) -> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span></div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  {</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">if</span>(isInPadding(i))</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  {</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordflow">if</span>(coords[i] < padList[i].first)</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  {</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">return</span> padList[i].first - coords[i];</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  {</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <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>  }</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">return</span> coords[i] - padList[i].first;</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  };</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  </div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keyword">auto</span> getSymmetricIndex = [&](<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i) -> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span></div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  {</div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">if</span>(isInPadding(i))</div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  {</div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">if</span>(coords[i] < padList[i].first)</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  {</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">return</span> padList[i].first - coords[i] - 1;</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  }</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  {</div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <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>  }</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  }</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">return</span> coords[i] - padList[i].first;</div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  };</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  </div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <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>  std::vector<unsigned int> coordOfInput;</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  </div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <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>  <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>  <span class="comment">// input tensor to use in the output.</span></div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="comment">// E.g.</span></div> +<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="comment">// Input tensor = [ 1, 2, 3 ], Rank = 1.</span></div> +<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <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>  <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>  <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>  {</div> +<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">switch</span>(paddingMode)</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  {</div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">case</span> PaddingMode::Reflect:</div> +<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  {</div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numInputDimensions; ++i)</div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  {</div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  coordOfInput.emplace_back(getReflectIndex(i));</div> +<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  }</div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  }</div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">case</span> PaddingMode::Symmetric:</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  {</div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numInputDimensions; ++i)</div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  {</div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  coordOfInput.emplace_back(getSymmetricIndex(i));</div> +<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  }</div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Padding mode not supported."</span>);</div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  }</div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  {</div> +<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numInputDimensions; ++i)</div> +<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  {</div> +<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  coordOfInput.emplace_back(coord[i] - padList[i].first);</div> +<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  }</div> +<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  }</div> +<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  </div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <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>  <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>  </div> +<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  input[indexOfInput];</div> +<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keyword">auto</span> inputValue = input.Get();</div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  </div> +<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  output[idx];</div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  output.Set(inputValue);</div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  }</div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> }</div> +</div><!-- fragment --> +<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder< IType >::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< LayerDescriptor >::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< IType >::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< LayerDescriptor >::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< IType >::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> {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">auto</span> padList = data.m_Parameters.m_PadList;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <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> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  TensorShape outputShape = outputInfo.GetShape();</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  TensorShape inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <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>  <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>  assert(numInputDimensions == outputShape.GetNumDimensions());</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <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>  <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>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> isReflect = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(paddingMode == PaddingMode::Reflect);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < padList.size(); ++i)</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">if</span>(padList.at(i).first > (inputShape[i] - isReflect) ||</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  padList.at(i).second > (inputShape[i] - isReflect))</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">"Paddings must be less (Reflect) or "</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="stringliteral">"equal (Symmetric) to the dimension size."</span>);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keyword">auto</span> inputData = MakeDecoder<float>(inputInfo, inputHandle->Map());</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keyword">auto</span> outData = MakeEncoder<float>(outputInfo, outputHandle->Map());</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  Decoder<float>& input = *inputData;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  Encoder<float>& output = *outData;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx < numOutputElements; ++idx)</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <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>  <span class="keyword">const</span> std::vector<unsigned int> coord = IndexToCoord(outputShape, idx);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  std::vector<unsigned int> dimensions;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  std::vector<unsigned int> coords;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numInputDimensions; ++i)</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  dimensions.emplace_back(i);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  coords.emplace_back(coord[i]);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keyword">auto</span> isInPadding = [&](<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">return</span> (coords[i] < padList[i].first || coords[i] > inputShape[i] + padList[i].first - 1);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  };</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">auto</span> getReflectIndex = [&](<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i) -> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">if</span>(isInPadding(i))</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordflow">if</span>(coords[i] < padList[i].first)</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">return</span> padList[i].first - coords[i];</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <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>  }</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">return</span> coords[i] - padList[i].first;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  };</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keyword">auto</span> getSymmetricIndex = [&](<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i) -> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  {</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">if</span>(isInPadding(i))</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">if</span>(coords[i] < padList[i].first)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  {</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">return</span> padList[i].first - coords[i] - 1;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  }</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <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>  }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">return</span> coords[i] - padList[i].first;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  };</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <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>  std::vector<unsigned int> coordOfInput;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <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>  <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>  <span class="comment">// input tensor to use in the output.</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="comment">// E.g.</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="comment">// Input tensor = [ 1, 2, 3 ], Rank = 1.</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <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>  <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>  <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>  {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">switch</span>(paddingMode)</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">case</span> PaddingMode::Reflect:</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numInputDimensions; ++i)</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  coordOfInput.emplace_back(getReflectIndex(i));</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">case</span> PaddingMode::Symmetric:</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  {</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numInputDimensions; ++i)</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  {</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  coordOfInput.emplace_back(getSymmetricIndex(i));</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Padding mode not supported."</span>);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numInputDimensions; ++i)</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  coordOfInput.emplace_back(coord[i] - padList[i].first);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  }</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <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>  <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> </div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  input[indexOfInput];</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keyword">auto</span> inputValue = input.Get();</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  output[idx];</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  output.Set(inputValue);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> }</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> {</div> +<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Arm/Mock/TensorHandleFactory"</span>;</div> +<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> }</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> {</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Arm/Mock/TensorHandleFactory"</span>;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> }</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> {</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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>  </div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> arm_compute::NEAbsLayer::validate(&aclInput, &aclOutput);</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> }</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> {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> arm_compute::NEAbsLayer::validate(&aclInput, &aclOutput);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> }</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> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(descriptor);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> arm_compute::NEActivationLayer::validate(&aclInput,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  &aclOutput,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  activationLayerInfo);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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 &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> {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(descriptor);</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> arm_compute::NEActivationLayer::validate(&aclInput,</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  &aclOutput,</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  activationLayerInfo);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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> {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  <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>  <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> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  activationDescriptor);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">return</span> arm_compute::NEArithmeticAddition::validate(&aclInput0,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  &aclInput1,</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  &aclOutput,</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  arm_compute::ConvertPolicy::SATURATE,</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  activationInfo);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</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 &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> {</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  activationDescriptor);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  </div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">return</span> arm_compute::NEArithmeticAddition::validate(&aclInput0,</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  &aclInput1,</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  &aclOutput,</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  arm_compute::ConvertPolicy::SATURATE,</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  activationInfo);</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</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> {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  <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> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">auto</span> numDims = input.GetNumDimensions();</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(CalcAclAxis(numDims, unsignedAxis));</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">if</span> (descriptor.m_Function == ArgMinMaxFunction::Max)</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">return</span> arm_compute::NEArgMinMaxLayer::validate(&aclInput, aclAxis, &aclOutput,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  arm_compute::ReductionOperation::ARG_IDX_MAX);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> arm_compute::NEArgMinMaxLayer::validate(&aclInput, aclAxis, &aclOutput,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  arm_compute::ReductionOperation::ARG_IDX_MIN);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  <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>  </div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">auto</span> numDims = input.GetNumDimensions();</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  <span class="keywordtype">int</span> aclAxis = armnn::numeric_cast<int>(CalcAclAxis(numDims, unsignedAxis));</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">if</span> (descriptor.m_Function == ArgMinMaxFunction::Max)</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  {</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">return</span> arm_compute::NEArgMinMaxLayer::validate(&aclInput, aclAxis, &aclOutput,</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  arm_compute::ReductionOperation::ARG_IDX_MAX);</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  }</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  {</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> arm_compute::NEArgMinMaxLayer::validate(&aclInput, aclAxis, &aclOutput,</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  arm_compute::ReductionOperation::ARG_IDX_MIN);</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  }</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</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> { <span class="keywordflow">return</span> <span class="stringliteral">"CpuAcc"</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> { <span class="keywordflow">return</span> <span class="stringliteral">"CpuAcc"</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> {</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">if</span> (descriptor.m_AdjointX || descriptor.m_AdjointY )</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  {</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">throw</span> Exception(<span class="stringliteral">"Support for adjoint not implemented."</span>);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  }</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  {</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">throw</span> Exception(<span class="stringliteral">"Only supported the MatMul in the last 2 dimensions"</span>);</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  }</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  </div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  arm_compute::TensorInfo aclPermutedXInfo = arm_compute::TensorInfo();</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  arm_compute::TensorInfo aclPermutedYInfo = arm_compute::TensorInfo();</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  </div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <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>  {</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <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>  <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>  <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>  aclPermutedXInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permutedXInfo);</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  </div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  statusPermuteX = arm_compute::NEPermute::validate(&aclInputXInfo,</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  &aclPermutedXInfo,</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  aclPermutationXVector);</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  }</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  </div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <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>  {</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <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>  <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>  <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>  aclPermutedYInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permutedYInfo);</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  </div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  statusPermuteY = arm_compute::NEPermute::validate(&aclInputYInfo,</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  &aclPermutedYInfo,</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  aclPermutationYVector);</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  }</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  </div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keyword">const</span> arm_compute::GEMMInfo& 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>  <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>  <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>  </div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  statusGEMM = arm_compute::NEGEMM::validate(descriptor.m_TransposeX ? &aclPermutedXInfo : &aclInputXInfo,</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  descriptor.m_TransposeY ? &aclPermutedYInfo : &aclInputYInfo,</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">nullptr</span>,</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  1.0,</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  0,</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  gemm_info);</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  </div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">if</span> (statusPermuteX.error_code() == arm_compute::ErrorCode::OK &&</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  statusPermuteY.error_code() == arm_compute::ErrorCode::OK &&</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  statusGEMM.error_code() == arm_compute::ErrorCode::OK)</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  {</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <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>  <span class="stringliteral">"All BatchMatMul layers validate status OK."</span>);</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  {</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <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>  <span class="stringliteral">"BatchMatMul layer validate status failed."</span></div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  + statusGEMM.error_description()</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  + statusPermuteX.error_description()</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  + statusPermuteY.error_description());</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  </div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</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> {</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">if</span> (descriptor.m_AdjointX || descriptor.m_AdjointY )</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">throw</span> Exception(<span class="stringliteral">"Support for adjoint not implemented."</span>);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  }</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">throw</span> Exception(<span class="stringliteral">"Only supported the MatMul in the last 2 dimensions"</span>);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  }</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <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>  <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>  <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> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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>  <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>  <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> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  arm_compute::TensorInfo aclPermutedXInfo = arm_compute::TensorInfo();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  arm_compute::TensorInfo aclPermutedYInfo = arm_compute::TensorInfo();</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <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>  {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <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>  <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>  <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>  aclPermutedXInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permutedXInfo);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  statusPermuteX = arm_compute::NEPermute::validate(&aclInputXInfo,</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  &aclPermutedXInfo,</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  aclPermutationXVector);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <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>  {</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <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>  <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>  <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>  aclPermutedYInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permutedYInfo);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  statusPermuteY = arm_compute::NEPermute::validate(&aclInputYInfo,</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  &aclPermutedYInfo,</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  aclPermutationYVector);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keyword">const</span> arm_compute::GEMMInfo& 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>  <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>  <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> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  statusGEMM = arm_compute::NEGEMM::validate(descriptor.m_TransposeX ? &aclPermutedXInfo : &aclInputXInfo,</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  descriptor.m_TransposeY ? &aclPermutedYInfo : &aclInputYInfo,</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  &aclOutputInfo,</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  1.0,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  0,</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  gemm_info);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">if</span> (statusPermuteX.error_code() == arm_compute::ErrorCode::OK &&</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  statusPermuteY.error_code() == arm_compute::ErrorCode::OK &&</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  statusGEMM.error_code() == arm_compute::ErrorCode::OK)</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <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>  <span class="stringliteral">"All BatchMatMul layers validate status OK."</span>);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <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>  <span class="stringliteral">"BatchMatMul layer validate status failed."</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  + statusGEMM.error_description()</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  + statusPermuteX.error_description()</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  + statusPermuteY.error_description());</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</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 &srcShape, const armnn::PermutationVector &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> {</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo =</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  armcomputetensorutils::BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo =</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  armcomputetensorutils::BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclMeanInfo =</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  armcomputetensorutils::BuildArmComputeTensorInfo(mean, descriptor.m_DataLayout);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclVarInfo =</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  armcomputetensorutils::BuildArmComputeTensorInfo(var, descriptor.m_DataLayout);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclBetaInfo =</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  armcomputetensorutils::BuildArmComputeTensorInfo(beta, descriptor.m_DataLayout);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclGammaInfo =</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  armcomputetensorutils::BuildArmComputeTensorInfo(gamma, descriptor.m_DataLayout);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <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>  activationDescriptor);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> arm_compute::NEBatchNormalizationLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  &aclOutputInfo,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  &aclMeanInfo,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  &aclVarInfo,</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  &aclBetaInfo,</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  &aclGammaInfo,</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  descriptor.m_Eps,</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  activationInfo);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> }</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 &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> {</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo =</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  armcomputetensorutils::BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo =</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  armcomputetensorutils::BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclMeanInfo =</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  armcomputetensorutils::BuildArmComputeTensorInfo(mean, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclVarInfo =</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  armcomputetensorutils::BuildArmComputeTensorInfo(var, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclBetaInfo =</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  armcomputetensorutils::BuildArmComputeTensorInfo(beta, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclGammaInfo =</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  armcomputetensorutils::BuildArmComputeTensorInfo(gamma, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  </div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <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>  activationDescriptor);</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  </div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> arm_compute::NEBatchNormalizationLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  &aclMeanInfo,</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  &aclVarInfo,</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  &aclBetaInfo,</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  &aclGammaInfo,</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  descriptor.m_Eps,</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  activationInfo);</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> }</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> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  <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> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  int32_t blockHeight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><int32_t>(descriptor.m_BlockShape[0]);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  int32_t blockWidth = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><int32_t>(descriptor.m_BlockShape[1]);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NEBatchToSpaceLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  blockWidth,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  blockHeight,</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  &aclOutputInfo);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> }</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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  <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>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  int32_t blockHeight = armnn::numeric_cast<int32_t>(descriptor.m_BlockShape[0]);</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  int32_t blockWidth = armnn::numeric_cast<int32_t>(descriptor.m_BlockShape[1]);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NEBatchToSpaceLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  blockWidth,</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  blockHeight,</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  &aclOutputInfo);</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> }</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> {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keywordflow">return</span> arm_compute::NECast::validate(&aclInput, &aclOutput, g_AclConvertPolicy);</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> }</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> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keywordflow">return</span> arm_compute::NECast::validate(&aclInput, &aclOutput, g_AclConvertPolicy);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> }</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> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  <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>  <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>  <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>  <span class="keywordflow">if</span> (input.GetNumDimensions() == 4)</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">switch</span> (descriptor.m_Axis)</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  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>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">case</span> 3:</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  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>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Unsupported axis"</span>};</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  }</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  aclInputInfo.set_data_layout(aclDataLayout);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  aclOutputInfo.set_data_layout(aclDataLayout);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">return</span> arm_compute::NEChannelShuffleLayer::validate(&aclInputInfo, &aclOutputInfo, descriptor.m_NumGroups);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Unsupported number of dimensions"</span>};</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> }</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> {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  <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>  <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>  <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>  <span class="keywordflow">if</span> (input.GetNumDimensions() == 4)</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  {</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">switch</span> (descriptor.m_Axis)</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  {</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">case</span> 1:</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  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>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">case</span> 3:</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  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>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Unsupported axis"</span>};</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  }</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  aclInputInfo.set_data_layout(aclDataLayout);</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  aclOutputInfo.set_data_layout(aclDataLayout);</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">return</span> arm_compute::NEChannelShuffleLayer::validate(&aclInputInfo, &aclOutputInfo, descriptor.m_NumGroups);</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  }</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Unsupported number of dimensions"</span>};</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  }</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> }</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> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput0 = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NEElementwiseComparison::validate(&aclInput0,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  &aclInput1,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  &aclOutput,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  comparisonOperation);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> }</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 &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> {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput0 = BuildArmComputeTensorInfo(input0);</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = BuildArmComputeTensorInfo(input1);</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NEElementwiseComparison::validate(&aclInput0,</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  &aclInput1,</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  &aclOutput,</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  comparisonOperation);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> }</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">◆ </a></span>NeonConcatWorkloadValidate()</h2> +<a id="a3653413d74a951674c88db372d217baa"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3653413d74a951674c88db372d217baa">◆ </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< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *> & </td> + <td class="paramtype">const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> * > & </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> {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  std::vector<arm_compute::TensorInfo> aclInputs;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <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>  {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  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>  aclInputs.emplace_back(aclInputInfo);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  }</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  std::vector<const arm_compute::ITensorInfo*> aclInputPtrs;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">for</span> (arm_compute::ITensorInfo& input : aclInputs)</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  {</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  aclInputPtrs.emplace_back(&input);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordtype">size_t</span> aclAxis = CalcAxis(descriptor);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">return</span> arm_compute::NEConcatenateLayer::validate(aclInputPtrs, &aclOutputInfo, aclAxis);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</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> {</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  std::vector<arm_compute::TensorInfo> aclInputs;</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <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>  {</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  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>  aclInputs.emplace_back(aclInputInfo);</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  }</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  std::vector<const arm_compute::ITensorInfo*> aclInputPtrs;</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">for</span> (arm_compute::ITensorInfo& input : aclInputs)</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  {</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  aclInputPtrs.emplace_back(&input);</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  }</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordtype">size_t</span> aclAxis = CalcAxis(descriptor);</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">return</span> arm_compute::NEConcatenateLayer::validate(aclInputPtrs, &aclOutputInfo, aclAxis);</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</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> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  std::array<arm_compute::DataType,9> supportedTypes = {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  arm_compute::DataType::BFLOAT16,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  arm_compute::DataType::F16,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  arm_compute::DataType::F32,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  arm_compute::DataType::QASYMM8,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  arm_compute::DataType::QASYMM8_SIGNED,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  arm_compute::DataType::QSYMM16,</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  arm_compute::DataType::QSYMM8,</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  arm_compute::DataType::QSYMM8_PER_CHANNEL,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  arm_compute::DataType::S32</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  };</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">if</span> (it != end(supportedTypes))</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  }</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Unsupported DataType"</span>};</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</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> {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  std::array<arm_compute::DataType,9> supportedTypes = {</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  arm_compute::DataType::BFLOAT16,</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  arm_compute::DataType::F16,</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  arm_compute::DataType::F32,</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  arm_compute::DataType::QASYMM8,</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  arm_compute::DataType::QASYMM8_SIGNED,</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  arm_compute::DataType::QSYMM16,</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  arm_compute::DataType::QSYMM8,</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  arm_compute::DataType::QSYMM8_PER_CHANNEL,</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  arm_compute::DataType::S32</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  };</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  </div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">if</span> (it != end(supportedTypes))</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  {</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  }</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  {</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">"Unsupported DataType"</span>};</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  }</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</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> {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  <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>  arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  aclWeightsInfo.set_are_values_constant(weights.IsConstant());</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <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>  descriptor.m_DilationY);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  <span class="comment">// Same for bias as weights. We don't currently support non const.</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">if</span> (!biases.value().IsConstant())</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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>  <span class="stringliteral">"ArmNN NeonConvolution2dWorkload does not support non constant bias."</span>};</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  aclBiasesInfo.set_are_values_constant(biases.value().IsConstant());</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  optionalAclBiasesInfo = &aclBiasesInfo;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  arm_compute::PadStrideInfo layerInfo = BuildArmComputePadStrideInfo(descriptor);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <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>  activationDescriptor);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">return</span> arm_compute::NEConvolutionLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  &aclWeightsInfo,</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  optionalAclBiasesInfo,</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  &aclOutputInfo,</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  layerInfo,</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  arm_compute::WeightsInfo(),</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  aclDilationInfo,</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  activationInfo,</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  isFastMathEnabled);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</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 &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> {</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  <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>  arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  aclWeightsInfo.set_are_values_constant(weights.IsConstant());</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  </div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <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>  descriptor.m_DilationY);</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  </div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  arm_compute::TensorInfo aclBiasesInfo;</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  </div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  {</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  <span class="comment">// Same for bias as weights. We don't currently support non const.</span></div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">if</span> (!biases.value().IsConstant())</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  {</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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>  <span class="stringliteral">"ArmNN NeonConvolution2dWorkload does not support non constant bias."</span>};</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  }</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  aclBiasesInfo.set_are_values_constant(biases.value().IsConstant());</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  optionalAclBiasesInfo = &aclBiasesInfo;</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  </div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  arm_compute::PadStrideInfo layerInfo = BuildArmComputePadStrideInfo(descriptor);</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  </div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <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>  activationDescriptor);</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">return</span> arm_compute::NEConvolutionLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  &aclWeightsInfo,</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  optionalAclBiasesInfo,</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  layerInfo,</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  arm_compute::WeightsInfo(),</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  aclDilationInfo,</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  activationInfo,</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  isFastMathEnabled);</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</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> {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  <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>  arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <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> </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  optionalAclBiasesInfo = &aclBiasesInfo;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <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> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  isFastMathEnabled,</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  activationDescriptor);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> arm_compute::NEConv3D::validate(&aclInputInfo,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  &aclWeightsInfo,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  optionalAclBiasesInfo,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  &aclOutputInfo,</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  aclConv3DInfo);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</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> {</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  <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>  arm_compute::TensorInfo aclBiasesInfo;</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <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>  </div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  optionalAclBiasesInfo = &aclBiasesInfo;</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <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>  </div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  isFastMathEnabled,</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  activationDescriptor);</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  </div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> arm_compute::NEConv3D::validate(&aclInputInfo,</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  &aclWeightsInfo,</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  optionalAclBiasesInfo,</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  aclConv3DInfo);</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  int32_t blockSize = armnn::numeric_cast<int32_t>(descriptor.m_BlockSize);</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">return</span> arm_compute::NEDepthToSpaceLayer::validate(&aclInput, &aclOutput, blockSize);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  <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> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  int32_t blockSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><int32_t>(descriptor.m_BlockSize);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">return</span> arm_compute::NEDepthToSpaceLayer::validate(&aclInput, &aclOutput, blockSize);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <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>  <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> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  <span class="comment">//</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="comment">// ACL format for weights for depthwise is:</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <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>  <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>  <span class="comment">//</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  <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>  <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>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclDepthMultiplier;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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>  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> </div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <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>  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>  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> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  arm_compute::TensorInfo* optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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>  {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <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>  <span class="comment">// Same for bias as weights. We don't currently support non const.</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <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>  {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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>  <span class="stringliteral">"ArmNN NeonDepthwiseConv2dWorkload does not support non constant bias."</span>};</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  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>  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>  optionalAclBiasesInfo = &aclBiasesInfo;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  arm_compute::PadStrideInfo aclPadStrideInfo = BuildArmComputePadStrideInfo(descriptor);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keyword">const</span> arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  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> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <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>  activationDescriptor);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> arm_compute::NEDepthwiseConvolutionLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  &aclWeightsInfo,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  optionalAclBiasesInfo,</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  &aclOutputInfo,</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  aclPadStrideInfo,</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  aclDepthMultiplier,</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  activationInfo,</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  aclDilationInfo);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</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< std::is_reference< T >::value, T >::value</a></div><div class="ttdeci">const T & 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< TensorInfo, unsigned int > Convert1HWOTensorInfoToAcl(const TensorInfo &weightInfo, const TensorInfo &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 &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> {</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <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>  <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>  </div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  <span class="comment">//</span></div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="comment">// ACL format for weights for depthwise is:</span></div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <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>  <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>  <span class="comment">//</span></div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  <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>  <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>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclDepthMultiplier;</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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>  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>  </div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <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>  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>  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>  </div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  arm_compute::TensorInfo aclBiasesInfo;</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  arm_compute::TensorInfo* optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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>  {</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <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>  <span class="comment">// Same for bias as weights. We don't currently support non const.</span></div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <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>  {</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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>  <span class="stringliteral">"ArmNN NeonDepthwiseConv2dWorkload does not support non constant bias."</span>};</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  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>  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>  optionalAclBiasesInfo = &aclBiasesInfo;</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  }</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  </div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  arm_compute::PadStrideInfo aclPadStrideInfo = BuildArmComputePadStrideInfo(descriptor);</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keyword">const</span> arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  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>  </div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <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>  activationDescriptor);</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  </div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> arm_compute::NEDepthwiseConvolutionLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  &aclWeightsInfo,</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  optionalAclBiasesInfo,</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  aclPadStrideInfo,</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  aclDepthMultiplier,</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  activationInfo,</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  aclDilationInfo);</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</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> {</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">return</span> arm_compute::NEDequantizationLayer::validate(&aclInput, &aclOutput);</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</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> {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">return</span> arm_compute::NEDequantizationLayer::validate(&aclInput, &aclOutput);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</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> {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#if !defined(ARMNN_BUILD_BARE_METAL) && (defined(__arm__) || defined(__aarch64__))</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">auto</span> hwcaps= getauxval(AT_HWCAP);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#if !defined(ARMNN_BUILD_BARE_METAL) && defined(__aarch64__)</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">if</span> (hwcaps & HWCAP_ASIMD)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="comment">// On an arm64 device with Neon.</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="comment">// On an arm64 device without Neon.</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#if !defined(ARMNN_BUILD_BARE_METAL) && defined(__arm__)</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">if</span> (hwcaps & HWCAP_NEON)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="comment">// On an armhf device with Neon.</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="comment">// On an armhf device without Neon.</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <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>  <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>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> {</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#if !defined(ARMNN_BUILD_BARE_METAL) && (defined(__arm__) || defined(__aarch64__))</span></div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">auto</span> hwcaps= getauxval(AT_HWCAP);</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#endif</span></div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  </div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#if !defined(ARMNN_BUILD_BARE_METAL) && defined(__aarch64__)</span></div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">if</span> (hwcaps & HWCAP_ASIMD)</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="comment">// On an arm64 device with Neon.</span></div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  }</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="comment">// On an arm64 device without Neon.</span></div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  }</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  </div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#endif</span></div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#if !defined(ARMNN_BUILD_BARE_METAL) && defined(__arm__)</span></div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  </div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">if</span> (hwcaps & HWCAP_NEON)</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="comment">// On an armhf device with Neon.</span></div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  {</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="comment">// On an armhf device without Neon.</span></div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  </div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor">#endif</span></div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  </div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <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>  <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>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</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> {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  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> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclBoxEncodings =</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  armcomputetensorutils::BuildArmComputeTensorInfo(boxEncodings);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclScores =</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  armcomputetensorutils::BuildArmComputeTensorInfo(scores);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclAnchors =</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  armcomputetensorutils::BuildArmComputeTensorInfo(anchors);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  arm_compute::TensorInfo aclDetectionBoxes =</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  armcomputetensorutils::BuildArmComputeTensorInfo(detectionBoxes);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  arm_compute::TensorInfo aclDetectionClasses =</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  armcomputetensorutils::BuildArmComputeTensorInfo(detectionClasses);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  arm_compute::TensorInfo aclDetectionScores =</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  armcomputetensorutils::BuildArmComputeTensorInfo(detectionScores);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  arm_compute::TensorInfo aclNumDetections =</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  armcomputetensorutils::BuildArmComputeTensorInfo(numDetections);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">return</span> arm_compute::NEDetectionPostProcessLayer::validate(</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  &aclBoxEncodings,</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  &aclScores,</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  &aclAnchors,</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  &aclDetectionBoxes,</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  &aclDetectionClasses,</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  &aclDetectionScores,</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  &aclNumDetections,</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  info);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> }</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 &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> {</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  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>  </div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclBoxEncodings =</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  armcomputetensorutils::BuildArmComputeTensorInfo(boxEncodings);</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  </div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclScores =</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  armcomputetensorutils::BuildArmComputeTensorInfo(scores);</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  </div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclAnchors =</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  armcomputetensorutils::BuildArmComputeTensorInfo(anchors);</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  </div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  arm_compute::TensorInfo aclDetectionBoxes =</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  armcomputetensorutils::BuildArmComputeTensorInfo(detectionBoxes);</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  </div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  arm_compute::TensorInfo aclDetectionClasses =</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  armcomputetensorutils::BuildArmComputeTensorInfo(detectionClasses);</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  </div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  arm_compute::TensorInfo aclDetectionScores =</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  armcomputetensorutils::BuildArmComputeTensorInfo(detectionScores);</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  </div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  arm_compute::TensorInfo aclNumDetections =</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  armcomputetensorutils::BuildArmComputeTensorInfo(numDetections);</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  </div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">return</span> arm_compute::NEDetectionPostProcessLayer::validate(</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  &aclBoxEncodings,</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  &aclScores,</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  &aclAnchors,</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  &aclDetectionBoxes,</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  &aclDetectionClasses,</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  &aclDetectionScores,</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  &aclNumDetections,</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  info);</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> }</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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  <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> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  activationDescriptor);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">return</span> arm_compute::NEElementwiseDivision::validate(&aclInput0,</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  &aclInput1,</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  &aclOutput,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  activationInfo);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> }</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 &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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  activationDescriptor);</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  </div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">return</span> arm_compute::NEElementwiseDivision::validate(&aclInput0,</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  &aclInput1,</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  &aclOutput,</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  activationInfo);</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> }</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> {</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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>  </div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> arm_compute::NEExpLayer::validate(&aclInput, &aclOutput);</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> }</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> {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> arm_compute::NEExpLayer::validate(&aclInput, &aclOutput);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> }</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> {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  arm_compute::TensorInfo aclWeights = BuildArmComputeTensorInfo(weights);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  aclWeights.set_are_values_constant(weights.IsConstant());</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  arm_compute::TensorInfo aclBiases;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  arm_compute::TensorInfo* optionalAclBiases = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <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>  <span class="comment">// Same for bias as weights. We don't currently support non const.</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">if</span> (!biases.value().IsConstant())</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <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>  <span class="stringliteral">"Arm NN NeonFullyConnectedWorkload does not support non constant bias."</span>};</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  aclBiases = BuildArmComputeTensorInfo(biases.value());</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  aclBiases.set_are_values_constant(biases.value().IsConstant());</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  optionalAclBiases = &aclBiases;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  }</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">const</span> arm_compute::FullyConnectedLayerInfo fullyConnectedLayerInfo =</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="namespacearmnn.xhtml#ae2e0c1d8160fadce44d479379790718e">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a>(descriptor, activationDescriptor);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">return</span> arm_compute::NEFullyConnectedLayer::validate(&aclInput,</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  &aclWeights,</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  optionalAclBiases,</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  &aclOutput,</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  fullyConnectedLayerInfo);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</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 &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> {</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  arm_compute::TensorInfo aclWeights = BuildArmComputeTensorInfo(weights);</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  aclWeights.set_are_values_constant(weights.IsConstant());</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  </div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  arm_compute::TensorInfo aclBiases;</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  arm_compute::TensorInfo* optionalAclBiases = <span class="keyword">nullptr</span>;</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <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>  <span class="comment">// Same for bias as weights. We don't currently support non const.</span></div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">if</span> (!biases.value().IsConstant())</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  {</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <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>  <span class="stringliteral">"Arm NN NeonFullyConnectedWorkload does not support non constant bias."</span>};</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  }</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  aclBiases = BuildArmComputeTensorInfo(biases.value());</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  aclBiases.set_are_values_constant(biases.value().IsConstant());</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  optionalAclBiases = &aclBiases;</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  }</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  </div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">const</span> arm_compute::FullyConnectedLayerInfo fullyConnectedLayerInfo =</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="namespacearmnn.xhtml#ae2e0c1d8160fadce44d479379790718e">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a>(descriptor, activationDescriptor);</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">return</span> arm_compute::NEFullyConnectedLayer::validate(&aclInput,</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  &aclWeights,</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  optionalAclBiases,</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  &aclOutput,</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  fullyConnectedLayerInfo);</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</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> {</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="comment">// Calculate ND, K, W, C.</span></div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  std::map<std::string, unsigned int> 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> <span class="comment"></span> </div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> /// Validate Mul</span></div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <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>  <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>  indices_W_ND_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"W"</span>], keyIndices[<span class="stringliteral">"ND"</span>] });</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="comment">// Flattened coefficients with shape { ND }</span></div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <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>  flattenedCoeff_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"ND"</span>] });</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <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>  </div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="comment">// Output of Mul with shape { W, ND }</span></div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <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>  </div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">auto</span> statusMul = arm_compute::NEPixelWiseMultiplication::validate(&aclIndicesInfo,</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  &aclFlattenedCoeffInfo,</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  &aclOutputMulInfo,</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  1.0f,</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  arm_compute::ConvertPolicy::WRAP,</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  arm_compute::RoundingPolicy::TO_ZERO,</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  arm_compute::ActivationLayerInfo());</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment"></span> </div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment"> /// Validate ReduceSum</span></div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <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>  <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>  flattenedIndices_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"W"</span>] });</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <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>  </div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">const</span> std::vector<unsigned int> armnnReduceAxes(1, 1);</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <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>  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>  armnnReduceAxes);</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  </div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">auto</span> statusReduceSum = arm_compute::NEReductionOperation::validate(&aclOutputMulInfo,</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  &aclFlattenedIndicesInfo,</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(coords[0]),</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  arm_compute::ReductionOperation::SUM,</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">false</span>);</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment"></span> </div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment"> /// Validate Gather</span></div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <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>  <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>  params_K_C_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"K"</span>], keyIndices[<span class="stringliteral">"C"</span>] });</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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>  </div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="comment">// Output of gather with shape { W, C }</span></div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <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>  outputGather_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"W"</span>], keyIndices[<span class="stringliteral">"C"</span>] });</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <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>  </div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <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>  <span class="keyword">auto</span> statusGather =</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  arm_compute::NEGather::validate(&aclParamsInfo, &aclFlattenedIndicesInfo, &aclOutputGatherInfo, aclAxis);</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment"></span> </div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment"> /// Validate Reshape</span></div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <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>  </div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">auto</span> statusReshape = arm_compute::NEReshapeLayer::validate(&aclOutputGatherInfo, &aclOutputInfo);</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment"></span> </div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <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> <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>  <span class="keywordflow">if</span> (statusMul.error_code() == okCode &&</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  statusReduceSum.error_code() == okCode &&</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  statusGather.error_code() == okCode &&</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  statusReshape.error_code() == okCode)</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <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>  <span class="stringliteral">"All GatherND layers validate status OK."</span>);</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  {</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <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>  <span class="stringliteral">"GatherND layer validate status failed."</span>);</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  }</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> }</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> {</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="comment">// Calculate ND, K, W, C.</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  std::map<std::string, unsigned int> 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> <span class="comment"></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> /// Validate Mul</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <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>  <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>  indices_W_ND_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"W"</span>], keyIndices[<span class="stringliteral">"ND"</span>] });</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="comment">// Flattened coefficients with shape { ND }</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <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>  flattenedCoeff_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"ND"</span>] });</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <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> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="comment">// Output of Mul with shape { W, ND }</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <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> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">auto</span> statusMul = arm_compute::NEPixelWiseMultiplication::validate(&aclIndicesInfo,</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  &aclFlattenedCoeffInfo,</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  &aclOutputMulInfo,</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  1.0f,</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  arm_compute::ConvertPolicy::WRAP,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  arm_compute::RoundingPolicy::TO_ZERO,</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  arm_compute::ActivationLayerInfo());</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment"></span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment"> /// Validate ReduceSum</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <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>  <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>  flattenedIndices_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"W"</span>] });</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <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> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">const</span> std::vector<unsigned int> armnnReduceAxes(1, 1);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <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>  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>  armnnReduceAxes);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">auto</span> statusReduceSum = arm_compute::NEReductionOperation::validate(&aclOutputMulInfo,</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  &aclFlattenedIndicesInfo,</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  static_cast<unsigned int>(coords[0]),</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  arm_compute::ReductionOperation::SUM,</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">false</span>);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment"></span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment"> /// Validate Gather</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <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>  <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>  params_K_C_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"K"</span>], keyIndices[<span class="stringliteral">"C"</span>] });</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="comment">// Output of gather with shape { W, C }</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <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>  outputGather_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">"W"</span>], keyIndices[<span class="stringliteral">"C"</span>] });</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <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> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <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>  <span class="keyword">auto</span> statusGather =</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  arm_compute::NEGather::validate(&aclParamsInfo, &aclFlattenedIndicesInfo, &aclOutputGatherInfo, aclAxis);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment"></span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment"> /// Validate Reshape</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <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> </div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">auto</span> statusReshape = arm_compute::NEReshapeLayer::validate(&aclOutputGatherInfo, &aclOutputInfo);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment"></span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <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> <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>  <span class="keywordflow">if</span> (statusMul.error_code() == okCode &&</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  statusReduceSum.error_code() == okCode &&</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  statusGather.error_code() == okCode &&</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  statusReshape.error_code() == okCode)</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <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>  <span class="stringliteral">"All GatherND layers validate status OK."</span>);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <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>  <span class="stringliteral">"GatherND layer validate status failed."</span>);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> }</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 &armnnAxis, const armnn::TensorInfo &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< std::string, unsigned int > 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< unsigned int, MaxNumOfTensorDimensions > 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 &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> {</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclIndices = BuildArmComputeTensorInfo(indices);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keywordflow">return</span> arm_compute::NEGather::validate(&aclInput, &aclIndices, &aclOutput, aclAxis);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> }</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 &armnnAxis, const armnn::TensorInfo &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> {</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclIndices = BuildArmComputeTensorInfo(indices);</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  </div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keywordflow">return</span> arm_compute::NEGather::validate(&aclInput, &aclIndices, &aclOutput, aclAxis);</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> }</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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  </div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keywordflow">return</span> arm_compute::NEInstanceNormalizationLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  descriptor.m_Gamma,</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  descriptor.m_Beta,</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  descriptor.m_Eps);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keywordflow">return</span> arm_compute::NEInstanceNormalizationLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  &aclOutputInfo,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  descriptor.m_Gamma,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  descriptor.m_Beta,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  descriptor.m_Eps);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  </div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <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>  </div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">return</span> arm_compute::NEL2NormalizeLayer::validate(&aclInput, &aclOutput, axis, descriptor.m_Eps);</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <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> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">return</span> arm_compute::NEL2NormalizeLayer::validate(&aclInput, &aclOutput, axis, descriptor.m_Eps);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</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> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo0 = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo1 = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NELogicalAnd::validate(&aclInputInfo0,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  &aclInputInfo1,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  &aclOutputInfo);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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> {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo0 = BuildArmComputeTensorInfo(input0);</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo1 = BuildArmComputeTensorInfo(input1);</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NELogicalAnd::validate(&aclInputInfo0,</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  &aclInputInfo1,</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  &aclOutputInfo);</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NELogicalNot::validate(&aclInputInfo,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  &aclOutputInfo);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> }</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> {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NELogicalNot::validate(&aclInputInfo,</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  &aclOutputInfo);</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> }</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> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo0 = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo1 = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NELogicalOr::validate(&aclInputInfo0,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  &aclInputInfo1,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  &aclOutputInfo);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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> {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo0 = BuildArmComputeTensorInfo(input0);</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo1 = BuildArmComputeTensorInfo(input1);</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NELogicalOr::validate(&aclInputInfo0,</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  &aclInputInfo1,</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  &aclOutputInfo);</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">return</span> aclStatus;</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <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>  <span class="keywordflow">return</span> arm_compute::NELogSoftmaxLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  &aclOutputInfo,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  descriptor.m_Beta,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  aclAxis);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</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 &armnnAxis, const armnn::TensorInfo &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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  </div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <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>  <span class="keywordflow">return</span> arm_compute::NELogSoftmaxLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  descriptor.m_Beta,</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  aclAxis);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</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> {</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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>  </div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> arm_compute::NELogLayer::validate(&aclInput, &aclOutput);</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> }</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> {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> arm_compute::NELogLayer::validate(&aclInput, &aclOutput);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> }</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> {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  arm_compute::LSTMParams<arm_compute::ITensorInfo> lstm_params_info;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="comment">// The inputs and outputs</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="comment">// Basic parameters</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  arm_compute::TensorInfo aclInputToInputWeightsInfo;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  arm_compute::TensorInfo aclCellToInputWeightsInfo;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  arm_compute::TensorInfo aclInputGateBiasInfo;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  arm_compute::TensorInfo aclProjectionWeightsInfo;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  arm_compute::TensorInfo aclProjectionBiasInfo;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  lstm_params_info.set_cifg_params(&aclInputToInputWeightsInfo, &aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  descriptor.m_PeepholeEnabled ? &aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  &aclInputGateBiasInfo);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  }</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  {</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <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>  {</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  lstm_params_info.set_projection_params(&aclProjectionWeightsInfo,</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ?</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  &aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  lstm_params_info.set_peephole_params(&aclCellToForgetWeightsInfo, &aclCellToOutputWeightsInfo);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  }</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  {</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  }</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ?</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">nullptr</span> : &aclInputLayerNormWeightsInfo,</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  &aclForgetLayerNormWeightsInfo,</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  &aclCellLayerNormWeightsInfo,</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  &aclOutputLayerNormWeightsInfo);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <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>  arm_compute::ActivationLayerInfo activationLayerInfo =</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <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> </div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordflow">return</span> arm_compute::NELSTMLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  &aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  &aclInputToCellWeightsInfo,</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  &aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  &aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  &aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  &aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  &aclForgetGateBiasInfo,</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  &aclCellBiasInfo,</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  &aclOutputGateBiasInfo,</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  &aclOutputStateInInfo,</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  &aclCellStateInInfo,</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  &aclScratchBufferInfo,</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  &aclOutputStateOutInfo,</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  &aclCellStateOutInfo,</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  &aclOutputInfo,</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  lstm_params_info,</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  activationLayerInfo,</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  cell_threshold,</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  projection_threshold);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> }</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> {</div> +<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  arm_compute::LSTMParams<arm_compute::ITensorInfo> lstm_params_info;</div> +<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  </div> +<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="comment">// The inputs and outputs</span></div> +<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div> +<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div> +<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div> +<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div> +<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div> +<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  </div> +<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="comment">// Basic parameters</span></div> +<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div> +<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div> +<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div> +<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div> +<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div> +<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div> +<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div> +<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div> +<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div> +<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div> +<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div> +<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div> +<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div> +<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div> +<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div> +<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div> +<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div> +<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div> +<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  </div> +<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  arm_compute::TensorInfo aclInputToInputWeightsInfo;</div> +<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div> +<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  arm_compute::TensorInfo aclCellToInputWeightsInfo;</div> +<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  arm_compute::TensorInfo aclInputGateBiasInfo;</div> +<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  arm_compute::TensorInfo aclProjectionWeightsInfo;</div> +<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  arm_compute::TensorInfo aclProjectionBiasInfo;</div> +<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div> +<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div> +<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  </div> +<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div> +<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div> +<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div> +<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div> +<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  </div> +<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  </div> +<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div> +<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  {</div> +<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div> +<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  {</div> +<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div> +<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div> +<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div> +<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div> +<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div> +<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  </div> +<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  lstm_params_info.set_cifg_params(&aclInputToInputWeightsInfo, &aclRecurrentToInputWeightsInfo,</div> +<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  descriptor.m_PeepholeEnabled ? &aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div> +<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  &aclInputGateBiasInfo);</div> +<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  }</div> +<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  </div> +<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div> +<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  {</div> +<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <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>  {</div> +<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div> +<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div> +<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div> +<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  </div> +<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  lstm_params_info.set_projection_params(&aclProjectionWeightsInfo,</div> +<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ?</div> +<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  &aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div> +<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div> +<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  </div> +<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div> +<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  {</div> +<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div> +<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div> +<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  </div> +<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  lstm_params_info.set_peephole_params(&aclCellToForgetWeightsInfo, &aclCellToOutputWeightsInfo);</div> +<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  }</div> +<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  </div> +<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div> +<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  {</div> +<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div> +<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  {</div> +<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div> +<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  }</div> +<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div> +<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div> +<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div> +<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  </div> +<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ?</div> +<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">nullptr</span> : &aclInputLayerNormWeightsInfo,</div> +<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  &aclForgetLayerNormWeightsInfo,</div> +<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  &aclCellLayerNormWeightsInfo,</div> +<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  &aclOutputLayerNormWeightsInfo);</div> +<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div> +<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  </div> +<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div> +<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</div> +<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  </div> +<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <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>  arm_compute::ActivationLayerInfo activationLayerInfo =</div> +<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <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>  </div> +<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordflow">return</span> arm_compute::NELSTMLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  &aclInputToForgetWeightsInfo,</div> +<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  &aclInputToCellWeightsInfo,</div> +<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  &aclInputToOutputWeightsInfo,</div> +<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  &aclRecurrentToForgetWeightsInfo,</div> +<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  &aclRecurrentToCellWeightsInfo,</div> +<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  &aclRecurrentToOutputWeightsInfo,</div> +<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  &aclForgetGateBiasInfo,</div> +<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  &aclCellBiasInfo,</div> +<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  &aclOutputGateBiasInfo,</div> +<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  &aclOutputStateInInfo,</div> +<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  &aclCellStateInInfo,</div> +<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  &aclScratchBufferInfo,</div> +<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  &aclOutputStateOutInfo,</div> +<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  &aclCellStateOutInfo,</div> +<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  lstm_params_info,</div> +<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  activationLayerInfo,</div> +<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  cell_threshold,</div> +<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  projection_threshold);</div> +<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> }</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> {</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> arm_compute::NEElementwiseMax::validate(&aclInput0,</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  &aclInput1,</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  &aclOutput);</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> }</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> {</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <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>  <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>  <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> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> arm_compute::NEElementwiseMax::validate(&aclInput0,</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  &aclInput1,</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  &aclOutput);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> }</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> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  <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> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  input.GetNumDimensions(),</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  descriptor.m_Axis);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">return</span> arm_compute::NEReduceMean::validate(&aclInputInfo, coords, descriptor.m_KeepDims, &aclOutputInfo);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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< unsigned int, MaxNumOfTensorDimensions > 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> {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  <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>  </div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  input.GetNumDimensions(),</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  descriptor.m_Axis);</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">return</span> arm_compute::NEReduceMean::validate(&aclInputInfo, coords, descriptor.m_KeepDims, &aclOutputInfo);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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> {</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::NEElementwiseMin::validate(&aclInput0,</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  &aclInput1,</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  &aclOutput);</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> }</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> {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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>  <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> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::NEElementwiseMin::validate(&aclInput0,</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  &aclInput1,</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  &aclOutput);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> }</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> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  <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>  <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> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <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>  arm_compute::ConvertPolicy::SATURATE :</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  arm_compute::ConvertPolicy::WRAP;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  activationDescriptor);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  <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>  <span class="comment">// ignored for F32 tensors.</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">return</span> arm_compute::NEPixelWiseMultiplication::validate(&aclInput1,</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  &aclInput2,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  &aclOutput,</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  1.0f,</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  convertPolicy,</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  arm_compute::RoundingPolicy::TO_ZERO,</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  activationInfo);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</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 &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> {</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <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>  arm_compute::ConvertPolicy::SATURATE :</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  arm_compute::ConvertPolicy::WRAP;</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  </div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  activationDescriptor);</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  </div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  <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>  <span class="comment">// ignored for F32 tensors.</span></div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">return</span> arm_compute::NEPixelWiseMultiplication::validate(&aclInput1,</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  &aclInput2,</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  &aclOutput,</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  1.0f,</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  convertPolicy,</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  arm_compute::RoundingPolicy::TO_ZERO,</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  activationInfo);</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</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> {</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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>  </div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> arm_compute::NENegLayer::validate(&aclInput, &aclOutput);</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> }</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> {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> arm_compute::NENegLayer::validate(&aclInput, &aclOutput);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> }</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> {</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <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>  <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>  </div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  arm_compute::NormalizationLayerInfo normalizationInfo = BuildArmComputeNormalizationLayerInfo(descriptor);</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  </div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">return</span> arm_compute::NENormalizationLayer::validate(&aclInput, &aclOutput, normalizationInfo);</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</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> {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <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>  <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> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  arm_compute::NormalizationLayerInfo normalizationInfo = BuildArmComputeNormalizationLayerInfo(descriptor);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">return</span> arm_compute::NENormalizationLayer::validate(&aclInput, &aclOutput, normalizationInfo);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</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> {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  std::vector<std::pair<unsigned int, unsigned int>> reversed_PadList(descriptor.m_PadList.size());</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  std::reverse_copy(std::begin(descriptor.m_PadList),</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  std::end(descriptor.m_PadList),</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  std::begin(reversed_PadList));</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  arm_compute::PaddingList padList = <span class="keyword">static_cast<</span>arm_compute::PaddingList<span class="keyword">></span>(reversed_PadList);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="comment">// PixelValue is currently unused when validating, but it's required to pass in PaddingMode.</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  arm_compute::PixelValue pixelValue = GetPixelValue(&aclInputInfo, descriptor.m_PadValue);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">return</span> arm_compute::NEPadLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  &aclOutputInfo,</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  padList,</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  pixelValue,</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <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> }</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 &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> {</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  </div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  std::vector<std::pair<unsigned int, unsigned int>> reversed_PadList(descriptor.m_PadList.size());</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  </div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  std::reverse_copy(std::begin(descriptor.m_PadList),</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  std::end(descriptor.m_PadList),</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  std::begin(reversed_PadList));</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  </div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  arm_compute::PaddingList padList = <span class="keyword">static_cast<</span>arm_compute::PaddingList<span class="keyword">></span>(reversed_PadList);</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  </div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="comment">// PixelValue is currently unused when validating, but it's required to pass in PaddingMode.</span></div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  arm_compute::PixelValue pixelValue = GetPixelValue(&aclInputInfo, descriptor.m_PadValue);</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">return</span> arm_compute::NEPadLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  padList,</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  pixelValue,</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <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> }</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> {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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>  <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a>& mappings = descriptor.m_DimMappings;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::NEPermute::validate(&aclInputInfo, &aclOutputInfo,</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  armcomputetensorutils::BuildArmComputePermutationVector(mappings));</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> }</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> {</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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>  <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a>& mappings = descriptor.m_DimMappings;</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::NEPermute::validate(&aclInputInfo, &aclOutputInfo,</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  armcomputetensorutils::BuildArmComputePermutationVector(mappings));</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> }</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> {</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo =</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo =</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  arm_compute::PoolingLayerInfo layerInfo = BuildArmComputePoolingLayerInfo(descriptor);</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  </div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">return</span> arm_compute::NEPoolingLayer::validate(&aclInputInfo, &aclOutputInfo, layerInfo);</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> }</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> {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo =</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo =</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  arm_compute::PoolingLayerInfo layerInfo = BuildArmComputePoolingLayerInfo(descriptor);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">return</span> arm_compute::NEPoolingLayer::validate(&aclInputInfo, &aclOutputInfo, layerInfo);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> }</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>  {</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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>  arm_compute::Pooling3dLayerInfo layerInfo = BuildArmComputePooling3dLayerInfo(descriptor);</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> arm_compute::NEPooling3dLayer::validate(&aclInputInfo, &aclOutputInfo, layerInfo);</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  }</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>  {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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>  arm_compute::Pooling3dLayerInfo layerInfo = BuildArmComputePooling3dLayerInfo(descriptor);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> arm_compute::NEPooling3dLayer::validate(&aclInputInfo, &aclOutputInfo, layerInfo);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  }</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> {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keywordflow">return</span> arm_compute::NEPReluLayer::validate(&aclInput,</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  &aclAlpha,</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  &aclOutput);</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> }</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> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  <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>  <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> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keywordflow">return</span> arm_compute::NEPReluLayer::validate(&aclInput,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  &aclAlpha,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  &aclOutput);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> }</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> {</div> +<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  arm_compute::LSTMParams<arm_compute::ITensorInfo> aclParamsInfo;</div> +<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  </div> +<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="comment">// Input/Output tensor info</span></div> +<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div> +<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div> +<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  </div> +<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div> +<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div> +<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  </div> +<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="comment">// Mandatory tensor info</span></div> +<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div> +<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div> +<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div> +<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div> +<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div> +<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div> +<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div> +<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div> +<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div> +<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div> +<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div> +<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div> +<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div> +<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div> +<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div> +<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div> +<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div> +<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div> +<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  </div> +<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="comment">// Optional tensor info</span></div> +<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  arm_compute::TensorInfo aclInputToInputWeightsInfo;</div> +<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div> +<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  </div> +<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  arm_compute::TensorInfo aclCellToInputWeightsInfo;</div> +<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div> +<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div> +<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  </div> +<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  arm_compute::TensorInfo aclInputGateBiasInfo;</div> +<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  </div> +<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  arm_compute::TensorInfo aclProjectionWeightsInfo;</div> +<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  arm_compute::TensorInfo aclProjectionBiasInfo;</div> +<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  </div> +<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div> +<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div> +<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div> +<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div> +<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  </div> +<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <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>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div> +<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  {</div> +<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div> +<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  {</div> +<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div> +<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div> +<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  </div> +<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div> +<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div> +<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  </div> +<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="comment">// Set peephole params info</span></div> +<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  aclParamsInfo.set_peephole_params(&aclCellToForgetWeightsInfo,</div> +<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  &aclCellToOutputWeightsInfo);</div> +<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</div> +<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  </div> +<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div> +<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  {</div> +<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div> +<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  </div> +<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <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>  {</div> +<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div> +<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  }</div> +<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  </div> +<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="comment">// Set projection params info</span></div> +<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  aclParamsInfo.set_projection_params(</div> +<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  &aclProjectionWeightsInfo,</div> +<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ? &aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div> +<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div> +<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  </div> +<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div> +<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  {</div> +<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div> +<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  {</div> +<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div> +<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  }</div> +<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  </div> +<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div> +<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div> +<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div> +<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  </div> +<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="comment">// Set layer norm params info</span></div> +<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  aclParamsInfo.set_layer_normalization_params(</div> +<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  paramsInfo.m_InputLayerNormWeights != <span class="keyword">nullptr</span> ? &aclInputLayerNormWeightsInfo : <span class="keyword">nullptr</span>,</div> +<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  &aclForgetLayerNormWeightsInfo,</div> +<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  &aclCellLayerNormWeightsInfo,</div> +<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  &aclOutputLayerNormWeightsInfo);</div> +<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  }</div> +<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  </div> +<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div> +<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  {</div> +<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div> +<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div> +<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div> +<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  </div> +<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="comment">// Set CIFG params info</span></div> +<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  aclParamsInfo.set_cifg_params(</div> +<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  &aclInputToInputWeightsInfo,</div> +<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  &aclRecurrentToInputWeightsInfo,</div> +<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</span> ? &aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div> +<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  &aclInputGateBiasInfo);</div> +<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  }</div> +<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  </div> +<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="comment">// Set scalar descriptor params</span></div> +<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  aclParamsInfo.set_cell_clip_params(descriptor.m_CellClip);</div> +<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  aclParamsInfo.set_projection_clip_params(descriptor.m_ProjectionClip);</div> +<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  aclParamsInfo.set_hidden_state_params(descriptor.m_HiddenStateZeroPoint, descriptor.m_HiddenStateScale);</div> +<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  aclParamsInfo.set_matmul_scale_params(descriptor.m_InputIntermediateScale,</div> +<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  descriptor.m_ForgetIntermediateScale,</div> +<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  descriptor.m_CellIntermediateScale,</div> +<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  descriptor.m_OutputIntermediateScale);</div> +<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  </div> +<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="comment">// QLSTM NEON validate</span></div> +<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordflow">return</span> arm_compute::NEQLSTMLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  &aclInputToForgetWeightsInfo,</div> +<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  &aclInputToCellWeightsInfo,</div> +<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  &aclInputToOutputWeightsInfo,</div> +<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  &aclRecurrentToForgetWeightsInfo,</div> +<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  &aclRecurrentToCellWeightsInfo,</div> +<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  &aclRecurrentToOutputWeightsInfo,</div> +<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  &aclForgetGateBiasInfo,</div> +<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  &aclCellBiasInfo,</div> +<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  &aclOutputGateBiasInfo,</div> +<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  &aclCellStateInInfo,</div> +<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  &aclOutputStateInInfo,</div> +<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  &aclCellStateOutInfo,</div> +<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  &aclOutputStateOutInfo,</div> +<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  aclParamsInfo);</div> +<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> }</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> {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  arm_compute::LSTMParams<arm_compute::ITensorInfo> aclParamsInfo;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="comment">// Input/Output tensor info</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="comment">// Mandatory tensor info</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="comment">// Optional tensor info</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  arm_compute::TensorInfo aclInputToInputWeightsInfo;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  arm_compute::TensorInfo aclCellToInputWeightsInfo;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  arm_compute::TensorInfo aclInputGateBiasInfo;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  arm_compute::TensorInfo aclProjectionWeightsInfo;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  arm_compute::TensorInfo aclProjectionBiasInfo;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <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>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="comment">// Set peephole params info</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  aclParamsInfo.set_peephole_params(&aclCellToForgetWeightsInfo,</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  &aclCellToOutputWeightsInfo);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <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>  {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  }</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="comment">// Set projection params info</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  aclParamsInfo.set_projection_params(</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  &aclProjectionWeightsInfo,</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ? &aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  }</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="comment">// Set layer norm params info</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  aclParamsInfo.set_layer_normalization_params(</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  paramsInfo.m_InputLayerNormWeights != <span class="keyword">nullptr</span> ? &aclInputLayerNormWeightsInfo : <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  &aclForgetLayerNormWeightsInfo,</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  &aclCellLayerNormWeightsInfo,</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  &aclOutputLayerNormWeightsInfo);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  {</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span> </div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="comment">// Set CIFG params info</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  aclParamsInfo.set_cifg_params(</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  &aclInputToInputWeightsInfo,</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  &aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</span> ? &aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  &aclInputGateBiasInfo);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  }</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="comment">// Set scalar descriptor params</span></div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  aclParamsInfo.set_cell_clip_params(descriptor.m_CellClip);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  aclParamsInfo.set_projection_clip_params(descriptor.m_ProjectionClip);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  aclParamsInfo.set_hidden_state_params(descriptor.m_HiddenStateZeroPoint, descriptor.m_HiddenStateScale);</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  aclParamsInfo.set_matmul_scale_params(descriptor.m_InputIntermediateScale,</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  descriptor.m_ForgetIntermediateScale,</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  descriptor.m_CellIntermediateScale,</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  descriptor.m_OutputIntermediateScale);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="comment">// QLSTM NEON validate</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordflow">return</span> arm_compute::NEQLSTMLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  &aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  &aclInputToCellWeightsInfo,</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  &aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  &aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  &aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  &aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  &aclForgetGateBiasInfo,</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  &aclCellBiasInfo,</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  &aclOutputGateBiasInfo,</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  &aclCellStateInInfo,</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  &aclOutputStateInInfo,</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  &aclCellStateOutInfo,</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  &aclOutputStateOutInfo,</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  &aclOutputInfo,</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  aclParamsInfo);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> }</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> {</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="comment">// The inputs and outputs</span></div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  </div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="comment">// Basic parameters</span></div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToInputWeightsInfo</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div> +<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div> +<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div> +<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  </div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToInputWeightsInfo</div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div> +<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div> +<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  </div> +<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputGateBiasInfo</div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div> +<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div> +<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  </div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">return</span> arm_compute::NELSTMLayerQuantized::validate(&aclInputInfo,</div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  &aclInputToInputWeightsInfo,</div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  &aclInputToForgetWeightsInfo,</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  &aclInputToCellWeightsInfo,</div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  &aclInputToOutputWeightsInfo,</div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  &aclRecurrentToInputWeightsInfo,</div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  &aclRecurrentToForgetWeightsInfo,</div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  &aclRecurrentToCellWeightsInfo,</div> +<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  &aclRecurrentToOutputWeightsInfo,</div> +<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  &aclInputGateBiasInfo,</div> +<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  &aclForgetGateBiasInfo,</div> +<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  &aclCellBiasInfo,</div> +<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  &aclOutputGateBiasInfo,</div> +<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  &aclCellStateInInfo,</div> +<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  &aclOutputStateInInfo,</div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  &aclCellStateOutInfo,</div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  &aclOutputStateOutInfo);</div> +<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> }</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> {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="comment">// The inputs and outputs</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="comment">// Basic parameters</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToInputWeightsInfo</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToInputWeightsInfo</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputGateBiasInfo</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">return</span> arm_compute::NELSTMLayerQuantized::validate(&aclInputInfo,</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  &aclInputToInputWeightsInfo,</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  &aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  &aclInputToCellWeightsInfo,</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  &aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  &aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  &aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  &aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  &aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  &aclInputGateBiasInfo,</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  &aclForgetGateBiasInfo,</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  &aclCellBiasInfo,</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  &aclOutputGateBiasInfo,</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  &aclCellStateInInfo,</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  &aclOutputStateInInfo,</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  &aclCellStateOutInfo,</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  &aclOutputStateOutInfo);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> }</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> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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>  </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::NEQuantizationLayer::validate(&neonInputInfo, &neonOutputInfo);</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::NEQuantizationLayer::validate(&neonInputInfo, &neonOutputInfo);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  {</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  <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>  </div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <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>  input.GetNumDimensions(),</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  descriptor.m_vAxis);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  </div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">return</span> arm_compute::NEReductionOperation::validate(&aclInputInfo,</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(coords[0]),</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <a class="code" href="namespacearmnn.xhtml#a03ab984d93d0f240f31274499b72e6b0">ConvertReductionOperationToAcl</a>(descriptor),</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  descriptor.m_KeepDims);</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  }</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="comment">// Validate layer if there are multiple axes.</span></div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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>  <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>  <span class="keywordflow">return</span> status;</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  }</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  <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> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <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>  input.GetNumDimensions(),</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  descriptor.m_vAxis);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">return</span> arm_compute::NEReductionOperation::validate(&aclInputInfo,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  &aclOutputInfo,</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  static_cast<unsigned int>(coords[0]),</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <a class="code" href="namespacearmnn.xhtml#a03ab984d93d0f240f31274499b72e6b0">ConvertReductionOperationToAcl</a>(descriptor),</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  descriptor.m_KeepDims);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  }</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="comment">// Validate layer if there are multiple axes.</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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>  <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>  <span class="keywordflow">return</span> status;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</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< unsigned int, MaxNumOfTensorDimensions > 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 &input, const TensorInfo &output, const ReduceDescriptor &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 &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> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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>  </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::NEReshapeLayer::validate(&aclInputInfo, &aclOutputInfo);</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::NEReshapeLayer::validate(&aclInputInfo, &aclOutputInfo);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  aclInputInfo.set_data_layout(aclDataLayout);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  aclOutputInfo.set_data_layout(aclDataLayout);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  arm_compute::InterpolationPolicy aclInterpolationPolicy =</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  arm_compute::SamplingPolicy samplingPolicy = descriptor.m_HalfPixelCenters ? arm_compute::SamplingPolicy::CENTER :</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  arm_compute::SamplingPolicy::TOP_LEFT;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordtype">bool</span> usePadding = <span class="keyword">false</span>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">return</span> arm_compute::NEScale::validate(&aclInputInfo,</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  &aclOutputInfo,</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  arm_compute::ScaleKernelInfo(aclInterpolationPolicy,</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  arm_compute::BorderMode::REPLICATE,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  arm_compute::PixelValue(0.f),</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  samplingPolicy,</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  usePadding,</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  descriptor.m_AlignCorners));</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> }</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> {</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  aclInputInfo.set_data_layout(aclDataLayout);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  aclOutputInfo.set_data_layout(aclDataLayout);</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  </div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  arm_compute::InterpolationPolicy aclInterpolationPolicy =</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <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>  </div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  arm_compute::SamplingPolicy samplingPolicy = descriptor.m_HalfPixelCenters ? arm_compute::SamplingPolicy::CENTER :</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  arm_compute::SamplingPolicy::TOP_LEFT;</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  </div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordtype">bool</span> usePadding = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  </div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">return</span> arm_compute::NEScale::validate(&aclInputInfo,</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  arm_compute::ScaleKernelInfo(aclInterpolationPolicy,</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  arm_compute::BorderMode::REPLICATE,</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  arm_compute::PixelValue(0.f),</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  samplingPolicy,</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  usePadding,</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  descriptor.m_AlignCorners));</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  </div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> }</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> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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>  </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::NERsqrtLayer::validate(&aclInput, &aclOutput);</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::NERsqrtLayer::validate(&aclInput, &aclOutput);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> }</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> {</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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>  </div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> arm_compute::NESinLayer::validate(&aclInput, &aclOutput);</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> }</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> {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> arm_compute::NESinLayer::validate(&aclInput, &aclOutput);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> }</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> {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  <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> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <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>  <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> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  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> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">return</span> arm_compute::NESlice::validate(&aclInputInfo, &aclOutputInfo, starts, ends);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> }</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< unsigned int, MaxNumOfTensorDimensions > 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< unsigned int > &m_begin, const std::vector< unsigned int > &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> {</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  <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>  </div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <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>  <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>  </div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  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>  </div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">return</span> arm_compute::NESlice::validate(&aclInputInfo, &aclOutputInfo, starts, ends);</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> }</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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <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>  <span class="keywordflow">return</span> arm_compute::NESoftmaxLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  &aclOutputInfo,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  descriptor.m_Beta,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  aclAxis);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</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 &armnnAxis, const armnn::TensorInfo &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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  </div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <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>  <span class="keywordflow">return</span> arm_compute::NESoftmaxLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  descriptor.m_Beta,</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  aclAxis);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</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> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  <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> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  int32_t blockHeight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><int32_t>(descriptor.m_BlockShape[0]);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  int32_t blockWidth = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><int32_t>(descriptor.m_BlockShape[1]);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  arm_compute::Size2D paddingLeftTop = BuildArmComputeSize2D(</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  descriptor.m_PadList[1].first, descriptor.m_PadList[0].first);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  arm_compute::Size2D paddingRightBottom = BuildArmComputeSize2D(</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  descriptor.m_PadList[1].second, descriptor.m_PadList[0].second);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">return</span> arm_compute::NESpaceToBatchLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  blockWidth,</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  blockHeight,</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  paddingLeftTop,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  paddingRightBottom,</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  &aclOutputInfo);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> }</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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  <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>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  int32_t blockHeight = armnn::numeric_cast<int32_t>(descriptor.m_BlockShape[0]);</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  int32_t blockWidth = armnn::numeric_cast<int32_t>(descriptor.m_BlockShape[1]);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  arm_compute::Size2D paddingLeftTop = BuildArmComputeSize2D(</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  descriptor.m_PadList[1].first, descriptor.m_PadList[0].first);</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  arm_compute::Size2D paddingRightBottom = BuildArmComputeSize2D(</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  descriptor.m_PadList[1].second, descriptor.m_PadList[0].second);</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  </div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">return</span> arm_compute::NESpaceToBatchLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  blockWidth,</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  blockHeight,</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  paddingLeftTop,</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  paddingRightBottom,</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  &aclOutputInfo);</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> }</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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  int32_t blockSize = armnn::numeric_cast<int32_t>(descriptor.m_BlockSize);</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">return</span> arm_compute::NESpaceToDepthLayer::validate(&aclInput, &aclOutput, blockSize);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  <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> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  int32_t blockSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><int32_t>(descriptor.m_BlockSize);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">return</span> arm_compute::NESpaceToDepthLayer::validate(&aclInput, &aclOutput, blockSize);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordtype">size_t</span> numOutputs = outputs.size();</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  </div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  std::vector<arm_compute::TensorInfo> aclOutputs;</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  aclOutputs.reserve(numOutputs);</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  </div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  std::vector<arm_compute::ITensorInfo*> aclOutputPtr;</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  aclOutputPtr.reserve(numOutputs);</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  </div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0u; i < outputs.size(); ++i)</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  {</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  aclOutputs.emplace_back(BuildArmComputeTensorInfo(outputs[i]));</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  aclOutputPtr.emplace_back(&aclOutputs.back());</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  }</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  </div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <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>  <span class="keywordflow">return</span> arm_compute::NESplit::validate(&aclInputInfo, aclOutputPtr, aclAxis);</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</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> {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordtype">size_t</span> numOutputs = outputs.size();</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  std::vector<arm_compute::TensorInfo> aclOutputs;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  aclOutputs.reserve(numOutputs);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  std::vector<arm_compute::ITensorInfo*> aclOutputPtr;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  aclOutputPtr.reserve(numOutputs);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0u; i < outputs.size(); ++i)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  aclOutputs.emplace_back(BuildArmComputeTensorInfo(outputs[i]));</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  aclOutputPtr.emplace_back(&aclOutputs.back());</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  }</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <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>  <span class="keywordflow">return</span> arm_compute::NESplit::validate(&aclInputInfo, aclOutputPtr, aclAxis);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</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> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  ActivationDescriptor descriptor;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  descriptor.m_Function = ActivationFunction::Sqrt;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(descriptor);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">return</span> arm_compute::NEActivationLayer::validate(&aclInput, &aclOutput, activationLayerInfo);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</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 &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> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <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>  <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>  </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  ActivationDescriptor descriptor;</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  descriptor.m_Function = ActivationFunction::Sqrt;</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(descriptor);</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">return</span> arm_compute::NEActivationLayer::validate(&aclInput, &aclOutput, activationLayerInfo);</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</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">◆ </a></span>NeonStackWorkloadValidate()</h2> +<a id="add549d4deb11580fc32d17fb38b309b4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#add549d4deb11580fc32d17fb38b309b4">◆ </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< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *> & </td> + <td class="paramtype">const std::vector< const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> * > & </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> {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  std::vector<arm_compute::TensorInfo> aclInputs;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  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>  aclInputs.emplace_back(aclInputInfo);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  }</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  std::vector<arm_compute::ITensorInfo*> aclInputPtrs;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">for</span> (arm_compute::ITensorInfo& input : aclInputs)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  aclInputPtrs.emplace_back(&input);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  <span class="keywordflow">return</span> arm_compute::NEStackLayer::validate(aclInputPtrs, aclAxis, &aclOutputInfo);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</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> {</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  std::vector<arm_compute::TensorInfo> aclInputs;</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <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>  {</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  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>  aclInputs.emplace_back(aclInputInfo);</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  }</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  std::vector<arm_compute::ITensorInfo*> aclInputPtrs;</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">for</span> (arm_compute::ITensorInfo& input : aclInputs)</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  aclInputPtrs.emplace_back(&input);</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  <span class="keywordflow">return</span> arm_compute::NEStackLayer::validate(aclInputPtrs, aclAxis, &aclOutputInfo);</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</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> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <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>  <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>  <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> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  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>  descriptor.m_End,</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  descriptor.m_Stride);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">auto</span> numDimensions = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(input.GetNumDimensions());</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  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>  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>  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> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> arm_compute::NEStridedSlice::validate(&aclInput,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  &aclOutput,</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  starts,</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  ends,</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  strides,</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  begin_mask,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  end_mask,</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  shrink_axis_mask);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</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< unsigned int, MaxNumOfTensorDimensions > 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< int > &m_begin, const std::vector< int > &m_end, const std::vector< int > &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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  </div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  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>  descriptor.m_End,</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  descriptor.m_Stride);</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">auto</span> numDimensions = armnn::numeric_cast<int>(input.GetNumDimensions());</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  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>  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>  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>  </div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> arm_compute::NEStridedSlice::validate(&aclInput,</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  &aclOutput,</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  starts,</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  ends,</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  strides,</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  begin_mask,</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  end_mask,</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  shrink_axis_mask);</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</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> {</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  <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>  <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> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  activationDescriptor);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">return</span> arm_compute::NEArithmeticSubtraction::validate(&aclInput0,</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  &aclInput1,</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  &aclOutput,</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  arm_compute::ConvertPolicy::SATURATE,</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  activationInfo);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> }</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 &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> {</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  activationDescriptor);</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">return</span> arm_compute::NEArithmeticSubtraction::validate(&aclInput0,</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  &aclInput1,</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  &aclOutput,</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  arm_compute::ConvertPolicy::SATURATE,</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  activationInfo);</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> }</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> { <span class="keywordflow">return</span> <span class="stringliteral">"Arm/Neon/TensorHandleFactory"</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> { <span class="keywordflow">return</span> <span class="stringliteral">"Arm/Neon/TensorHandleFactory"</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> {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  <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>  <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> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <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> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  optionalAclBiasesInfo = &aclBiasesInfo;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  arm_compute::PadStrideInfo layerInfo = BuildArmComputePadStrideInfo(descriptor);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">return</span> arm_compute::NEDeconvolutionLayer::validate(&aclInputInfo,</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  &aclWeightsInfo,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  optionalAclBiasesInfo,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  &aclOutputInfo,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  layerInfo);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</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> {</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  arm_compute::TensorInfo aclBiasesInfo;</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <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>  </div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  optionalAclBiasesInfo = &aclBiasesInfo;</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  }</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  </div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  arm_compute::PadStrideInfo layerInfo = BuildArmComputePadStrideInfo(descriptor);</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  </div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">return</span> arm_compute::NEDeconvolutionLayer::validate(&aclInputInfo,</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  &aclWeightsInfo,</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  optionalAclBiasesInfo,</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  layerInfo);</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</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> {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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>  <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a>& mappings = descriptor.m_DimMappings;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::NEPermute::validate(&aclInputInfo, &aclOutputInfo,</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  armcomputetensorutils::BuildArmComputeTransposeVector(mappings));</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> }</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> {</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <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>  <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>  <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a>& mappings = descriptor.m_DimMappings;</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> arm_compute::NEPermute::validate(&aclInputInfo, &aclOutputInfo,</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  armcomputetensorutils::BuildArmComputeTransposeVector(mappings));</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> }</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> {</div> +<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  TensorShape inputLayerShape = input.GetShape();</div> +<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  TensorShape outputLayerShape = outputStateIn.GetShape();</div> +<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  </div> +<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keyword">const</span> TensorShape timeMajorShapeInput({maxTime, batchSize, inputSize});</div> +<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keyword">const</span> TensorShape timeMajorShapeOutput({maxTime, batchSize, outputSize});</div> +<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  </div> +<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <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>  <span class="stringliteral">"Permute1 status"</span>);</div> +<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <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>  <span class="stringliteral">"Split status"</span>);</div> +<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <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>  <span class="stringliteral">"LSTM status"</span>);</div> +<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <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>  <span class="stringliteral">"Concat status"</span>);</div> +<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <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>  <span class="stringliteral">"Permute2 status"</span>);</div> +<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  </div> +<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <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>  <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>  </div> +<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="comment">// Permute validate</span></div> +<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  TensorInfo permuteOutInfo = TensorInfo(input);</div> +<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  arm_compute::TensorInfo aclPermuteOutInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permuteOutInfo);</div> +<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  {</div> +<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  statusPermute1 = arm_compute::NEPermute::validate(&aclInputInfo,</div> +<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  &aclPermuteOutInfo,</div> +<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div> +<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  }</div> +<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  </div> +<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="comment">// Split and Concat Tensors validate</span></div> +<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  std::vector<arm_compute::TensorInfo> splitterOutputsTensorInfos;</div> +<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  std::vector<arm_compute::TensorInfo> concatInputsTensorInfos;</div> +<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  std::vector<arm_compute::ITensorInfo*> splitterOutputsTensorInfosPtr;</div> +<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  std::vector<const arm_compute::ITensorInfo*> concatInputsTensorInfosPtr;</div> +<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  splitterOutputsTensorInfos.reserve(maxTime);</div> +<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  concatInputsTensorInfos.reserve(maxTime);</div> +<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <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="l00566"></a><span class="lineno"> 566</span>  {</div> +<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  arm_compute::TensorInfo splitter_out;</div> +<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  arm_compute::TensorInfo concat_in;</div> +<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  </div> +<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keyword">auto</span> splitterTensorInfo = TensorInfo(input);</div> +<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keyword">auto</span> concatTensorInfo = TensorInfo(output);</div> +<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  splitterTensorInfo.SetShape({batchSize, inputSize});</div> +<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  concatTensorInfo.SetShape({batchSize, outputSize});</div> +<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  </div> +<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  arm_compute::TensorInfo aclSplitterTensorInfo</div> +<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  = armcomputetensorutils::BuildArmComputeTensorInfo(splitterTensorInfo);</div> +<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  arm_compute::TensorInfo aclConcatTensorInfo</div> +<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  = armcomputetensorutils::BuildArmComputeTensorInfo(concatTensorInfo);</div> +<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  </div> +<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  splitterOutputsTensorInfos.emplace_back(aclSplitterTensorInfo);</div> +<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  concatInputsTensorInfos.emplace_back(aclConcatTensorInfo);</div> +<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  splitterOutputsTensorInfosPtr.emplace_back(&splitterOutputsTensorInfos[i]);</div> +<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  concatInputsTensorInfosPtr.emplace_back(&concatInputsTensorInfos[i]);</div> +<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  }</div> +<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  </div> +<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="comment">// Split validate</span></div> +<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <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>  {</div> +<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  {</div> +<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  statusSplit = arm_compute::NESplit::validate(&aclPermuteOutInfo,</div> +<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  splitterOutputsTensorInfosPtr,</div> +<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  aclAxisSplit);</div> +<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  } <span class="keywordflow">else</span></div> +<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  {</div> +<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  statusSplit = arm_compute::NESplit::validate(&aclInputInfo, splitterOutputsTensorInfosPtr, aclAxisSplit);</div> +<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  }</div> +<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  }</div> +<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  </div> +<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="comment">// LSTM validate</span></div> +<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  </div> +<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  arm_compute::LSTMParams<arm_compute::ITensorInfo> lstm_params_info;</div> +<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  </div> +<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keyword">const</span> TensorInfo& scratchBuffer = TensorInfo(cellStateIn.GetShape(), input.GetDataType());</div> +<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  </div> +<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="comment">// The inputs and outputs</span></div> +<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div> +<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div> +<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div> +<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div> +<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div> +<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  </div> +<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="comment">// Basic parameters</span></div> +<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div> +<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div> +<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div> +<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div> +<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div> +<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div> +<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div> +<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div> +<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div> +<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div> +<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div> +<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div> +<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div> +<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div> +<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div> +<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div> +<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div> +<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div> +<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  </div> +<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  arm_compute::TensorInfo aclInputToInputWeightsInfo;</div> +<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div> +<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  arm_compute::TensorInfo aclCellToInputWeightsInfo;</div> +<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  arm_compute::TensorInfo aclInputGateBiasInfo;</div> +<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  arm_compute::TensorInfo aclProjectionWeightsInfo;</div> +<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  arm_compute::TensorInfo aclProjectionBiasInfo;</div> +<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div> +<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div> +<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  </div> +<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div> +<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div> +<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div> +<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div> +<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  </div> +<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  </div> +<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div> +<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  {</div> +<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div> +<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  {</div> +<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div> +<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  }</div> +<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div> +<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div> +<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div> +<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  </div> +<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  lstm_params_info.set_cifg_params(&aclInputToInputWeightsInfo,</div> +<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  &aclRecurrentToInputWeightsInfo,</div> +<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  descriptor.m_PeepholeEnabled ? &aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div> +<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  &aclInputGateBiasInfo);</div> +<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  }</div> +<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  </div> +<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div> +<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  {</div> +<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <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>  {</div> +<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div> +<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  }</div> +<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div> +<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  </div> +<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  lstm_params_info.set_projection_params(&aclProjectionWeightsInfo,</div> +<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  paramsInfo.m_ProjectionBias ? &aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div> +<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  }</div> +<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  </div> +<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div> +<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  {</div> +<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div> +<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div> +<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  </div> +<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  lstm_params_info.set_peephole_params(&aclCellToForgetWeightsInfo, &aclCellToOutputWeightsInfo);</div> +<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  }</div> +<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  </div> +<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div> +<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  {</div> +<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div> +<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  {</div> +<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div> +<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  }</div> +<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div> +<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div> +<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div> +<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  </div> +<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  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>  &aclInputLayerNormWeightsInfo,</div> +<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  &aclForgetLayerNormWeightsInfo,</div> +<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  &aclCellLayerNormWeightsInfo,</div> +<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  &aclOutputLayerNormWeightsInfo);</div> +<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  }</div> +<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  </div> +<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <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>  <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div> +<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</div> +<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  </div> +<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  arm_compute::ActivationLayerInfo activationLayerInfo =</div> +<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <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>  </div> +<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <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>  {</div> +<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  </div> +<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <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>  <span class="comment">// input format (timeMajor) & number of LSTM batches (maxTime).</span></div> +<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  arm_compute::ITensorInfo* outputLSTM;</div> +<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  arm_compute::ITensorInfo* inputLSTM;</div> +<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  </div> +<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <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>  <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>  <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>  <span class="comment">// LSTM input/output cannot be > 2 dimensions so need to resize its TensorInfo.</span></div> +<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">if</span> (maxTime == 1 && !descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  {</div> +<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  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>  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>  </div> +<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div> +<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  TensorShape outputShapeShrink({outputShape[1], outputShape[2]});</div> +<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  </div> +<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div> +<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="keyword">auto</span> acl_output_shape_shrink = BuildArmComputeTensorShape(outputShapeShrink);</div> +<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  </div> +<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(acl_input_shape_shrink);</div> +<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  inputLSTM = <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo);</div> +<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  </div> +<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclOutputInfo)->set_tensor_shape(acl_output_shape_shrink);</div> +<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclOutputInfo);</div> +<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  }</div> +<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <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>  <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>  <span class="comment">// Set output of LSTM to be first element of m_ConcatInputs & use that value later in permute.</span></div> +<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  <span class="comment">// LSTM output cannot be > 2 dimensions so need to resize its TensorInfo.</span></div> +<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maxTime == 1 && !descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  {</div> +<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  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>  TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div> +<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div> +<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  aclPermuteOutInfo.set_tensor_shape(acl_input_shape_shrink);</div> +<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  inputLSTM = &aclPermuteOutInfo;</div> +<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  </div> +<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::ITensorInfo*<span class="keyword">></span>(concatInputsTensorInfosPtr[i]);</div> +<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  }</div> +<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <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>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  {</div> +<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  inputLSTM = splitterOutputsTensorInfosPtr[i];</div> +<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::ITensorInfo*<span class="keyword">></span>(concatInputsTensorInfosPtr[i]);</div> +<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  }</div> +<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  </div> +<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  statusLSTM = arm_compute::NELSTMLayer::validate(inputLSTM,</div> +<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  &aclInputToForgetWeightsInfo,</div> +<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  &aclInputToCellWeightsInfo,</div> +<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  &aclInputToOutputWeightsInfo,</div> +<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  &aclRecurrentToForgetWeightsInfo,</div> +<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  &aclRecurrentToCellWeightsInfo,</div> +<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  &aclRecurrentToOutputWeightsInfo,</div> +<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  &aclForgetGateBiasInfo,</div> +<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  &aclCellBiasInfo,</div> +<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  &aclOutputGateBiasInfo,</div> +<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  &aclOutputStateInInfo,</div> +<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  &aclCellStateInInfo,</div> +<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  &aclScratchBufferInfo,</div> +<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  &aclOutputStateOutInfo,</div> +<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  &aclCellStateOutInfo,</div> +<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  outputLSTM,</div> +<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  lstm_params_info,</div> +<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  activationLayerInfo,</div> +<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  cell_threshold,</div> +<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  projection_threshold);</div> +<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  </div> +<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <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>  {</div> +<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  }</div> +<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  }</div> +<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  </div> +<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <span class="comment">// Concat validate</span></div> +<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  </div> +<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <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>  TensorShape shape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(concatInputsTensorInfosPtr[0]->tensor_shape(), 1U);</div> +<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  TensorShape shapeExpandTimeMajor({1, shape[0], shape[1]});</div> +<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  TensorShape shapeExpandBatchMajor({shape[0], 1, shape[1]});</div> +<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  </div> +<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  TensorInfo concatOutputTensorInfo = TensorInfo(output);</div> +<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  concatOutputTensorInfo.SetShape(timeMajorShapeOutput);</div> +<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  arm_compute::TensorInfo aclConcatOutputTensorInfo= BuildArmComputeTensorInfo(concatOutputTensorInfo);</div> +<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  </div> +<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <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>  {</div> +<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <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="l00809"></a><span class="lineno"> 809</span>  {</div> +<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keyword">auto</span> acl_shape_expand = BuildArmComputeTensorShape(shapeExpandTimeMajor);</div> +<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  concatInputsTensorInfos[i].set_tensor_shape(acl_shape_expand);</div> +<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  }</div> +<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  </div> +<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <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>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  {</div> +<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div> +<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  &aclConcatOutputTensorInfo,</div> +<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  aclAxisConcat);</div> +<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  }</div> +<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  {</div> +<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div> +<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  aclAxisConcat);</div> +<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  }</div> +<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  }</div> +<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <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>  <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>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  {</div> +<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  {</div> +<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(</div> +<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  BuildArmComputeTensorShape(shapeExpandBatchMajor));</div> +<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  }</div> +<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  {</div> +<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(</div> +<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  BuildArmComputeTensorShape(shapeExpandTimeMajor));</div> +<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  }</div> +<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  }</div> +<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  </div> +<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <span class="comment">// Permute validate</span></div> +<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  {</div> +<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <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>  <span class="keywordflow">if</span> (maxTime != 1)</div> +<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  {</div> +<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  statusPermute2 = arm_compute::NEPermute::validate(&aclConcatOutputTensorInfo,</div> +<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div> +<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  }</div> +<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  {</div> +<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  statusPermute2 = arm_compute::NEPermute::validate(concatInputsTensorInfosPtr[0],</div> +<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div> +<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  }</div> +<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  }</div> +<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  </div> +<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div> +<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <span class="keywordflow">if</span> (statusPermute1.error_code() == okCode &&</div> +<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  statusSplit.error_code() == okCode &&</div> +<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  statusLSTM .error_code() == okCode &&</div> +<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  statusConcat.error_code() == okCode &&</div> +<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  statusPermute2.error_code() == okCode)</div> +<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  {</div> +<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <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>  <span class="stringliteral">"All Unidirectional Sequence LSTM layer validate status OK."</span>);</div> +<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  }</div> +<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  {</div> +<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <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>  <span class="stringliteral">"Unidirectional Sequence LSTM layer validate status failed."</span>);</div> +<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  }</div> +<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> }</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> {</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  TensorShape inputLayerShape = input.GetShape();</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  TensorShape outputLayerShape = outputStateIn.GetShape();</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span> </div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keyword">const</span> TensorShape timeMajorShapeInput({maxTime, batchSize, inputSize});</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keyword">const</span> TensorShape timeMajorShapeOutput({maxTime, batchSize, outputSize});</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span> </div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <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>  <span class="stringliteral">"Permute1 status"</span>);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <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>  <span class="stringliteral">"Split status"</span>);</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <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>  <span class="stringliteral">"LSTM status"</span>);</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <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>  <span class="stringliteral">"Concat status"</span>);</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <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>  <span class="stringliteral">"Permute2 status"</span>);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span> </div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <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>  <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> </div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="comment">//</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="comment">// Permute validate</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="comment">//</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  TensorInfo permuteOutInfo = TensorInfo(input);</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  arm_compute::TensorInfo aclPermuteOutInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permuteOutInfo);</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  {</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  statusPermute1 = arm_compute::NEPermute::validate(&aclInputInfo,</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  &aclPermuteOutInfo,</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> </div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="comment">//</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="comment">// Split and Concat Tensors validate</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="comment">//</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  std::vector<arm_compute::TensorInfo> splitterOutputsTensorInfos;</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  std::vector<arm_compute::TensorInfo> concatInputsTensorInfos;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  std::vector<arm_compute::ITensorInfo*> splitterOutputsTensorInfosPtr;</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  std::vector<const arm_compute::ITensorInfo*> concatInputsTensorInfosPtr;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  splitterOutputsTensorInfos.reserve(maxTime);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  concatInputsTensorInfos.reserve(maxTime);</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <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="l00566"></a><span class="lineno"> 566</span>  {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  arm_compute::TensorInfo splitter_out;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  arm_compute::TensorInfo concat_in;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span> </div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keyword">auto</span> splitterTensorInfo = TensorInfo(input);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keyword">auto</span> concatTensorInfo = TensorInfo(output);</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  splitterTensorInfo.SetShape({batchSize, inputSize});</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  concatTensorInfo.SetShape({batchSize, outputSize});</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span> </div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  arm_compute::TensorInfo aclSplitterTensorInfo</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  = armcomputetensorutils::BuildArmComputeTensorInfo(splitterTensorInfo);</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  arm_compute::TensorInfo aclConcatTensorInfo</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  = armcomputetensorutils::BuildArmComputeTensorInfo(concatTensorInfo);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  splitterOutputsTensorInfos.emplace_back(aclSplitterTensorInfo);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  concatInputsTensorInfos.emplace_back(aclConcatTensorInfo);</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  splitterOutputsTensorInfosPtr.emplace_back(&splitterOutputsTensorInfos[i]);</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  concatInputsTensorInfosPtr.emplace_back(&concatInputsTensorInfos[i]);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  }</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span> </div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="comment">//</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="comment">// Split validate</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="comment">//</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <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>  <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>  <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> </div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <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>  {</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  statusSplit = arm_compute::NESplit::validate(&aclPermuteOutInfo,</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  splitterOutputsTensorInfosPtr,</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  aclAxisSplit);</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  } <span class="keywordflow">else</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  {</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  statusSplit = arm_compute::NESplit::validate(&aclInputInfo, splitterOutputsTensorInfosPtr, aclAxisSplit);</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  }</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  }</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span> </div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <span class="comment">//</span></div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="comment">// LSTM validate</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <span class="comment">//</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span> </div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  arm_compute::LSTMParams<arm_compute::ITensorInfo> lstm_params_info;</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span> </div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keyword">const</span> TensorInfo& scratchBuffer = TensorInfo(cellStateIn.GetShape(), input.GetDataType());</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span> </div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="comment">// The inputs and outputs</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> </div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="comment">// Basic parameters</span></div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span> </div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  arm_compute::TensorInfo aclInputToInputWeightsInfo;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  arm_compute::TensorInfo aclCellToInputWeightsInfo;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  arm_compute::TensorInfo aclInputGateBiasInfo;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  arm_compute::TensorInfo aclProjectionWeightsInfo;</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  arm_compute::TensorInfo aclProjectionBiasInfo;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span> </div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span> </div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span> </div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  {</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  {</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  }</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span> </div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  lstm_params_info.set_cifg_params(&aclInputToInputWeightsInfo,</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  &aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  descriptor.m_PeepholeEnabled ? &aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  &aclInputGateBiasInfo);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  }</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span> </div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <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>  {</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  }</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span> </div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  lstm_params_info.set_projection_params(&aclProjectionWeightsInfo,</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  paramsInfo.m_ProjectionBias ? &aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  }</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span> </div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  {</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span> </div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  lstm_params_info.set_peephole_params(&aclCellToForgetWeightsInfo, &aclCellToOutputWeightsInfo);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  }</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span> </div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  {</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  }</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> </div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  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>  &aclInputLayerNormWeightsInfo,</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  &aclForgetLayerNormWeightsInfo,</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  &aclCellLayerNormWeightsInfo,</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  &aclOutputLayerNormWeightsInfo);</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  }</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span> </div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <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>  <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span> </div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  arm_compute::ActivationLayerInfo activationLayerInfo =</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <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> </div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <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>  {</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span> </div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <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>  <span class="comment">// input format (timeMajor) & number of LSTM batches (maxTime).</span></div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  arm_compute::ITensorInfo* outputLSTM;</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  arm_compute::ITensorInfo* inputLSTM;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span> </div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <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>  <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>  <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>  <span class="comment">// LSTM input/output cannot be > 2 dimensions so need to resize its TensorInfo.</span></div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">if</span> (maxTime == 1 && !descriptor.m_TimeMajor)</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  {</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  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>  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> </div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  TensorShape outputShapeShrink({outputShape[1], outputShape[2]});</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span> </div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="keyword">auto</span> acl_output_shape_shrink = BuildArmComputeTensorShape(outputShapeShrink);</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(acl_input_shape_shrink);</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  inputLSTM = <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo);</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span> </div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclOutputInfo)->set_tensor_shape(acl_output_shape_shrink);</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclOutputInfo);</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  }</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <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>  <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>  <span class="comment">// Set output of LSTM to be first element of m_ConcatInputs & use that value later in permute.</span></div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  <span class="comment">// LSTM output cannot be > 2 dimensions so need to resize its TensorInfo.</span></div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maxTime == 1 && !descriptor.m_TimeMajor)</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  {</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  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>  TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  aclPermuteOutInfo.set_tensor_shape(acl_input_shape_shrink);</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  inputLSTM = &aclPermuteOutInfo;</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span> </div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::ITensorInfo*<span class="keyword">></span>(concatInputsTensorInfosPtr[i]);</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  }</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <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>  <span class="keywordflow">else</span></div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  {</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  inputLSTM = splitterOutputsTensorInfosPtr[i];</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::ITensorInfo*<span class="keyword">></span>(concatInputsTensorInfosPtr[i]);</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  }</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span> </div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  statusLSTM = arm_compute::NELSTMLayer::validate(inputLSTM,</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  &aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  &aclInputToCellWeightsInfo,</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  &aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  &aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  &aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  &aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  &aclForgetGateBiasInfo,</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  &aclCellBiasInfo,</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  &aclOutputGateBiasInfo,</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  &aclOutputStateInInfo,</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  &aclCellStateInInfo,</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  &aclScratchBufferInfo,</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  &aclOutputStateOutInfo,</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  &aclCellStateOutInfo,</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  outputLSTM,</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  lstm_params_info,</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  activationLayerInfo,</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  cell_threshold,</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  projection_threshold);</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span> </div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <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>  {</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  }</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  }</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span> </div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  <span class="comment">//</span></div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <span class="comment">// Concat validate</span></div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="comment">//</span></div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span> </div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <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>  TensorShape shape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(concatInputsTensorInfosPtr[0]->tensor_shape(), 1U);</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  TensorShape shapeExpandTimeMajor({1, shape[0], shape[1]});</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  TensorShape shapeExpandBatchMajor({shape[0], 1, shape[1]});</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span> </div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  TensorInfo concatOutputTensorInfo = TensorInfo(output);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  concatOutputTensorInfo.SetShape(timeMajorShapeOutput);</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  arm_compute::TensorInfo aclConcatOutputTensorInfo= BuildArmComputeTensorInfo(concatOutputTensorInfo);</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span> </div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <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>  {</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <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="l00809"></a><span class="lineno"> 809</span>  {</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keyword">auto</span> acl_shape_expand = BuildArmComputeTensorShape(shapeExpandTimeMajor);</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  concatInputsTensorInfos[i].set_tensor_shape(acl_shape_expand);</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  }</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span> </div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <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>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  {</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  &aclConcatOutputTensorInfo,</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  aclAxisConcat);</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  }</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  {</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  &aclOutputInfo,</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  aclAxisConcat);</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  }</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  }</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <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>  <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>  <span class="keywordflow">else</span></div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  {</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  {</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  BuildArmComputeTensorShape(shapeExpandBatchMajor));</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  }</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  {</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  BuildArmComputeTensorShape(shapeExpandTimeMajor));</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  }</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  }</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span> </div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <span class="comment">//</span></div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <span class="comment">// Permute validate</span></div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="comment">//</span></div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  {</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <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>  <span class="keywordflow">if</span> (maxTime != 1)</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  {</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  statusPermute2 = arm_compute::NEPermute::validate(&aclConcatOutputTensorInfo,</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  &aclOutputInfo,</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  }</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  {</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  statusPermute2 = arm_compute::NEPermute::validate(concatInputsTensorInfosPtr[0],</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  &aclOutputInfo,</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  }</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  }</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span> </div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <span class="keywordflow">if</span> (statusPermute1.error_code() == okCode &&</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  statusSplit.error_code() == okCode &&</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  statusLSTM .error_code() == okCode &&</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  statusConcat.error_code() == okCode &&</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  statusPermute2.error_code() == okCode)</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  {</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <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>  <span class="stringliteral">"All Unidirectional Sequence LSTM layer validate status OK."</span>);</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  }</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  {</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <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>  <span class="stringliteral">"Unidirectional Sequence LSTM layer validate status failed."</span>);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  }</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span> }</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> {</div> +<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  TensorShape inputLayerShape = input.GetShape();</div> +<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  TensorShape outputLayerShape = output.GetShape();</div> +<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  </div> +<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keyword">const</span> TensorShape timeMajorShapeInput({maxTime, batchSize, inputSize});</div> +<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keyword">const</span> TensorShape timeMajorShapeOutput({maxTime, batchSize, outputSize});</div> +<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  </div> +<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <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>  <span class="stringliteral">"Permute1 status"</span>);</div> +<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <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>  <span class="stringliteral">"Split status"</span>);</div> +<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <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>  <span class="stringliteral">"LSTM status"</span>);</div> +<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <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>  <span class="stringliteral">"Concat status"</span>);</div> +<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <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>  <span class="stringliteral">"Permute2 status"</span>);</div> +<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  </div> +<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <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>  <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>  </div> +<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="comment">// Permute validate</span></div> +<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  TensorInfo permuteOutInfo = TensorInfo(input);</div> +<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  arm_compute::TensorInfo aclPermuteOutInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permuteOutInfo);</div> +<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  {</div> +<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  statusPermute1 = arm_compute::NEPermute::validate(&aclInputInfo,</div> +<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  &aclPermuteOutInfo,</div> +<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div> +<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  }</div> +<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  </div> +<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="comment">// Split and Concat Tensors validate</span></div> +<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  std::vector<arm_compute::TensorInfo> splitterOutputsTensorInfos;</div> +<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  std::vector<arm_compute::TensorInfo> concatInputsTensorInfos;</div> +<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  std::vector<arm_compute::ITensorInfo*> splitterOutputsTensorInfosPtr;</div> +<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  std::vector<const arm_compute::ITensorInfo*> concatInputsTensorInfosPtr;</div> +<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  splitterOutputsTensorInfos.reserve(maxTime);</div> +<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  concatInputsTensorInfos.reserve(maxTime);</div> +<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <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="l00547"></a><span class="lineno"> 547</span>  {</div> +<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  arm_compute::TensorInfo splitter_out;</div> +<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  arm_compute::TensorInfo concat_in;</div> +<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  </div> +<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keyword">auto</span> splitterTensorInfo = TensorInfo(input);</div> +<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keyword">auto</span> concatTensorInfo = TensorInfo(output);</div> +<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  splitterTensorInfo.SetShape({batchSize, inputSize});</div> +<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  concatTensorInfo.SetShape({batchSize, outputSize});</div> +<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  </div> +<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  arm_compute::TensorInfo aclSplitterTensorInfo</div> +<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  = armcomputetensorutils::BuildArmComputeTensorInfo(splitterTensorInfo);</div> +<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  arm_compute::TensorInfo aclConcatTensorInfo</div> +<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  = armcomputetensorutils::BuildArmComputeTensorInfo(concatTensorInfo);</div> +<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  </div> +<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  splitterOutputsTensorInfos.emplace_back(aclSplitterTensorInfo);</div> +<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  concatInputsTensorInfos.emplace_back(aclConcatTensorInfo);</div> +<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  splitterOutputsTensorInfosPtr.emplace_back(&splitterOutputsTensorInfos[i]);</div> +<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  concatInputsTensorInfosPtr.emplace_back(&concatInputsTensorInfos[i]);</div> +<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  }</div> +<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  </div> +<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="comment">// Split validate</span></div> +<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <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>  {</div> +<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  {</div> +<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  statusSplit = arm_compute::NESplit::validate(&aclPermuteOutInfo,</div> +<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  splitterOutputsTensorInfosPtr,</div> +<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  aclAxisSplit);</div> +<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  } <span class="keywordflow">else</span></div> +<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  {</div> +<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  statusSplit = arm_compute::NESplit::validate(&aclInputInfo, splitterOutputsTensorInfosPtr, aclAxisSplit);</div> +<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  }</div> +<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  }</div> +<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  </div> +<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="comment">// LSTM validate</span></div> +<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  </div> +<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  arm_compute::LSTMParams<arm_compute::ITensorInfo> lstm_params_info;</div> +<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  </div> +<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keyword">const</span> TensorInfo& scratchBuffer = TensorInfo(cellStateIn.GetShape(), input.GetDataType());</div> +<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  </div> +<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  lstm_params_info.set_cell_clip_params(descriptor.m_ClippingThresCell);</div> +<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  lstm_params_info.set_projection_clip_params(descriptor.m_ClippingThresProj);</div> +<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="comment">// The inputs and outputs</span></div> +<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div> +<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div> +<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div> +<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div> +<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div> +<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  </div> +<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <span class="comment">// Basic parameters</span></div> +<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div> +<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div> +<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div> +<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div> +<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div> +<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div> +<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div> +<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div> +<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div> +<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div> +<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div> +<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div> +<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div> +<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div> +<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div> +<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div> +<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div> +<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div> +<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  </div> +<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  arm_compute::TensorInfo aclInputToInputWeightsInfo;</div> +<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div> +<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  arm_compute::TensorInfo aclCellToInputWeightsInfo;</div> +<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  arm_compute::TensorInfo aclInputGateBiasInfo;</div> +<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  arm_compute::TensorInfo aclProjectionWeightsInfo;</div> +<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  arm_compute::TensorInfo aclProjectionBiasInfo;</div> +<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div> +<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div> +<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  </div> +<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div> +<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div> +<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div> +<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div> +<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  </div> +<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div> +<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  {</div> +<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div> +<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  {</div> +<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div> +<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  }</div> +<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div> +<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div> +<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div> +<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  </div> +<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  lstm_params_info.set_cifg_params(&aclInputToInputWeightsInfo,</div> +<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  &aclRecurrentToInputWeightsInfo,</div> +<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  descriptor.m_PeepholeEnabled ? &aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div> +<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  &aclInputGateBiasInfo);</div> +<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  }</div> +<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  </div> +<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div> +<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  {</div> +<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <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>  {</div> +<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div> +<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  }</div> +<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div> +<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  </div> +<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  lstm_params_info.set_projection_params(&aclProjectionWeightsInfo,</div> +<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  paramsInfo.m_ProjectionBias ? &aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div> +<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  }</div> +<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  </div> +<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div> +<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  {</div> +<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div> +<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div> +<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  </div> +<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  lstm_params_info.set_peephole_params(&aclCellToForgetWeightsInfo, &aclCellToOutputWeightsInfo);</div> +<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  }</div> +<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  </div> +<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div> +<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  {</div> +<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div> +<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  {</div> +<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div> +<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  }</div> +<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div> +<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div> +<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div> +<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  </div> +<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  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>  &aclInputLayerNormWeightsInfo,</div> +<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  &aclForgetLayerNormWeightsInfo,</div> +<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  &aclCellLayerNormWeightsInfo,</div> +<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  &aclOutputLayerNormWeightsInfo);</div> +<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  }</div> +<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  </div> +<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  lstm_params_info.set_matmul_scale_params(descriptor.m_InputIntermediateScale,</div> +<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  descriptor.m_ForgetIntermediateScale,</div> +<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  descriptor.m_CellIntermediateScale,</div> +<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  descriptor.m_OutputIntermediateScale);</div> +<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  </div> +<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  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>  </div> +<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <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>  {</div> +<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  </div> +<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <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>  <span class="comment">// input format (timeMajor) & number of LSTM batches (maxTime).</span></div> +<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  arm_compute::ITensorInfo* outputLSTM;</div> +<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  arm_compute::ITensorInfo* inputLSTM;</div> +<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  </div> +<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <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>  <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>  <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>  <span class="comment">// LSTM input/output cannot be > 2 dimensions so need to resize its TensorInfo.</span></div> +<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  <span class="keywordflow">if</span> (maxTime == 1 && !descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  {</div> +<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  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>  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>  </div> +<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div> +<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  TensorShape outputShapeShrink({outputShape[1], outputShape[2]});</div> +<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  </div> +<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div> +<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <span class="keyword">auto</span> acl_output_shape_shrink = BuildArmComputeTensorShape(outputShapeShrink);</div> +<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  </div> +<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(acl_input_shape_shrink);</div> +<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  inputLSTM = <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo);</div> +<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  </div> +<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclOutputInfo)->set_tensor_shape(acl_output_shape_shrink);</div> +<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclOutputInfo);</div> +<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  }</div> +<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <span class="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>  <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>  <span class="comment">// Set output of LSTM to be first element of m_ConcatInputs & use that value later in permute.</span></div> +<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  <span class="comment">// LSTM output cannot be > 2 dimensions so need to resize its TensorInfo.</span></div> +<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maxTime == 1 && !descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  {</div> +<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  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>  TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div> +<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div> +<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  aclPermuteOutInfo.set_tensor_shape(acl_input_shape_shrink);</div> +<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  inputLSTM = &aclPermuteOutInfo;</div> +<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  </div> +<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::ITensorInfo*<span class="keyword">></span>(concatInputsTensorInfosPtr[i]);</div> +<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  }</div> +<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  <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>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  {</div> +<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  inputLSTM = splitterOutputsTensorInfosPtr[i];</div> +<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::ITensorInfo*<span class="keyword">></span>(concatInputsTensorInfosPtr[i]);</div> +<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  }</div> +<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  </div> +<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  statusLSTM = arm_compute::NEQLSTMLayer::validate(inputLSTM,</div> +<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  &aclInputToForgetWeightsInfo,</div> +<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  &aclInputToCellWeightsInfo,</div> +<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  &aclInputToOutputWeightsInfo,</div> +<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  &aclRecurrentToForgetWeightsInfo,</div> +<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  &aclRecurrentToCellWeightsInfo,</div> +<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  &aclRecurrentToOutputWeightsInfo,</div> +<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  &aclForgetGateBiasInfo,</div> +<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  &aclCellBiasInfo,</div> +<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  &aclOutputGateBiasInfo,</div> +<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  &aclCellStateInInfo,</div> +<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  &aclOutputStateInInfo,</div> +<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  &aclCellStateOutInfo,</div> +<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  &aclOutputStateOutInfo,</div> +<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  outputLSTM,</div> +<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  lstm_params_info);</div> +<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  }</div> +<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  </div> +<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  <span class="comment">// Concat validate</span></div> +<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  </div> +<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  <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>  TensorShape shape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(concatInputsTensorInfosPtr[0]->tensor_shape(), 1U);</div> +<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  TensorShape shapeExpandTimeMajor({1, shape[0], shape[1]});</div> +<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  TensorShape shapeExpandBatchMajor({shape[0], 1, shape[1]});</div> +<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  </div> +<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  TensorInfo concatOutputTensorInfo = TensorInfo(output);</div> +<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  concatOutputTensorInfo.SetShape(timeMajorShapeOutput);</div> +<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  arm_compute::TensorInfo aclConcatOutputTensorInfo= BuildArmComputeTensorInfo(concatOutputTensorInfo);</div> +<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  </div> +<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <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>  {</div> +<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <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="l00782"></a><span class="lineno"> 782</span>  {</div> +<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keyword">auto</span> acl_shape_expand = BuildArmComputeTensorShape(shapeExpandTimeMajor);</div> +<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  concatInputsTensorInfos[i].set_tensor_shape(acl_shape_expand);</div> +<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  }</div> +<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  </div> +<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <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>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  {</div> +<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div> +<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  &aclConcatOutputTensorInfo,</div> +<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  aclAxisConcat);</div> +<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  }</div> +<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  {</div> +<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div> +<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  aclAxisConcat);</div> +<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  }</div> +<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  }</div> +<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <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>  <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>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  {</div> +<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  {</div> +<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(</div> +<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  BuildArmComputeTensorShape(shapeExpandBatchMajor));</div> +<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  }</div> +<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  {</div> +<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(</div> +<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  BuildArmComputeTensorShape(shapeExpandTimeMajor));</div> +<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  }</div> +<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  }</div> +<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  </div> +<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="comment">// Permute validate</span></div> +<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div> +<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  {</div> +<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  <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>  <span class="keywordflow">if</span> (maxTime != 1)</div> +<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  {</div> +<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  statusPermute2 = arm_compute::NEPermute::validate(&aclConcatOutputTensorInfo,</div> +<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div> +<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  }</div> +<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  {</div> +<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  statusPermute2 = arm_compute::NEPermute::validate(concatInputsTensorInfosPtr[0],</div> +<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  &aclOutputInfo,</div> +<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div> +<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  }</div> +<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  }</div> +<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  </div> +<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div> +<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">if</span> (statusPermute1.error_code() == okCode &&</div> +<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  statusSplit.error_code() == okCode &&</div> +<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  statusLSTM .error_code() == okCode &&</div> +<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  statusConcat.error_code() == okCode &&</div> +<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  statusPermute2.error_code() == okCode)</div> +<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  {</div> +<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <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>  <span class="stringliteral">"All Unidirectional Sequence LSTM layer validate status OK."</span>);</div> +<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  }</div> +<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  {</div> +<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <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>  <span class="stringliteral">"Unidirectional Sequence LSTM layer validate status failed."</span>);</div> +<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  }</div> +<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> }</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> {</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  TensorShape inputLayerShape = input.GetShape();</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  TensorShape outputLayerShape = output.GetShape();</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keyword">const</span> TensorShape timeMajorShapeInput({maxTime, batchSize, inputSize});</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keyword">const</span> TensorShape timeMajorShapeOutput({maxTime, batchSize, outputSize});</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <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>  <span class="stringliteral">"Permute1 status"</span>);</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <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>  <span class="stringliteral">"Split status"</span>);</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <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>  <span class="stringliteral">"LSTM status"</span>);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <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>  <span class="stringliteral">"Concat status"</span>);</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <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>  <span class="stringliteral">"Permute2 status"</span>);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span> </div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <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>  <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> </div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="comment">//</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="comment">// Permute validate</span></div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="comment">//</span></div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  TensorInfo permuteOutInfo = TensorInfo(input);</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  arm_compute::TensorInfo aclPermuteOutInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permuteOutInfo);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  {</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  statusPermute1 = arm_compute::NEPermute::validate(&aclInputInfo,</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  &aclPermuteOutInfo,</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <span class="comment">//</span></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="comment">// Split and Concat Tensors validate</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="comment">//</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  std::vector<arm_compute::TensorInfo> splitterOutputsTensorInfos;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  std::vector<arm_compute::TensorInfo> concatInputsTensorInfos;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  std::vector<arm_compute::ITensorInfo*> splitterOutputsTensorInfosPtr;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  std::vector<const arm_compute::ITensorInfo*> concatInputsTensorInfosPtr;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  splitterOutputsTensorInfos.reserve(maxTime);</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  concatInputsTensorInfos.reserve(maxTime);</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <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="l00547"></a><span class="lineno"> 547</span>  {</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  arm_compute::TensorInfo splitter_out;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  arm_compute::TensorInfo concat_in;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> </div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keyword">auto</span> splitterTensorInfo = TensorInfo(input);</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keyword">auto</span> concatTensorInfo = TensorInfo(output);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  splitterTensorInfo.SetShape({batchSize, inputSize});</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  concatTensorInfo.SetShape({batchSize, outputSize});</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> </div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  arm_compute::TensorInfo aclSplitterTensorInfo</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  = armcomputetensorutils::BuildArmComputeTensorInfo(splitterTensorInfo);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  arm_compute::TensorInfo aclConcatTensorInfo</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  = armcomputetensorutils::BuildArmComputeTensorInfo(concatTensorInfo);</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span> </div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  splitterOutputsTensorInfos.emplace_back(aclSplitterTensorInfo);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  concatInputsTensorInfos.emplace_back(aclConcatTensorInfo);</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  splitterOutputsTensorInfosPtr.emplace_back(&splitterOutputsTensorInfos[i]);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  concatInputsTensorInfosPtr.emplace_back(&concatInputsTensorInfos[i]);</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  }</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span> </div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="comment">//</span></div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="comment">// Split validate</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="comment">//</span></div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <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>  <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>  <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> </div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <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>  {</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  {</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  statusSplit = arm_compute::NESplit::validate(&aclPermuteOutInfo,</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  splitterOutputsTensorInfosPtr,</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  aclAxisSplit);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  } <span class="keywordflow">else</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  {</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  statusSplit = arm_compute::NESplit::validate(&aclInputInfo, splitterOutputsTensorInfosPtr, aclAxisSplit);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  }</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  }</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span> </div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="comment">//</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="comment">// LSTM validate</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="comment">//</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span> </div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  arm_compute::LSTMParams<arm_compute::ITensorInfo> lstm_params_info;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span> </div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keyword">const</span> TensorInfo& scratchBuffer = TensorInfo(cellStateIn.GetShape(), input.GetDataType());</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span> </div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  lstm_params_info.set_cell_clip_params(descriptor.m_ClippingThresCell);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  lstm_params_info.set_projection_clip_params(descriptor.m_ClippingThresProj);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="comment">// The inputs and outputs</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span> </div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <span class="comment">// Basic parameters</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span> </div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  arm_compute::TensorInfo aclInputToInputWeightsInfo;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  arm_compute::TensorInfo aclCellToInputWeightsInfo;</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  arm_compute::TensorInfo aclInputGateBiasInfo;</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  arm_compute::TensorInfo aclProjectionWeightsInfo;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  arm_compute::TensorInfo aclProjectionBiasInfo;</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span> </div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> </div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  {</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  {</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  }</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span> </div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  lstm_params_info.set_cifg_params(&aclInputToInputWeightsInfo,</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  &aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  descriptor.m_PeepholeEnabled ? &aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  &aclInputGateBiasInfo);</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  }</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span> </div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  {</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <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>  {</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span> </div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  lstm_params_info.set_projection_params(&aclProjectionWeightsInfo,</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  paramsInfo.m_ProjectionBias ? &aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span> </div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  {</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span> </div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  lstm_params_info.set_peephole_params(&aclCellToForgetWeightsInfo, &aclCellToOutputWeightsInfo);</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  }</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span> </div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  {</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  {</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  }</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span> </div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  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>  &aclInputLayerNormWeightsInfo,</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  &aclForgetLayerNormWeightsInfo,</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  &aclCellLayerNormWeightsInfo,</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  &aclOutputLayerNormWeightsInfo);</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  }</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  lstm_params_info.set_matmul_scale_params(descriptor.m_InputIntermediateScale,</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  descriptor.m_ForgetIntermediateScale,</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  descriptor.m_CellIntermediateScale,</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  descriptor.m_OutputIntermediateScale);</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span> </div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  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> </div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <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>  {</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span> </div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <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>  <span class="comment">// input format (timeMajor) & number of LSTM batches (maxTime).</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  arm_compute::ITensorInfo* outputLSTM;</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  arm_compute::ITensorInfo* inputLSTM;</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span> </div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <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>  <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>  <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>  <span class="comment">// LSTM input/output cannot be > 2 dimensions so need to resize its TensorInfo.</span></div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  <span class="keywordflow">if</span> (maxTime == 1 && !descriptor.m_TimeMajor)</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  {</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  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>  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> </div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  TensorShape outputShapeShrink({outputShape[1], outputShape[2]});</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span> </div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <span class="keyword">auto</span> acl_output_shape_shrink = BuildArmComputeTensorShape(outputShapeShrink);</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span> </div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(acl_input_shape_shrink);</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  inputLSTM = <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo);</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span> </div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclOutputInfo)->set_tensor_shape(acl_output_shape_shrink);</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclOutputInfo);</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  }</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <span class="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>  <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>  <span class="comment">// Set output of LSTM to be first element of m_ConcatInputs & use that value later in permute.</span></div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  <span class="comment">// LSTM output cannot be > 2 dimensions so need to resize its TensorInfo.</span></div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maxTime == 1 && !descriptor.m_TimeMajor)</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  {</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  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>  TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  aclPermuteOutInfo.set_tensor_shape(acl_input_shape_shrink);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  inputLSTM = &aclPermuteOutInfo;</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::ITensorInfo*<span class="keyword">></span>(concatInputsTensorInfosPtr[i]);</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  }</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  <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>  <span class="keywordflow">else</span></div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  {</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  inputLSTM = splitterOutputsTensorInfosPtr[i];</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  outputLSTM = <span class="keyword">const_cast<</span>arm_compute::ITensorInfo*<span class="keyword">></span>(concatInputsTensorInfosPtr[i]);</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  }</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span> </div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  statusLSTM = arm_compute::NEQLSTMLayer::validate(inputLSTM,</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  &aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  &aclInputToCellWeightsInfo,</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  &aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  &aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  &aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  &aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  &aclForgetGateBiasInfo,</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  &aclCellBiasInfo,</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  &aclOutputGateBiasInfo,</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  &aclCellStateInInfo,</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  &aclOutputStateInInfo,</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  &aclCellStateOutInfo,</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  &aclOutputStateOutInfo,</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  outputLSTM,</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  lstm_params_info);</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  }</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span> </div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  <span class="comment">//</span></div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  <span class="comment">// Concat validate</span></div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="comment">//</span></div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span> </div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  <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>  TensorShape shape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(concatInputsTensorInfosPtr[0]->tensor_shape(), 1U);</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  TensorShape shapeExpandTimeMajor({1, shape[0], shape[1]});</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  TensorShape shapeExpandBatchMajor({shape[0], 1, shape[1]});</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span> </div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  TensorInfo concatOutputTensorInfo = TensorInfo(output);</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  concatOutputTensorInfo.SetShape(timeMajorShapeOutput);</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  arm_compute::TensorInfo aclConcatOutputTensorInfo= BuildArmComputeTensorInfo(concatOutputTensorInfo);</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span> </div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <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>  {</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <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="l00782"></a><span class="lineno"> 782</span>  {</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keyword">auto</span> acl_shape_expand = BuildArmComputeTensorShape(shapeExpandTimeMajor);</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  concatInputsTensorInfos[i].set_tensor_shape(acl_shape_expand);</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  }</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span> </div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <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>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  {</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  &aclConcatOutputTensorInfo,</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  aclAxisConcat);</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  }</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  {</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  &aclOutputInfo,</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  aclAxisConcat);</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  }</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  }</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <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>  <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>  <span class="keywordflow">else</span></div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  {</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  {</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  BuildArmComputeTensorShape(shapeExpandBatchMajor));</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  }</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  {</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keyword">const_cast<</span>arm_compute::TensorInfo*<span class="keyword">></span>(&aclInputInfo)->set_tensor_shape(</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  BuildArmComputeTensorShape(shapeExpandTimeMajor));</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  }</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  }</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span> </div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="comment">//</span></div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="comment">// Permute validate</span></div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="comment">//</span></div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  {</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  <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>  <span class="keywordflow">if</span> (maxTime != 1)</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  {</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  statusPermute2 = arm_compute::NEPermute::validate(&aclConcatOutputTensorInfo,</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  &aclOutputInfo,</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  }</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  {</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  statusPermute2 = arm_compute::NEPermute::validate(concatInputsTensorInfosPtr[0],</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  &aclOutputInfo,</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  arm_compute::PermutationVector(0U, 2U, 1U));</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  }</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  }</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span> </div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">if</span> (statusPermute1.error_code() == okCode &&</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  statusSplit.error_code() == okCode &&</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  statusLSTM .error_code() == okCode &&</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  statusConcat.error_code() == okCode &&</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  statusPermute2.error_code() == okCode)</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  {</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <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>  <span class="stringliteral">"All Unidirectional Sequence LSTM layer validate status OK."</span>);</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  }</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  {</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <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>  <span class="stringliteral">"Unidirectional Sequence LSTM layer validate status failed."</span>);</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  }</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span> }</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> {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = numDims; idx-- > 0; )</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  {</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  <span class="keywordflow">if</span> (dims[idx] == current_val)</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  {</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  current[idx] = 0;</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  }</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  {</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  current[idx] = current_val;</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  carry = 0;</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  }</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  }</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">return</span> (carry == 0);</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> }</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> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = numDims; idx-- > 0; )</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  <span class="keywordflow">if</span> (dims[idx] == current_val)</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  {</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  current[idx] = 0;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  }</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  current[idx] = current_val;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  carry = 0;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  }</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  }</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">return</span> (carry == 0);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> }</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> {</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <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>  std::vector<float> scoresAboveThreshold;</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  std::vector<unsigned int> indicesAboveThreshold;</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numBoxes; ++i)</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">if</span> (scores[i] >= nmsScoreThreshold)</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  scoresAboveThreshold.push_back(scores[i]);</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  indicesAboveThreshold.push_back(i);</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  </div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// Sort the indices based on scores.</span></div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numAboveThreshold = armnn::numeric_cast<unsigned int>(scoresAboveThreshold.size());</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  std::vector<unsigned int> sortedIndices = <a class="code" href="namespacearmnn.xhtml#ae8ed5c640761fb6744aec0ee16388417">GenerateRangeK</a>(numAboveThreshold);</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <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>  </div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <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>  <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>  std::vector<unsigned int> outputIndices;</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  std::vector<bool> visited(numAboveThreshold, <span class="keyword">false</span>);</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  </div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numAboveThreshold; ++i)</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">if</span> (outputIndices.size() >= numOutput)</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  }</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">if</span> (!visited[sortedIndices[i]])</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  outputIndices.push_back(indicesAboveThreshold[sortedIndices[i]]);</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = i + 1; j < numAboveThreshold; ++j)</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <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>  <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>  <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#abf6aad7bc221f8ad22b4d99cd020373b">IntersectionOverUnion</a>(&boxCorners[iIndex], &boxCorners[jIndex]) > nmsIouThreshold)</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  {</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  visited[sortedIndices[j]] = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  }</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  }</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  }</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">return</span> outputIndices;</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</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> {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <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>  std::vector<float> scoresAboveThreshold;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  std::vector<unsigned int> indicesAboveThreshold;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numBoxes; ++i)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">if</span> (scores[i] >= nmsScoreThreshold)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  scoresAboveThreshold.push_back(scores[i]);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  indicesAboveThreshold.push_back(i);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// Sort the indices based on scores.</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numAboveThreshold = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>>(scoresAboveThreshold.size());</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  std::vector<unsigned int> sortedIndices = <a class="code" href="namespacearmnn.xhtml#ae8ed5c640761fb6744aec0ee16388417">GenerateRangeK</a>(numAboveThreshold);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <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> </div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <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>  <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>  std::vector<unsigned int> outputIndices;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  std::vector<bool> visited(numAboveThreshold, <span class="keyword">false</span>);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numAboveThreshold; ++i)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">if</span> (outputIndices.size() >= numOutput)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">if</span> (!visited[sortedIndices[i]])</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  outputIndices.push_back(indicesAboveThreshold[sortedIndices[i]]);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = i + 1; j < numAboveThreshold; ++j)</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <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>  <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>  <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#abf6aad7bc221f8ad22b4d99cd020373b">IntersectionOverUnion</a>(&boxCorners[iIndex], &boxCorners[jIndex]) > nmsIouThreshold)</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  visited[sortedIndices[j]] = <span class="keyword">true</span>;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">return</span> outputIndices;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</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< unsigned int > 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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">if</span> (source > std::numeric_limits<Dest>::max())</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting unsigned type to "</span></div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="stringliteral">"narrower unsigned type. Overflow detected."</span>);</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(source);</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</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> {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">if</span> (source > std::numeric_limits<Dest>::max())</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting unsigned type to "</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="stringliteral">"narrower unsigned type. Overflow detected."</span>);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(source);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</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> {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">if</span> (source > std::numeric_limits<Dest>::max())</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting signed integral type to narrower signed type. "</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="stringliteral">"Overflow detected."</span>);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">if</span> (source < std::numeric_limits<Dest>::lowest())</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting signed integral type to narrower signed type. "</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="stringliteral">"Underflow detected."</span>);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(source);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</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> {</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">if</span> (source > std::numeric_limits<Dest>::max())</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting signed integral type to narrower signed type. "</span></div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="stringliteral">"Overflow detected."</span>);</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  </div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">if</span> (source < std::numeric_limits<Dest>::lowest())</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting signed integral type to narrower signed type. "</span></div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="stringliteral">"Underflow detected."</span>);</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  </div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(source);</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</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> {</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">if</span> (source > std::numeric_limits<Dest>::max())</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting floating point type to narrower signed type. "</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="stringliteral">"Overflow detected."</span>);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">if</span> (source < std::numeric_limits<Dest>::lowest())</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting floating point type to narrower signed type. "</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="stringliteral">"Underflow detected."</span>);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(source);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</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> {</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">if</span> (source > std::numeric_limits<Dest>::max())</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  {</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting floating point type to narrower signed type. "</span></div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="stringliteral">"Overflow detected."</span>);</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  </div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">if</span> (source < std::numeric_limits<Dest>::lowest())</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  {</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting floating point type to narrower signed type. "</span></div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="stringliteral">"Underflow detected."</span>);</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  }</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  </div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(source);</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</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> {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">if</span> (source > static_cast<Source>(std::numeric_limits<Dest>::max()))</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting floating point type to narrower signed type. "</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="stringliteral">"Overflow detected."</span>);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">if</span> (source < static_cast<Source>(std::numeric_limits<Dest>::lowest()))</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting floating point type to narrower signed type. "</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="stringliteral">"Underflow detected."</span>);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  }</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(source);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</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> {</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">if</span> (source > <span class="keyword">static_cast<</span>Source<span class="keyword">></span>(std::numeric_limits<Dest>::max()))</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  {</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting floating point type to narrower signed type. "</span></div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="stringliteral">"Overflow detected."</span>);</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  }</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  </div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">if</span> (source < <span class="keyword">static_cast<</span>Source<span class="keyword">></span>(std::numeric_limits<Dest>::lowest()))</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  {</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting floating point type to narrower signed type. "</span></div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="stringliteral">"Underflow detected."</span>);</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  }</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  </div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(source);</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</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> {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  Dest sourceConverted = <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(source);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">if</span> (sourceConverted > std::numeric_limits<Dest>::max())</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting signed type to narrower floating point type. "</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="stringliteral">"Overflow detected."</span>);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">if</span> (sourceConverted < std::numeric_limits<Dest>::lowest())</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting signed type to narrower floating point type. "</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="stringliteral">"Underflow detected."</span>);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(source);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</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> {</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  Dest sourceConverted = <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(source);</div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  </div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">if</span> (sourceConverted > std::numeric_limits<Dest>::max())</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  {</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting signed type to narrower floating point type. "</span></div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="stringliteral">"Overflow detected."</span>);</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  </div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">if</span> (sourceConverted < std::numeric_limits<Dest>::lowest())</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  {</div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting signed type to narrower floating point type. "</span></div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="stringliteral">"Underflow detected."</span>);</div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  }</div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  </div> +<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(source);</div> +<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</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> {</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">if</span> (sValue > <span class="keyword">static_cast<</span> typename std::make_unsigned<Dest>::type <span class="keyword">></span>(std::numeric_limits<Dest>::max()))</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting unsigned type to signed type. "</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="stringliteral">"Overflow detected."</span>);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(sValue);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</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> {</div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">if</span> (sValue > <span class="keyword">static_cast<</span> typename std::make_unsigned<Dest>::type <span class="keyword">></span>(std::numeric_limits<Dest>::max()))</div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  {</div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting unsigned type to signed type. "</span></div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="stringliteral">"Overflow detected."</span>);</div> +<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  }</div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  </div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(sValue);</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</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> {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">if</span> (static_cast<Dest>(sValue) > std::numeric_limits<Dest>::max())</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting unsigned type to floating point type. "</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="stringliteral">"Overflow detected."</span>);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(sValue);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</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> {</div> +<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">if</span> (<span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(sValue) > std::numeric_limits<Dest>::max())</div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  {</div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting unsigned type to floating point type. "</span></div> +<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="stringliteral">"Overflow detected."</span>);</div> +<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  }</div> +<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  </div> +<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(sValue);</div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</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> {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">if</span> (sValue < 0)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting negative value to unsigned type. "</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="stringliteral">"Underflow detected."</span>);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">if</span> (<span class="keyword">static_cast<</span> typename std::make_unsigned<Source>::type <span class="keyword">></span>(sValue) > std::numeric_limits<Dest>::max())</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting signed type to unsigned type. "</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="stringliteral">"Overflow detected."</span>);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(sValue);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> }</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> {</div> +<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">if</span> (sValue < 0)</div> +<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  {</div> +<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting negative value to unsigned type. "</span></div> +<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="stringliteral">"Underflow detected."</span>);</div> +<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  }</div> +<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  </div> +<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">if</span> (<span class="keyword">static_cast<</span> typename std::make_unsigned<Source>::type <span class="keyword">></span>(sValue) > std::numeric_limits<Dest>::max())</div> +<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  {</div> +<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting signed type to unsigned type. "</span></div> +<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="stringliteral">"Overflow detected."</span>);</div> +<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  }</div> +<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(sValue);</div> +<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> }</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> {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">if</span> (sValue < 0)</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  {</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting negative value to unsigned type. "</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="stringliteral">"Underflow detected."</span>);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">if</span> (sValue > static_cast<Source>(std::numeric_limits<Dest>::max()))</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  {</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting floating point type to unsigned type. "</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="stringliteral">"Overflow detected."</span>);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  }</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(sValue);</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> }</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> {</div> +<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">if</span> (sValue < 0)</div> +<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  {</div> +<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting negative value to unsigned type. "</span></div> +<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="stringliteral">"Underflow detected."</span>);</div> +<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div> +<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  </div> +<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">if</span> (sValue > <span class="keyword">static_cast<</span>Source<span class="keyword">></span>(std::numeric_limits<Dest>::max()))</div> +<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  {</div> +<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">"numeric_cast failed casting floating point type to unsigned type. "</span></div> +<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="stringliteral">"Overflow detected."</span>);</div> +<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  }</div> +<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div> +<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>Dest<span class="keyword">></span>(sValue);</div> +<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> }</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> {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  {</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  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>  }</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  {</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  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>  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>  }</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> }</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> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <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>  {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  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>  }</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  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>  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>  }</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> }</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">◆ </a></span>operator<<() <span class="overload">[1/9]</span></h2> +<a id="aa6d7532e14af97577c054f96d0cf23b3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa6d7532e14af97577c054f96d0cf23b3">◆ </a></span>operator<<() <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< <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a> > & </td> - <td class="paramname"><em>compute</em> </td> + <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> & </td> + <td class="paramname"><em>shape</em> </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> {</div> +<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  os << <span class="stringliteral">"["</span>;</div> +<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <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>  {</div> +<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">for</span> (uint32_t i = 0; i < 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>  {</div> +<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keywordflow">if</span> (i != 0)</div> +<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  {</div> +<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  os << <span class="stringliteral">","</span>;</div> +<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  }</div> +<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <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>  {</div> +<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  os << shape[i];</div> +<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  }</div> +<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  {</div> +<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  os << <span class="stringliteral">"?"</span>;</div> +<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  }</div> +<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  }</div> +<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  }</div> +<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  {</div> +<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  os << <span class="stringliteral">"Dimensionality Not Specified"</span>;</div> +<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  }</div> +<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  os << <span class="stringliteral">"]"</span>;</div> +<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">return</span> os;</div> +<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> }</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> {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a>& comp : compute)</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  os << <a class="code" href="namespacearmnn.xhtml#a6bab17bfd45c2fa4592c431bc25ad10e">GetComputeDeviceAsCString</a>(comp) << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</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">◆ </a></span>operator<<() <span class="overload">[2/9]</span></h2> +<a id="afc46634e26857d037ee80bb5a74ef28a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afc46634e26857d037ee80bb5a74ef28a">◆ </a></span>operator<<() <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< <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a> > & </td> - <td class="paramname"><em>compute</em> </td> + <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> & </td> + <td class="paramname"><em>id</em> </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> {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a>& comp : compute)</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  {</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  os << <a class="code" href="namespacearmnn.xhtml#a6bab17bfd45c2fa4592c431bc25ad10e">GetComputeDeviceAsCString</a>(comp) << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> }</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> {</div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  os << <span class="keywordtype">id</span>.Get();</div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">return</span> os;</div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</div> </div><!-- fragment --> </div> </div> -<a id="a345acf4e0dc087eee3f9688029ee6328"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a345acf4e0dc087eee3f9688029ee6328">◆ </a></span>operator<<() <span class="overload">[3/9]</span></h2> +<a id="a14de37f4c695ac066f999aa75b7cb136"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a14de37f4c695ac066f999aa75b7cb136">◆ </a></span>operator<<() <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> & </td> - <td class="paramname"><em>compute</em> </td> + <td class="paramtype">const <a class="el" href="structarmnn_1_1_backend_version.xhtml">BackendVersion</a> & </td> + <td class="paramname"><em>backendVersion</em> </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> {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  os << <a class="code" href="namespacearmnn.xhtml#a6bab17bfd45c2fa4592c431bc25ad10e">GetComputeDeviceAsCString</a>(compute);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> }</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> {</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  os << <span class="stringliteral">"["</span> << backendVersion.m_Major << <span class="stringliteral">"."</span> << backendVersion.m_Minor << <span class="stringliteral">"]"</span>;</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  </div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> os;</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</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">◆ </a></span>operator<<() <span class="overload">[4/9]</span></h2> +<a id="aa1166f0056ce60553e825ae3cee4d5f7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa1166f0056ce60553e825ae3cee4d5f7">◆ </a></span>operator<<() <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> & </td> - <td class="paramname"><em>backendVersion</em> </td> + <td class="paramtype">const <a class="el" href="classarmnn_1_1_b_float16.xhtml">BFloat16</a> & </td> + <td class="paramname"><em>b</em> </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> {</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  os << b.ToFloat32() << <span class="stringliteral">"(0x"</span> << std::hex << b.Val() << <span class="stringliteral">")"</span>;</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">return</span> os;</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</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> {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  os << <span class="stringliteral">"["</span> << backendVersion.m_Major << <span class="stringliteral">"."</span> << backendVersion.m_Minor << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div></div><!-- fragment --> </div> </div> -<a id="aa1166f0056ce60553e825ae3cee4d5f7"></a> -<h2 class="memtitle"><span class="permalink"><a href="#aa1166f0056ce60553e825ae3cee4d5f7">◆ </a></span>operator<<() <span class="overload">[5/9]</span></h2> +<a id="a345acf4e0dc087eee3f9688029ee6328"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a345acf4e0dc087eee3f9688029ee6328">◆ </a></span>operator<<() <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> & </td> - <td class="paramname"><em>b</em> </td> + <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a> & </td> + <td class="paramname"><em>compute</em> </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> {</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  os << <a class="code" href="namespacearmnn.xhtml#a6bab17bfd45c2fa4592c431bc25ad10e">GetComputeDeviceAsCString</a>(compute);</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> os;</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> }</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> {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  os << b.ToFloat32() << <span class="stringliteral">"(0x"</span> << std::hex << b.Val() << <span class="stringliteral">")"</span>;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</div></div><!-- fragment --> </div> </div> -<a id="afc46634e26857d037ee80bb5a74ef28a"></a> -<h2 class="memtitle"><span class="permalink"><a href="#afc46634e26857d037ee80bb5a74ef28a">◆ </a></span>operator<<() <span class="overload">[6/9]</span></h2> +<a id="a127a59fdf5e6d2fa74f87f9265de958b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a127a59fdf5e6d2fa74f87f9265de958b">◆ </a></span>operator<<() <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> & </td> - <td class="paramname"><em>id</em> </td> + <td class="paramtype">const std::set< <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a> > & </td> + <td class="paramname"><em>compute</em> </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> {</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  os << <span class="keywordtype">id</span>.Get();</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</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> {</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a>& comp : compute)</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  {</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  os << <a class="code" href="namespacearmnn.xhtml#a6bab17bfd45c2fa4592c431bc25ad10e">GetComputeDeviceAsCString</a>(comp) << <span class="stringliteral">" "</span>;</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">return</span> os;</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> }</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">◆ </a></span>operator<<() <span class="overload">[7/9]</span></h2> +<a id="a5b0313cb554380d6e4dfb24c31f9e605"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5b0313cb554380d6e4dfb24c31f9e605">◆ </a></span>operator<<() <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& armnn::operator<< </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>< <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>, TContainerTemplateArgs... > & </td> - <td class="paramname"><em>ids</em> </td> + <td class="paramtype">const std::vector< <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a> > & </td> + <td class="paramname"><em>compute</em> </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> {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  os << <span class="charliteral">'['</span>;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>& <span class="keywordtype">id</span> : ids) { os << <span class="keywordtype">id</span> << <span class="stringliteral">" "</span>; }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  os << <span class="charliteral">']'</span>;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> }</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> {</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a>& comp : compute)</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  {</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  os << <a class="code" href="namespacearmnn.xhtml#a6bab17bfd45c2fa4592c431bc25ad10e">GetComputeDeviceAsCString</a>(comp) << <span class="stringliteral">" "</span>;</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  }</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">return</span> os;</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</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">◆ </a></span>operator<<() <span class="overload">[8/9]</span></h2> +<a id="a62a9e8c87b9b9f504726746ba4a000a6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a62a9e8c87b9b9f504726746ba4a000a6">◆ </a></span>operator<<() <span class="overload">[8/9]</span></h2> <div class="memitem"> <div class="memproto"> -<table class="mlabels"> - <tr> - <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">std::ostream& armnn::operator<< </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> </td> - <td class="paramname"><em>stat</em> </td> + <td class="paramtype">const <a class="el" href="namespacearmnn_utils.xhtml#ac7bd4ea667375c07718086368507ed44">TContainer</a>< <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>, TContainerTemplateArgs... > & </td> + <td class="paramname"><em>ids</em> </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> {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  os << <a class="code" href="namespacearmnn.xhtml#a19a90c41ca2f46ab29918fef1a6ad72e">GetStatusAsCString</a>(stat);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> }</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> {</div> +<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  os << <span class="charliteral">'['</span>;</div> +<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>& <span class="keywordtype">id</span> : ids) { os << <span class="keywordtype">id</span> << <span class="stringliteral">" "</span>; }</div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  os << <span class="charliteral">']'</span>;</div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">return</span> os;</div> +<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> }</div> </div><!-- fragment --> </div> </div> -<a id="aa6d7532e14af97577c054f96d0cf23b3"></a> -<h2 class="memtitle"><span class="permalink"><a href="#aa6d7532e14af97577c054f96d0cf23b3">◆ </a></span>operator<<() <span class="overload">[9/9]</span></h2> +<a id="aaa5b68f3f5bb73b1d3c85d895547a372"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aaa5b68f3f5bb73b1d3c85d895547a372">◆ </a></span>operator<<() <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> & </td> - <td class="paramname"><em>shape</em> </td> + <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a> </td> + <td class="paramname"><em>stat</em> </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> {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  os << <span class="stringliteral">"["</span>;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <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>  {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">for</span> (uint32_t i = 0; i < 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>  {</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keywordflow">if</span> (i != 0)</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  {</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  os << <span class="stringliteral">","</span>;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  }</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <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>  {</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  os << shape[i];</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  }</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  {</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  os << <span class="stringliteral">"?"</span>;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  }</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  {</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  os << <span class="stringliteral">"Dimensionality Not Specified"</span>;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  }</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  os << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> }</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> {</div> +<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  os << <a class="code" href="namespacearmnn.xhtml#a19a90c41ca2f46ab29918fef1a6ad72e">GetStatusAsCString</a>(stat);</div> +<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">return</span> os;</div> +<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> }</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">◆ </a></span>Optimize() <span class="overload">[1/2]</span></h2> +<a id="a4c79e02d43c1fac7d2f073663ef9ca5d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4c79e02d43c1fac7d2f073663ef9ca5d">◆ </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> & </td> - <td class="paramname"><em>network</em>, </td> + <td class="paramtype">const <a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> & </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> & </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>< std::vector< std::string > &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > </td> <td class="paramname"><em>messages</em> = <code><a class="el" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>()</code> </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< TParser >::Setup()</a>, <a class="el" href="_parser_prototxt_fixture_8hpp_source.xhtml#l00174">ParserPrototxtFixture< TParser >::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> {</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a82e98ef05fd67036d1195ba17174d685">Optimize</a>(inNetwork.pNetworkImpl->GetGraph(),</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>  backendPreferences,</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>  deviceSpec,</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>  options,</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>  messages);</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> }</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 &network, const std::vector< BackendId > &backendPreferences, const IDeviceSpec &deviceSpec, const OptimizerOptions &options=OptimizerOptions(), Optional< std::vector< std::string > &> 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">◆ </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> {</div> +<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(debug) << options.ToString();</div> +<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>  </div> +<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>  <span class="comment">// Enable profiling</span></div> +<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>  <span class="keyword">auto</span> profiler = inGraph.GetProfiler();</div> +<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>  ProfilerManager::GetInstance().RegisterProfiler(profiler.get());</div> +<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>  profiler->EnableProfiling(options.m_ProfilingEnabled);</div> +<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>  </div> +<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Optimizer"</span>);</div> +<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>  <span class="keywordflow">if</span> (backendPreferences.empty())</div> +<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>  {</div> +<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Invoked Optimize with no backends specified"</span>);</div> +<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>  }</div> +<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>  </div> +<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>  <span class="keywordflow">if</span> (options.m_ReduceFp32ToBf16)</div> +<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>  {</div> +<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"BFloat16 optimization is currently ignored. In order to use Bf16 optimization "</span></div> +<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>  <span class="stringliteral">"Please use the FastMathEnabled backend option for CpuAcc or GpuAcc."</span>);</div> +<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>  }</div> +<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>  </div> +<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>  <span class="keywordflow">if</span> (options.m_ReduceFp32ToFp16 && options.m_ReduceFp32ToBf16)</div> +<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>  {</div> +<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"BFloat16 and Float16 optimization cannot be enabled at the same time."</span>);</div> +<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>  }</div> +<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>  </div> +<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>  <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>  inGraph.VerifyConstantLayerSetTensorInfo();</div> +<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>  </div> +<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>  std::unique_ptr<Graph> graph = std::make_unique<Graph>(inGraph);</div> +<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>  </div> +<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>  <span class="comment">// We need to pass on the information about whether import and export is enabled to the LoadNetwork phase.</span></div> +<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>  <span class="comment">// The mechanism to do that is to add model options to the optimized network.</span></div> +<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>  <a class="code" href="structarmnn_1_1_backend_options.xhtml">armnn::BackendOptions</a> importExport(<span class="stringliteral">"Global"</span>,</div> +<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>  {{<span class="stringliteral">"ImportEnabled"</span>, options.m_ImportEnabled},</div> +<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>  {<span class="stringliteral">"ExportEnabled"</span>, options.m_ExportEnabled}});</div> +<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>  <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>  optimizedOptions.push_back(importExport);</div> +<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>  </div> +<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>  <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>  &IOptimizedNetwork::Destroy);</div> +<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>  </div> +<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>  IOptimizedNetwork* optNetObjPtr = optNet.get();</div> +<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>  </div> +<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>  <span class="comment">// Get the optimized graph</span></div> +<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>  Graph& optGraph = optNetObjPtr->pOptimizedNetworkImpl->GetGraph();</div> +<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>  </div> +<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>  <span class="keywordflow">if</span>(options.m_shapeInferenceMethod == ShapeInferenceMethod::InferAndValidate)</div> +<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>  {</div> +<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>  <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>  optGraph.InferTensorInfos();</div> +<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>  }</div> +<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>  </div> +<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>  <span class="comment">// Perform AddBroadcastReshapeLayer optimisation</span></div> +<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>  <span class="keyword">using namespace </span>optimizations;</div> +<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>  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>  </div> +<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>  <span class="keywordflow">if</span>(options.m_shapeInferenceMethod == ShapeInferenceMethod::ValidateOnly)</div> +<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>  {</div> +<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>  <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>  optGraph.InferTensorInfos();</div> +<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>  }</div> +<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>  </div> +<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>  </div> +<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>  <span class="comment">// Group Constant Layer optimizations together where possible.</span></div> +<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>  <span class="comment">// This is important as:</span></div> +<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>  <span class="comment">// FusePermuteIntoConstantLayer must happen before FoldPadIntoDepthwiseConvolution2d and</span></div> +<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>  <span class="comment">// FuseBatchNormIntoDepthwiseConvolution2D.</span></div> +<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>  <span class="comment">// ConvertConstDequantisationLayersToConstLayers must happen before FoldPadIntoConvolution2d</span></div> +<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>  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>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4dfbdc8cc90b67e74eccd146d977ff66">ConvertConstDequantisationLayersToConstLayers</a>()));</div> +<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>  <span class="comment">// Perform optimisation passes</span></div> +<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>  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>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aba7b0ca6192b8b58ecd517a82b4f378e">SquashEqualTransposeSiblings</a>(),</div> +<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a29f8d97b2d74f99c88298881cd1d825b">SquashEqualReshapeSiblings</a>(),</div> +<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aa31127c77d2117f78d43ca2958dcae19">OptimizeInversePermutes</a>(),</div> +<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a2f9d1a13be2ac1c4213729a0ef181fc0">OptimizeInverseTransposes</a>(),</div> +<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aafc70d5af99400ff5ea7991825658b2f">MovePermuteUp</a>(),</div> +<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a5918588fa316cf4c23f1cf02c81ee706">MoveTransposeUp</a>(),</div> +<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ae0b1382e3af141896a46531c50e8863f">PermuteAsReshape</a>(),</div> +<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ad1aaeee71293f34d9f65d2dd2792830d">TransposeAsReshape</a>(),</div> +<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a8341ca3512ebafb19d60eba44d40d9e4">OptimizeConsecutiveReshapes</a>(),</div> +<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a8b394ff60ed829a91f07deac476f3db2">FoldPadIntoConvolution2d</a>(),</div> +<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a227e9ab5e488aa90ba462790ba0e5aec">FoldPadIntoDepthwiseConvolution2d</a>(),</div> +<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a279d0a7c56966cea334303d48a874964">FoldPadIntoPooling2d</a>(),</div> +<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a17d1279f5f8e3b92c328b1ed3b6fd549">PermuteAndBatchToSpaceAsDepthToSpace</a>(),</div> +<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a98f54d4391347d517c7a7869e7707203">TransposeAndBatchToSpaceAsDepthToSpace</a>(),</div> +<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aa52c06792e18dc13030e82476f706f9e">FuseBatchNormIntoConvolution2DFloat32</a>(),</div> +<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a8a81178ddcebb93ec0c35b6e6284273c">FuseBatchNormIntoConvolution2DFloat16</a>(),</div> +<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a56e54a818166a2f4b2c1a7f76a3629ff">FuseBatchNormIntoDepthwiseConvolution2DFloat32</a>(),</div> +<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ab40bb51feca46649eb9d00522bfe51f6">FuseBatchNormIntoDepthwiseConvolution2DFloat16</a>()));</div> +<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>  </div> +<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>  <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>  <span class="keywordflow">if</span> (options.m_ReduceFp32ToFp16)</div> +<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>  {</div> +<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Optimizer_ReduceFp32ToFp16"</span>);</div> +<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>  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>  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>  }</div> +<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>  </div> +<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>  <span class="comment">// Initialize backend settings</span></div> +<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>  BackendSettings backendSettings(backendPreferences, deviceSpec);</div> +<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>  <span class="keywordflow">if</span> (backendSettings.GetAvailablePreferredBackends().empty())</div> +<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>  {</div> +<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>  std::stringstream failureMsg;</div> +<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>  failureMsg << <span class="stringliteral">"None of the preferred backends "</span> << backendPreferences</div> +<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>  << <span class="stringliteral">" are supported. Current platform provides "</span> << backendSettings.m_SupportedBackends;</div> +<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>  <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>  <span class="keywordflow">throw</span> InvalidArgumentException(failureMsg.str());</div> +<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>  }</div> +<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>  </div> +<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>  <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>  TensorHandleFactoryRegistry tensorHandleFactoryRegistry;</div> +<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>  <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>  </div> +<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>  <span class="comment">// Assign an available backend to each layer</span></div> +<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>  Graph::Iterator firstLayer = optGraph.begin();</div> +<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>  Graph::Iterator lastLayer = optGraph.end();</div> +<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>  OptimizationResult assignBackendsResult = <a class="code" href="namespacearmnn.xhtml#a0ea4ff80d0075ff847e96dc12e734368">AssignBackends</a>(optNetObjPtr->pOptimizedNetworkImpl.get(),</div> +<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>  backendSettings,</div> +<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>  firstLayer,</div> +<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>  lastLayer,</div> +<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>  messages);</div> +<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>  <span class="keywordflow">if</span> (assignBackendsResult.m_Error)</div> +<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>  {</div> +<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>  <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>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Failed to assign a backend to each layer"</span>);</div> +<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>  }</div> +<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>  </div> +<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>  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>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ae1509d340bc981b11101c3316ee8afd6">OptimizeInverseConversionsFp32</a>()));</div> +<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>  </div> +<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>  <span class="comment">// Apply the backend-specific optimizations</span></div> +<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>  OptimizationResult backendOptimizationResult = <a class="code" href="namespacearmnn.xhtml#ac39f2b15d34d3e2fc74d586fc3e26231">ApplyBackendOptimizations</a>(optNetObjPtr->pOptimizedNetworkImpl.get(),</div> +<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>  backendSettings,</div> +<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>  backends,</div> +<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>  options.m_ModelOptions,</div> +<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>  messages);</div> +<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>  <span class="keywordflow">if</span> (backendOptimizationResult.m_Error)</div> +<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>  {</div> +<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>  <span class="comment">// Failed to apply the backend-specific optimizations</span></div> +<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Failed to apply the backend-specific optimizations"</span>);</div> +<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>  }</div> +<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>  </div> +<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>  <span class="comment">// Convert constants</span></div> +<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>  {</div> +<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Optimizer_ConvertConstants"</span>);</div> +<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>  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>  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>  }</div> +<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>  </div> +<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>  <span class="comment">// This must occur after all topological changes to the graph and any redirection of variables</span></div> +<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>  <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>  <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>  <span class="keywordflow">if</span> (options.m_Debug && !options.m_DebugToFile)</div> +<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>  {</div> +<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>  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>  }</div> +<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>  <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>  {</div> +<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>  <span class="comment">// Setup the output file path</span></div> +<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>  <span class="keywordflow">try</span></div> +<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>  {</div> +<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>  <span class="keyword">auto</span> result = <a class="code" href="namespacearmnn_utils_1_1_filesystem.xhtml#a0477efb2c6f5b41fbfe937fef6db312d">armnnUtils::Filesystem::CreateDirectory</a>(<span class="stringliteral">"/ArmNNIntermediateLayerOutputs"</span>);</div> +<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) << <span class="stringliteral">"Intermediate tensors will be written to: "</span> << result;</div> +<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>  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>  }</div> +<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>  <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>& e)</div> +<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>  {</div> +<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>  <span class="comment">// If we cannot create the output directory then we'll issue a warning and continue.</span></div> +<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) << <span class="stringliteral">"Unable to print intermediate layer outputs : "</span> << 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>  }</div> +<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>  }</div> +<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>  </div> +<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>  <span class="comment">// Calculate the compatibility strategies for tensor handles</span></div> +<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>  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>  backends,</div> +<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>  tensorHandleFactoryRegistry,</div> +<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>  options.m_ImportEnabled,</div> +<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>  options.m_ExportEnabled,</div> +<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>  messages);</div> +<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>  </div> +<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>  <span class="keywordflow">if</span> (strategyResult.m_Error)</div> +<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>  {</div> +<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>  <span class="comment">// Failed to apply the backend-specific optimizations</span></div> +<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a>(<span class="keyword">nullptr</span>, &IOptimizedNetwork::Destroy);</div> +<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>  }</div> +<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>  </div> +<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>  <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>  {</div> +<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Optimizer_AddCompatibilityLayers"</span>);</div> +<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>  optGraph.AddCompatibilityLayers(backends, tensorHandleFactoryRegistry);</div> +<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>  }</div> +<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>  </div> +<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>  <span class="keywordflow">return</span> optNet;</div> +<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> }</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">◆ </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> & </td> - <td class="paramname"><em>inGraph</em>, </td> + <td class="paramtype">const <a class="el" href="classarmnn_1_1_i_network.xhtml">INetwork</a> & </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> & </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>< std::vector< std::string > &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > </td> <td class="paramname"><em>messages</em> = <code><a class="el" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>()</code> </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> {</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(debug) << options.ToString();</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span> </div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>  <span class="comment">// Enable profiling</span></div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>  <span class="keyword">auto</span> profiler = inGraph.GetProfiler();</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>  ProfilerManager::GetInstance().RegisterProfiler(profiler.get());</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>  profiler->EnableProfiling(options.m_ProfilingEnabled);</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> </div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Optimizer"</span>);</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>  <span class="keywordflow">if</span> (backendPreferences.empty())</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>  {</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Invoked Optimize with no backends specified"</span>);</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>  }</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> </div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>  <span class="keywordflow">if</span> (options.m_ReduceFp32ToBf16)</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>  {</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"BFloat16 optimization is currently ignored. In order to use Bf16 optimization "</span></div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>  <span class="stringliteral">"Please use the FastMathEnabled backend option for CpuAcc or GpuAcc."</span>);</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>  }</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> </div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>  <span class="keywordflow">if</span> (options.m_ReduceFp32ToFp16 && options.m_ReduceFp32ToBf16)</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>  {</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"BFloat16 and Float16 optimization cannot be enabled at the same time."</span>);</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>  }</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> </div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>  <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>  inGraph.VerifyConstantLayerSetTensorInfo();</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span> </div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>  std::unique_ptr<Graph> graph = std::make_unique<Graph>(inGraph);</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span> </div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>  <span class="comment">// We need to pass on the information about whether import and export is enabled to the LoadNetwork phase.</span></div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>  <span class="comment">// The mechanism to do that is to add model options to the optimized network.</span></div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>  <a class="code" href="structarmnn_1_1_backend_options.xhtml">armnn::BackendOptions</a> importExport(<span class="stringliteral">"Global"</span>,</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>  {{<span class="stringliteral">"ImportEnabled"</span>, options.m_ImportEnabled},</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>  {<span class="stringliteral">"ExportEnabled"</span>, options.m_ExportEnabled}});</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>  <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>  optimizedOptions.push_back(importExport);</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> </div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>  <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>  &IOptimizedNetwork::Destroy);</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span> </div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>  IOptimizedNetwork* optNetObjPtr = optNet.get();</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> </div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>  <span class="comment">// Get the optimized graph</span></div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>  Graph& optGraph = optNetObjPtr->pOptimizedNetworkImpl->GetGraph();</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> </div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>  <span class="keywordflow">if</span>(options.m_shapeInferenceMethod == ShapeInferenceMethod::InferAndValidate)</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>  {</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>  <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>  optGraph.InferTensorInfos();</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>  }</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span> </div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>  <span class="comment">// Perform AddBroadcastReshapeLayer optimisation</span></div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>  <span class="keyword">using namespace </span>optimizations;</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>  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> </div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>  <span class="keywordflow">if</span>(options.m_shapeInferenceMethod == ShapeInferenceMethod::ValidateOnly)</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>  {</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>  <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>  optGraph.InferTensorInfos();</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>  }</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> </div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> </div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>  <span class="comment">// Group Constant Layer optimizations together where possible.</span></div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>  <span class="comment">// This is important as:</span></div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>  <span class="comment">// FusePermuteIntoConstantLayer must happen before FoldPadIntoDepthwiseConvolution2d and</span></div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>  <span class="comment">// FuseBatchNormIntoDepthwiseConvolution2D.</span></div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>  <span class="comment">// ConvertConstDequantisationLayersToConstLayers must happen before FoldPadIntoConvolution2d</span></div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>  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>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4dfbdc8cc90b67e74eccd146d977ff66">ConvertConstDequantisationLayersToConstLayers</a>()));</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>  <span class="comment">// Perform optimisation passes</span></div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>  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>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aba7b0ca6192b8b58ecd517a82b4f378e">SquashEqualTransposeSiblings</a>(),</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a29f8d97b2d74f99c88298881cd1d825b">SquashEqualReshapeSiblings</a>(),</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aa31127c77d2117f78d43ca2958dcae19">OptimizeInversePermutes</a>(),</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a2f9d1a13be2ac1c4213729a0ef181fc0">OptimizeInverseTransposes</a>(),</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aafc70d5af99400ff5ea7991825658b2f">MovePermuteUp</a>(),</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a5918588fa316cf4c23f1cf02c81ee706">MoveTransposeUp</a>(),</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ae0b1382e3af141896a46531c50e8863f">PermuteAsReshape</a>(),</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ad1aaeee71293f34d9f65d2dd2792830d">TransposeAsReshape</a>(),</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a8341ca3512ebafb19d60eba44d40d9e4">OptimizeConsecutiveReshapes</a>(),</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a8b394ff60ed829a91f07deac476f3db2">FoldPadIntoConvolution2d</a>(),</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a227e9ab5e488aa90ba462790ba0e5aec">FoldPadIntoDepthwiseConvolution2d</a>(),</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a279d0a7c56966cea334303d48a874964">FoldPadIntoPooling2d</a>(),</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a17d1279f5f8e3b92c328b1ed3b6fd549">PermuteAndBatchToSpaceAsDepthToSpace</a>(),</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a98f54d4391347d517c7a7869e7707203">TransposeAndBatchToSpaceAsDepthToSpace</a>(),</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aa52c06792e18dc13030e82476f706f9e">FuseBatchNormIntoConvolution2DFloat32</a>(),</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a8a81178ddcebb93ec0c35b6e6284273c">FuseBatchNormIntoConvolution2DFloat16</a>(),</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a56e54a818166a2f4b2c1a7f76a3629ff">FuseBatchNormIntoDepthwiseConvolution2DFloat32</a>(),</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ab40bb51feca46649eb9d00522bfe51f6">FuseBatchNormIntoDepthwiseConvolution2DFloat16</a>()));</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> </div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>  <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>  <span class="keywordflow">if</span> (options.m_ReduceFp32ToFp16)</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>  {</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Optimizer_ReduceFp32ToFp16"</span>);</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>  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>  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>  }</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span> </div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>  <span class="comment">// Initialize backend settings</span></div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>  BackendSettings backendSettings(backendPreferences, deviceSpec);</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>  <span class="keywordflow">if</span> (backendSettings.GetAvailablePreferredBackends().empty())</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>  {</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>  std::stringstream failureMsg;</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>  failureMsg << <span class="stringliteral">"None of the preferred backends "</span> << backendPreferences</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>  << <span class="stringliteral">" are supported. Current platform provides "</span> << backendSettings.m_SupportedBackends;</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>  <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>  <span class="keywordflow">throw</span> InvalidArgumentException(failureMsg.str());</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>  }</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span> </div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>  <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>  TensorHandleFactoryRegistry tensorHandleFactoryRegistry;</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>  <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> </div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>  <span class="comment">// Assign an available backend to each layer</span></div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>  Graph::Iterator firstLayer = optGraph.begin();</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>  Graph::Iterator lastLayer = optGraph.end();</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>  OptimizationResult assignBackendsResult = <a class="code" href="namespacearmnn.xhtml#a48e4d70ae8893f6f1a8ebfced5b03a07">AssignBackends</a>(optNetObjPtr->pOptimizedNetworkImpl.get(),</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>  backendSettings,</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>  firstLayer,</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>  lastLayer,</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>  messages);</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>  <span class="keywordflow">if</span> (assignBackendsResult.m_Error)</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>  {</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>  <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>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Failed to assign a backend to each layer"</span>);</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>  }</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span> </div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>  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>  <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ae1509d340bc981b11101c3316ee8afd6">OptimizeInverseConversionsFp32</a>()));</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span> </div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>  <span class="comment">// Apply the backend-specific optimizations</span></div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>  OptimizationResult backendOptimizationResult = <a class="code" href="namespacearmnn.xhtml#a9f31d956861d8277fa5f8fb877dbbb6c">ApplyBackendOptimizations</a>(optNetObjPtr->pOptimizedNetworkImpl.get(),</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>  backendSettings,</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>  backends,</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>  options.m_ModelOptions,</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>  messages);</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>  <span class="keywordflow">if</span> (backendOptimizationResult.m_Error)</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>  {</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>  <span class="comment">// Failed to apply the backend-specific optimizations</span></div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Failed to apply the backend-specific optimizations"</span>);</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>  }</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> </div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>  <span class="comment">// Convert constants</span></div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>  {</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Optimizer_ConvertConstants"</span>);</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>  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>  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>  }</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> </div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>  <span class="comment">// This must occur after all topological changes to the graph and any redirection of variables</span></div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>  <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>  <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>  <span class="keywordflow">if</span> (options.m_Debug && !options.m_DebugToFile)</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>  {</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>  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>  }</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>  <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>  {</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>  <span class="comment">// Setup the output file path</span></div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>  <span class="keywordflow">try</span></div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>  {</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>  <span class="keyword">auto</span> result = <a class="code" href="namespacearmnn_utils_1_1_filesystem.xhtml#a0477efb2c6f5b41fbfe937fef6db312d">armnnUtils::Filesystem::CreateDirectory</a>(<span class="stringliteral">"/ArmNNIntermediateLayerOutputs"</span>);</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) << <span class="stringliteral">"Intermediate tensors will be written to: "</span> << result;</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>  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>  }</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>  <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>& e)</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>  {</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>  <span class="comment">// If we cannot create the output directory then we'll issue a warning and continue.</span></div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) << <span class="stringliteral">"Unable to print intermediate layer outputs : "</span> << 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>  }</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>  }</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span> </div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>  <span class="comment">// Calculate the compatibility strategies for tensor handles</span></div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>  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>  backends,</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>  tensorHandleFactoryRegistry,</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>  options.m_ImportEnabled,</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>  options.m_ExportEnabled,</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>  messages);</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> </div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>  <span class="keywordflow">if</span> (strategyResult.m_Error)</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>  {</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>  <span class="comment">// Failed to apply the backend-specific optimizations</span></div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a>(<span class="keyword">nullptr</span>, &IOptimizedNetwork::Destroy);</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>  }</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> </div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>  <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>  {</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Optimizer_AddCompatibilityLayers"</span>);</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>  optGraph.AddCompatibilityLayers(backends, tensorHandleFactoryRegistry);</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>  }</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> </div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>  <span class="keywordflow">return</span> optNet;</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> }</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< Layer, PermuteLayer, SquashEqualSiblingsImpl< PermuteLayer > > 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 &errorMessage, Optional< std::vector< std::string > &> 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< PermuteLayer, PermuteLayer, OptimizeInversePermutesImpl< PermuteLayer > > 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< PadLayer, Convolution2dLayer, pad_fold::FoldPadIntoConvolution2dImpl > 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 &&... 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< TransposeLayer, TransposeLayer, OptimizeInversePermutesImpl< TransposeLayer > > 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< PadLayer, DepthwiseConvolution2dLayer, pad_fold::FoldPadIntoDepthwiseConvolution2dImpl > 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< TransposeLayer, BatchToSpaceNdLayer, PermuteAndBatchToSpaceAsDepthToSpaceImpl< TransposeLayer > > TransposeAndBatchToSpaceAsDepthToSpace</div><div class="ttdef"><b>Definition:</b> <a href="_permute_and_batch_to_space_as_depth_to_space_8hpp_source.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< DepthwiseConvolution2dLayer, BatchNormalizationLayer, FuseBatchNorm< DepthwiseConvolution2dLayer, armnn::DataType::Float32 > > 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< BackendOptions > 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< DepthwiseConvolution2dLayer, BatchNormalizationLayer, FuseBatchNorm< DepthwiseConvolution2dLayer, armnn::DataType::Float16 > > 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< Convolution2dLayer, BatchNormalizationLayer, FuseBatchNorm< Convolution2dLayer, armnn::DataType::Float16 > > 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< Convolution2dLayer, BatchNormalizationLayer, FuseBatchNorm< Convolution2dLayer, armnn::DataType::Float32 > > 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< Layer, ReshapeLayer, SquashEqualSiblingsImpl< ReshapeLayer > > 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< Layer, TransposeLayer, MoveTransposeUpImpl > 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< Layer, AddDebugImpl > 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< ReshapeLayer, ReshapeLayer, OptimizeConsecutiveReshapesImpl > 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< ConvertFp16ToFp32Layer, ConvertFp32ToFp16Layer, OptimizeInverseConversionsImpl > 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< ConstantLayer, PermuteLayer, ConvertConstPermuteLayersToConstLayers > 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< PermuteLayer, BatchToSpaceNdLayer, PermuteAndBatchToSpaceAsDepthToSpaceImpl< PermuteLayer > > PermuteAndBatchToSpaceAsDepthToSpace</div><div class="ttdef"><b>Definition:</b> <a href="_permute_and_batch_to_space_as_depth_to_space_8hpp_source.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< Layer, PermuteLayer, MovePermuteUpImpl > 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< Float32ToFloat16, IsFloat16Layer > 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< TransposeLayer, TransposeAsReshapeImpl > 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 &backendSettings, BackendsMap &backends, const ModelOptions &modelOptions, Optional< std::vector< std::string > &> 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 &optGraph, BackendsMap &backends, TensorHandleFactoryRegistry &registry, bool importEnabled, bool exportEnabled, Optional< std::vector< std::string > &> errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.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< IOptimizedNetwork, void(*)(IOptimizedNetwork *network)> 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< PermuteLayer, PermuteAsReshapeImpl > 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< Layer, TransposeLayer, SquashEqualSiblingsImpl< TransposeLayer > > 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< Float16ToFloat32, IsFloat32Layer > 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 &handleFactoryRegistry, BackendSettings &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< ConvertFp32ToFp16Layer, ConvertFp16ToFp32Layer, OptimizeInverseConversionsImpl > 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< PadLayer, Pooling2dLayer, pad_fold::FoldPadIntoPooling2dImpl > 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< Layer, ConvertFp32NetworkToFp16Impl > 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< Layer, AddBroadcastReshapeLayerImpl > 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< ConstantLayer, DequantizeLayer, ConvertConstDequantisationLayersToConstLayersImpl > 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< Layer, AddDebugToFileImpl > 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 &backendSettings, SubgraphView &subgraph, Optional< std::vector< std::string > &> 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< BackendId, std::unique_ptr< class IBackendInternal > > 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> {</div> +<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a2783360b253135639f4c63cfcaed6d48">Optimize</a>(inNetwork.pNetworkImpl->GetGraph(),</div> +<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>  backendPreferences,</div> +<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>  deviceSpec,</div> +<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>  options,</div> +<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>  messages);</div> +<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> }</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< TParser >::Setup()</a>, and <a class="el" href="_parser_prototxt_fixture_8hpp_source.xhtml#l00174">ParserPrototxtFixture< TParser >::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> {</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">auto</span> padList = data.m_Parameters.m_PadList;</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">auto</span> padValue = data.m_Parameters.m_PadValue;</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  </div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <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>  </div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  TensorShape outputShape = outputInfo.GetShape();</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  TensorShape inputShape = inputInfo.GetShape();</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  </div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <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>  </div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#ifndef NDEBUG</span></div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  </div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <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>  assert(numInputDimensions == numOutputDimensions);</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  </div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#endif</span></div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keyword">auto</span> inputData = MakeDecoder<float>(inputInfo, inputHandle->Map());</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keyword">auto</span> outData = MakeEncoder<float>(outputInfo, outputHandle->Map());</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  </div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <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>  <span class="keywordflow">if</span> (outputInfo.IsQuantized())</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <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>  <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>  <span class="keyword">auto</span> outputData = MakeEncoder<float>(temporaryInfo, outputHandle->Map());</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  FillOutputWithPadValue(*outputData, padValue, numOutputElements);</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  {</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  FillOutputWithPadValue(*outData, padValue, numOutputElements);</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  </div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  Decoder<float>& input = *inputData;</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  Encoder<float>& output = *outData;</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  </div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">switch</span>(numInputDimensions) {</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  </div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">case</span> 1:</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  inputWidth = inputShape[0];</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < inputWidth ; w++)</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  {</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  input[w];</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keyword">auto</span> inputValue = input.Get();</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keyword">auto</span> outputIndex = w + std::get<0>(padList[0]);</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  output[outputIndex];</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  output.Set(inputValue);</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  }</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  </div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">case</span> 2 :</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  inputHeight = inputShape[0];</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  inputWidth = inputShape[1];</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  outputWidth = outputShape[1];</div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  </div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h < inputHeight; h++)</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  {</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < inputWidth ; w++)</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  {</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  input[h * inputWidth + w];</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">auto</span> inputValue = input.Get();</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keyword">auto</span> outputIndex = (h + std::get<0>(padList[0])) * outputWidth + (w + std::get<0>(padList[1]));</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  output[outputIndex];</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  output.Set(inputValue);</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  }</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  </div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">case</span> 3 :</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  inputChannels = inputShape[0];</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  inputHeight = inputShape[1];</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  inputWidth = inputShape[2];</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  outputHeight = outputShape[1];</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  outputWidth = outputShape[2];</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  </div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < inputChannels; c++)</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  {</div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h < inputHeight; h++)</div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  {</div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < inputWidth ; w++)</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  {</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  input[c * inputHeight * inputWidth + h * inputWidth + w];</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keyword">auto</span> inputValue = input.Get();</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keyword">auto</span> outputIndex = (c + std::get<0>(padList[0])) * outputHeight * outputWidth</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  + (h + std::get<0>(padList[1])) * outputWidth</div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  + (w + std::get<0>(padList[2]));</div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  output[outputIndex];</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  output.Set(inputValue);</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  </div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">case</span> 4 :</div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  inputBatches = inputShape[0];</div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  inputChannels = inputShape[1];</div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  inputHeight = inputShape[2];</div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  inputWidth = inputShape[3];</div> +<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  outputChannels = outputShape[1];</div> +<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  outputHeight = outputShape[2];</div> +<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  outputWidth = outputShape[3];</div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  </div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> b = 0; b < inputBatches; b++)</div> +<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  {</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < inputChannels; c++)</div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  {</div> +<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h < inputHeight; h++)</div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  {</div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < inputWidth ; w++)</div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  {</div> +<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  input[b * inputChannels * inputHeight * inputWidth</div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  + c * inputHeight * inputWidth</div> +<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  + h * inputWidth</div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  + w];</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">auto</span> inputValue = input.Get();</div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">auto</span> outputIndex = (b + std::get<0>(padList[0]))</div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  * outputChannels * outputHeight * outputWidth</div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  + (c + std::get<0>(padList[1])) * outputHeight * outputWidth</div> +<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  + (h + std::get<0>(padList[2])) * outputWidth</div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  + (w + std::get<0>(padList[3]));</div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  output[outputIndex];</div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  output.Set(inputValue);</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  }</div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  }</div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  </div> +<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  default :</div> +<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  }</div> +<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> }</div> +</div><!-- fragment --> +<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder< IType >::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< LayerDescriptor >::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< IType >::Set()</a>.</p> -<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder< IType >::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< LayerDescriptor >::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< IType >::Set()</a>.</p> -<div class="fragment"><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">auto</span> padList = data.m_Parameters.m_PadList;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">auto</span> padValue = data.m_Parameters.m_PadValue;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <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> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  TensorShape outputShape = outputInfo.GetShape();</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  TensorShape inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <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> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#ifndef NDEBUG</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <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>  assert(numInputDimensions == numOutputDimensions);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <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>  <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>  <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> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keyword">auto</span> inputData = MakeDecoder<float>(inputInfo, inputHandle->Map());</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keyword">auto</span> outData = MakeEncoder<float>(outputInfo, outputHandle->Map());</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <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>  <span class="keywordflow">if</span> (outputInfo.IsQuantized())</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <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>  <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>  <span class="keyword">auto</span> outputData = MakeEncoder<float>(temporaryInfo, outputHandle->Map());</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  FillOutputWithPadValue(*outputData, padValue, numOutputElements);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  FillOutputWithPadValue(*outData, padValue, numOutputElements);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  Decoder<float>& input = *inputData;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  Encoder<float>& output = *outData;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">switch</span>(numInputDimensions) {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  inputWidth = inputShape[0];</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < inputWidth ; w++)</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  input[w];</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keyword">auto</span> inputValue = input.Get();</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keyword">auto</span> outputIndex = w + std::get<0>(padList[0]);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  output[outputIndex];</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  output.Set(inputValue);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">case</span> 2 :</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  inputHeight = inputShape[0];</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  inputWidth = inputShape[1];</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  outputWidth = outputShape[1];</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h < inputHeight; h++)</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < inputWidth ; w++)</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  input[h * inputWidth + w];</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">auto</span> inputValue = input.Get();</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keyword">auto</span> outputIndex = (h + std::get<0>(padList[0])) * outputWidth + (w + std::get<0>(padList[1]));</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  output[outputIndex];</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  output.Set(inputValue);</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">case</span> 3 :</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  inputChannels = inputShape[0];</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  inputHeight = inputShape[1];</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  inputWidth = inputShape[2];</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  outputHeight = outputShape[1];</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  outputWidth = outputShape[2];</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < inputChannels; c++)</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  {</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h < inputHeight; h++)</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < inputWidth ; w++)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  {</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  input[c * inputHeight * inputWidth + h * inputWidth + w];</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keyword">auto</span> inputValue = input.Get();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keyword">auto</span> outputIndex = (c + std::get<0>(padList[0])) * outputHeight * outputWidth</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  + (h + std::get<0>(padList[1])) * outputWidth</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  + (w + std::get<0>(padList[2]));</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  output[outputIndex];</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  output.Set(inputValue);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">case</span> 4 :</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  inputBatches = inputShape[0];</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  inputChannels = inputShape[1];</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  inputHeight = inputShape[2];</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  inputWidth = inputShape[3];</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  outputChannels = outputShape[1];</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  outputHeight = outputShape[2];</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  outputWidth = outputShape[3];</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> b = 0; b < inputBatches; b++)</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < inputChannels; c++)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h < inputHeight; h++)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w < inputWidth ; w++)</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  input[b * inputChannels * inputHeight * inputWidth</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  + c * inputHeight * inputWidth</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  + h * inputWidth</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  + w];</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">auto</span> inputValue = input.Get();</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">auto</span> outputIndex = (b + std::get<0>(padList[0]))</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  * outputChannels * outputHeight * outputWidth</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  + (c + std::get<0>(padList[1])) * outputHeight * outputWidth</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  + (h + std::get<0>(padList[2])) * outputWidth</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  + (w + std::get<0>(padList[3]));</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  output[outputIndex];</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  output.Set(inputValue);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  default :</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> }</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> {</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <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>  {</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <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>  }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordflow">return</span> defaultValue;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> }</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> {</div> +<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <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>  {</div> +<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <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>  }</div> +<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordflow">return</span> defaultValue;</div> +<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> }</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> {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a637fea04314a9870c1dc4355c1bed429">armnn::StrEqual</a>(str, <span class="stringliteral">"CpuAcc"</span>))</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <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>  }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a637fea04314a9870c1dc4355c1bed429">armnn::StrEqual</a>(str, <span class="stringliteral">"CpuRef"</span>))</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <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>  }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a637fea04314a9870c1dc4355c1bed429">armnn::StrEqual</a>(str, <span class="stringliteral">"GpuAcc"</span>))</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <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>  }</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <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>  }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> }</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(&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> {</div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a637fea04314a9870c1dc4355c1bed429">armnn::StrEqual</a>(str, <span class="stringliteral">"CpuAcc"</span>))</div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  {</div> +<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <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>  }</div> +<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a637fea04314a9870c1dc4355c1bed429">armnn::StrEqual</a>(str, <span class="stringliteral">"CpuRef"</span>))</div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  {</div> +<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <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>  }</div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a637fea04314a9870c1dc4355c1bed429">armnn::StrEqual</a>(str, <span class="stringliteral">"GpuAcc"</span>))</div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  {</div> +<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <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>  }</div> +<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  {</div> +<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <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>  }</div> +<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> }</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> {</div> +<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <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>  {</div> +<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <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>  }</div> +<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">return</span> defaultValue;</div> +<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> }</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> {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <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>  {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <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>  }</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">return</span> defaultValue;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> }</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> {</div> +<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <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>  {</div> +<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="keywordflow">if</span> (optionsGroup.GetBackendId() == backend)</div> +<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  {</div> +<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i < optionsGroup.GetOptionCount(); i++)</div> +<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  {</div> +<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keyword">const</span> BackendOptions::BackendOption option = optionsGroup.GetOption(i);</div> +<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  f(option.GetName(), option.GetValue());</div> +<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div> +<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  }</div> +<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  }</div> +<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> }</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> {</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <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>  {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="keywordflow">if</span> (optionsGroup.GetBackendId() == backend)</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i < optionsGroup.GetOptionCount(); i++)</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keyword">const</span> BackendOptions::BackendOption option = optionsGroup.GetOption(i);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  f(option.GetName(), option.GetValue());</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  }</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> }</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> {</div> +<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <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>  {</div> +<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <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>  }</div> +<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">return</span> defaultValue;</div> +<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> }</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> {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <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>  {</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <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>  }</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">return</span> defaultValue;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> }</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> {</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">if</span> (value.IsInt())</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  {</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordtype">int</span> v = value.AsInt();</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">if</span> (v > <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(TuningLevel::Exhaustive) ||</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  v < <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(TuningLevel::None))</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  {</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) << <span class="stringliteral">"Invalid GpuAcc tuning level ("</span><< v << <span class="stringliteral">") selected. "</span></div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="stringliteral">"Using default("</span> << <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(defaultValue) << <span class="stringliteral">")"</span>;</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  } <span class="keywordflow">else</span></div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a><span class="keyword">></span>(v);</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  }</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  }</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">return</span> defaultValue;</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> }</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> {</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keywordflow">if</span> (value.IsInt())</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordtype">int</span> v = value.AsInt();</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">if</span> (v > static_cast<int>(TuningLevel::Exhaustive) ||</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  v < static_cast<int>(TuningLevel::None))</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) << <span class="stringliteral">"Invalid GpuAcc tuning level ("</span><< v << <span class="stringliteral">") selected. "</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="stringliteral">"Using default("</span> << <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(defaultValue) << <span class="stringliteral">")"</span>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  } <span class="keywordflow">else</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a><span class="keyword">></span>(v);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  }</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  }</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">return</span> defaultValue;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> }</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> {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(tensor, <span class="stringliteral">"Invalid input tensor"</span>);</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(permuteBuffer, <span class="stringliteral">"Invalid permute buffer"</span>);</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  TensorInfo tensorInfo = tensor->GetTensorInfo();</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keywordflow">if</span> (permutationVector.GetSize() > 0)</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  {</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  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>  <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>  tensor->GetConstTensor<<span class="keywordtype">void</span>>(), permuteBuffer,</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <a class="code" href="namespacearmnn.xhtml#aa02b9e06fb20fa3c13da0427e6ee5ab2">GetDataTypeSize</a>(tensorInfo.GetDataType()));</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  }</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  {</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  ::memcpy(permuteBuffer, tensor->GetConstTensor<<span class="keywordtype">void</span>>(), tensorInfo.GetNumBytes());</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  }</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  tensorInfo.SetConstant(<span class="keyword">true</span>);</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">return</span> ConstTensor(tensorInfo, permuteBuffer);</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> }</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> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(tensor, <span class="stringliteral">"Invalid input tensor"</span>);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(permuteBuffer, <span class="stringliteral">"Invalid permute buffer"</span>);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  TensorInfo tensorInfo = tensor->GetTensorInfo();</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keywordflow">if</span> (permutationVector.GetSize() > 0)</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  {</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  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>  <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>  tensor->GetConstTensor<<span class="keywordtype">void</span>>(), permuteBuffer,</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <a class="code" href="namespacearmnn.xhtml#aa02b9e06fb20fa3c13da0427e6ee5ab2">GetDataTypeSize</a>(tensorInfo.GetDataType()));</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  }</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  ::memcpy(permuteBuffer, tensor->GetConstTensor<<span class="keywordtype">void</span>>(), tensorInfo.GetNumBytes());</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  }</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  tensorInfo.SetConstant(<span class="keyword">true</span>);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">return</span> ConstTensor(tensorInfo, permuteBuffer);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> }</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 &dstShape, const armnn::PermutationVector &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 &srcShape, const armnn::PermutationVector &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> {</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  static_assert(std::is_pointer<DestType>::value,</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="stringliteral">"PolymorphicDowncast only works with pointer types."</span>);</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  </div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <a class="code" href="_polymorphic_downcast_8hpp.xhtml#a816fdb1ce84860c918a1915b3ea23459">ARMNN_POLYMORPHIC_CAST_CHECK</a>(<span class="keyword">dynamic_cast<</span>DestType<span class="keyword">></span>(value) == value);</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>DestType<span class="keyword">></span>(value);</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> }</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> {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  static_assert(std::is_pointer<DestType>::value,</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="stringliteral">"PolymorphicDowncast only works with pointer types."</span>);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <a class="code" href="_polymorphic_downcast_8hpp.xhtml#a816fdb1ce84860c918a1915b3ea23459">ARMNN_POLYMORPHIC_CAST_CHECK</a>(dynamic_cast<DestType>(value) == value);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>DestType<span class="keyword">></span>(value);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> }</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> {</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="_polymorphic_downcast_8hpp.xhtml#a816fdb1ce84860c918a1915b3ea23459">ARMNN_POLYMORPHIC_CAST_CHECK</a>(utility::DynamicPointerCast<DestType>(value)</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  == value);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">return</span> utility::StaticPointerCast<DestType>(value);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> }</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> {</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="_polymorphic_downcast_8hpp.xhtml#a816fdb1ce84860c918a1915b3ea23459">ARMNN_POLYMORPHIC_CAST_CHECK</a>(utility::DynamicPointerCast<DestType>(value)</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  == value);</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">return</span> utility::StaticPointerCast<DestType>(value);</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> }</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< IType >::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< IType >::Set()</a>.</p> +<div class="fragment"><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> {</div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <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>  <span class="keyword">auto</span> channelsIndex = dataLayout.GetChannelsIndex();</div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">auto</span> heightIndex = dataLayout.GetHeightIndex();</div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keyword">auto</span> widthIndex = dataLayout.GetWidthIndex();</div> +<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  </div> +<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> batchSize = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> channels = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> heightOutput = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> widthOutput = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> heightInput = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> widthInput = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padLeft = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padRight = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padTop = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padBottom = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> strideX = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> strideY = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> poolHeight = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> poolWidth = armnn::numeric_cast<int>(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>  </div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <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>  </div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  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>  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>  </div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <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>  <span class="comment">// the inner loop.</span></div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">if</span> (params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> != PaddingMethod::Exclude &&</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  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>  {</div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">"Unsupported padding type"</span>);</div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  </div> +<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keyword">const</span> std::vector<float> 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>  </div> +<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> n = 0; n < batchSize; n++)</div> +<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  {</div> +<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> c = 0; c < channels; c++)</div> +<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  {</div> +<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> yOutput = 0; yOutput < heightOutput; yOutput++)</div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  {</div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="comment">// Calculate values independent of the x axis</span></div> +<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordtype">int</span> hstart = (yOutput * strideY) - padTop;</div> +<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordtype">int</span> hend = hstart + poolHeight;</div> +<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <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>  <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>  hend = std::min(hend, heightInput + padBottom);</div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  </div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordtype">int</span> height = hend - hstart;</div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordtype">bool</span> hclamped = ClampRange(hstart, hend, heightInput);</div> +<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  </div> +<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> xOutput = 0; xOutput < widthOutput; xOutput++)</div> +<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  {</div> +<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordtype">int</span> wstart = (xOutput * strideX) - padLeft;</div> +<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keywordtype">int</span> wend = wstart + poolWidth;</div> +<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  </div> +<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <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>  <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>  wend = std::min(wend, widthInput + padRight);</div> +<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  </div> +<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordtype">float</span> result = defaultInitializer;</div> +<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordtype">float</span> poolAreaSize = armnn::numeric_cast<float>(height * (wend - wstart));</div> +<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  </div> +<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <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>  <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>  <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>  <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>  <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>  <span class="keywordflow">if</span> (OnPaddingOnly(hstart, hend, heightInput) ||</div> +<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  OnPaddingOnly(wstart, wend, widthInput))</div> +<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  {</div> +<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  result = 0.0f;</div> +<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  </div> +<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordtype">int</span> outputIndex;</div> +<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  </div> +<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keywordflow">if</span>(dataLayout.GetDataLayout() == DataLayout::NHWC)</div> +<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  {</div> +<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  outputIndex = n * heightOutput * widthOutput * channels +</div> +<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  yOutput * widthOutput * channels +</div> +<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  xOutput * channels +</div> +<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  c;</div> +<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  }</div> +<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  {</div> +<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  outputIndex = n * heightOutput * widthOutput * channels +</div> +<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  c * heightOutput * widthOutput +</div> +<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  yOutput * widthOutput +</div> +<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  xOutput;</div> +<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  }</div> +<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  </div> +<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  rOutputEncoder[<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(outputIndex)];</div> +<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  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>  <span class="keywordflow">continue</span>;</div> +<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div> +<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  </div> +<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordtype">bool</span> clamped = hclamped |= ClampRange(wstart, wend, widthInput);</div> +<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  </div> +<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">if</span> (clamped && 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>  {</div> +<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <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>  <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>  poolAreaSize = armnn::numeric_cast<float>((hend - hstart) * (wend - wstart));</div> +<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  }</div> +<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  </div> +<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> yInput = hstart; yInput < hend; yInput++)</div> +<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  {</div> +<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> xInput = wstart; xInput < wend; xInput++)</div> +<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  {</div> +<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  </div> +<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keywordtype">int</span> inputIndex;</div> +<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">if</span>(dataLayout.GetDataLayout() == DataLayout::NHWC)</div> +<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  {</div> +<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  inputIndex = n * heightInput * widthInput * channels +</div> +<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  yInput * widthInput * channels +</div> +<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  xInput * channels +</div> +<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  c;</div> +<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  </div> +<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  }</div> +<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  {</div> +<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  inputIndex = n * heightInput * widthInput * channels +</div> +<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  c * heightInput * widthInput +</div> +<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  yInput * widthInput +</div> +<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  xInput;</div> +<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  }</div> +<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  </div> +<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  accumulate(result, decodedInputVec[<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(inputIndex)]);</div> +<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  }</div> +<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  }</div> +<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  </div> +<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  execute(result, poolAreaSize);</div> +<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  </div> +<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordtype">int</span> outputIndex;</div> +<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  </div> +<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordflow">if</span>(dataLayout.GetDataLayout() == DataLayout::NHWC)</div> +<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  {</div> +<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  outputIndex = n * heightOutput * widthOutput * channels +</div> +<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  yOutput * widthOutput * channels +</div> +<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  xOutput * channels +</div> +<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  c;</div> +<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  }</div> +<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  {</div> +<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  outputIndex = n * heightOutput * widthOutput * channels +</div> +<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  c * heightOutput * widthOutput +</div> +<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  yOutput * widthOutput +</div> +<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  xOutput;</div> +<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  }</div> +<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  </div> +<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  rOutputEncoder[<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(outputIndex)];</div> +<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  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>  }</div> +<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  }</div> +<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  }</div> +<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  }</div> +<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> }</div> +</div><!-- fragment --> +<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder< IType >::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< IType >::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> {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <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>  <span class="keyword">auto</span> channelsIndex = dataLayout.GetChannelsIndex();</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">auto</span> heightIndex = dataLayout.GetHeightIndex();</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keyword">auto</span> widthIndex = dataLayout.GetWidthIndex();</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> batchSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> channels = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> heightOutput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> widthOutput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> heightInput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> widthInput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padLeft = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padRight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padTop = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padBottom = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> strideX = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> strideY = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> poolHeight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> poolWidth = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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> </div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <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> </div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  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>  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> </div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <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>  <span class="comment">// the inner loop.</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">if</span> (params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> != PaddingMethod::Exclude &&</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  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>  {</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">"Unsupported padding type"</span>);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keyword">const</span> std::vector<float> 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> </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> n = 0; n < batchSize; n++)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> c = 0; c < channels; c++)</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> yOutput = 0; yOutput < heightOutput; yOutput++)</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="comment">// Calculate values independent of the x axis</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordtype">int</span> hstart = (yOutput * strideY) - padTop;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordtype">int</span> hend = hstart + poolHeight;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <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>  <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>  hend = std::min(hend, heightInput + padBottom);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordtype">int</span> height = hend - hstart;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordtype">bool</span> hclamped = ClampRange(hstart, hend, heightInput);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> xOutput = 0; xOutput < widthOutput; xOutput++)</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordtype">int</span> wstart = (xOutput * strideX) - padLeft;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keywordtype">int</span> wend = wstart + poolWidth;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <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>  <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>  wend = std::min(wend, widthInput + padRight);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordtype">float</span> result = defaultInitializer;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordtype">float</span> poolAreaSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">float</span>>(height * (wend - wstart));</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <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>  <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>  <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>  <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>  <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>  <span class="keywordflow">if</span> (OnPaddingOnly(hstart, hend, heightInput) ||</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  OnPaddingOnly(wstart, wend, widthInput))</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  result = 0.0f;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordtype">int</span> outputIndex;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keywordflow">if</span>(dataLayout.GetDataLayout() == DataLayout::NHWC)</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  {</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  outputIndex = n * heightOutput * widthOutput * channels +</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  yOutput * widthOutput * channels +</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  xOutput * channels +</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  c;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  }</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  outputIndex = n * heightOutput * widthOutput * channels +</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  c * heightOutput * widthOutput +</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  yOutput * widthOutput +</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  xOutput;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  }</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  rOutputEncoder[<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(outputIndex)];</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  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>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordtype">bool</span> clamped = hclamped |= ClampRange(wstart, wend, widthInput);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">if</span> (clamped && 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>  {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <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>  <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>  poolAreaSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">float</span>>((hend - hstart) * (wend - wstart));</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  }</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> yInput = hstart; yInput < hend; yInput++)</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  {</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> xInput = wstart; xInput < wend; xInput++)</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keywordtype">int</span> inputIndex;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">if</span>(dataLayout.GetDataLayout() == DataLayout::NHWC)</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  inputIndex = n * heightInput * widthInput * channels +</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  yInput * widthInput * channels +</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  xInput * channels +</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  c;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  {</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  inputIndex = n * heightInput * widthInput * channels +</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  c * heightInput * widthInput +</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  yInput * widthInput +</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  xInput;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  }</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  accumulate(result, decodedInputVec[static_cast<unsigned int>(inputIndex)]);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  execute(result, poolAreaSize);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordtype">int</span> outputIndex;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordflow">if</span>(dataLayout.GetDataLayout() == DataLayout::NHWC)</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  {</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  outputIndex = n * heightOutput * widthOutput * channels +</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  yOutput * widthOutput * channels +</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  xOutput * channels +</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  c;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  }</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  outputIndex = n * heightOutput * widthOutput * channels +</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  c * heightOutput * widthOutput +</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  yOutput * widthOutput +</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  xOutput;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  }</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  rOutputEncoder[<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(outputIndex)];</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  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>  }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  }</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  }</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> }</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 & 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< float > DecodeTensor(const TensorShape &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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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< IType >::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< IType >::Set()</a>.</p> +<div class="fragment"><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> {</div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <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>  </div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keyword">auto</span> channelsIndex = dataLayout.GetChannelsIndex();</div> +<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  </div> +<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">auto</span> depthIndex = dataLayout.GetDepthIndex();</div> +<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">auto</span> heightIndex = dataLayout.GetHeightIndex();</div> +<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keyword">auto</span> widthIndex = dataLayout.GetWidthIndex();</div> +<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  </div> +<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> batchSize = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> channels = armnn::numeric_cast<int>(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>  </div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> depthOutput = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> heightOutput = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> widthOutput = armnn::numeric_cast<int>(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>  </div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> depthInput = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> heightInput = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> widthInput = armnn::numeric_cast<int>(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>  </div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> padLeft = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padRight = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padTop = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padBottom = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padFront = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padBack = armnn::numeric_cast<int>(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>  </div> +<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> strideX = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> strideY = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> strideZ = armnn::numeric_cast<int>(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>  </div> +<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> poolHeight = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> poolWidth = armnn::numeric_cast<int>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> poolDepth = armnn::numeric_cast<int>(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>  </div> +<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <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>  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>  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>  </div> +<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <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>  <span class="comment">// the inner loop.</span></div> +<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">if</span> (params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> != PaddingMethod::Exclude &&</div> +<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  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>  {</div> +<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">"Unsupported padding type"</span>);</div> +<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  }</div> +<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  </div> +<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keyword">const</span> std::vector<float> 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>  </div> +<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> n = 0; n < batchSize; n++)</div> +<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  {</div> +<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> c = 0; c < channels; c++)</div> +<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  {</div> +<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> zOutput = 0; zOutput < depthOutput; zOutput++)</div> +<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  {</div> +<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <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>  <span class="keywordtype">int</span> dstart = (zOutput * strideZ) - padFront;</div> +<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordtype">int</span> dend = dstart + poolDepth;</div> +<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <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>  <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>  dend = std::min(dend, depthInput + padBack);</div> +<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  </div> +<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordtype">int</span> depth = dend - dstart;</div> +<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordtype">bool</span> dclamped = ClampRange(dstart, dend, depthInput);</div> +<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordtype">int</span> depthClamped = dend - dstart;</div> +<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  </div> +<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> yOutput = 0; yOutput < heightOutput; yOutput++)</div> +<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  {</div> +<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordtype">int</span> hstart = (yOutput * strideY) - padTop;</div> +<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordtype">int</span> hend = hstart + poolHeight;</div> +<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <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>  <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>  hend = std::min(hend, heightInput + padBottom);</div> +<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  </div> +<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordtype">int</span> height = hend - hstart;</div> +<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordtype">bool</span> hclamped = ClampRange(hstart, hend, heightInput);</div> +<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordtype">int</span> heightClamped = hend - hstart;</div> +<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  </div> +<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> xOutput = 0; xOutput < widthOutput; xOutput++)</div> +<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  {</div> +<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keywordtype">int</span> wstart = (xOutput * strideX) - padLeft;</div> +<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordtype">int</span> wend = wstart + poolWidth;</div> +<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <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>  <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>  wend = std::min(wend, widthInput + padRight);</div> +<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  </div> +<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordtype">int</span> width = wend - wstart;</div> +<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordtype">bool</span> wclamped = ClampRange(wstart, wend, widthInput);</div> +<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keywordtype">int</span> widthClamped = wend - wstart;</div> +<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  </div> +<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keywordtype">float</span> result = defaultInitializer;</div> +<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordtype">float</span> poolAreaSize = armnn::numeric_cast<float>(depth * height * width);</div> +<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  </div> +<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <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>  <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>  <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>  <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>  <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>  <span class="keywordflow">if</span> (OnPaddingOnly(dstart, dend, depthInput) ||</div> +<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  OnPaddingOnly(hstart, hend, heightInput) ||</div> +<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  OnPaddingOnly(wstart, wend, widthInput))</div> +<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  {</div> +<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  result = 0.0f;</div> +<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  </div> +<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordtype">int</span> outputIndex = CalculateIndex(channels, depthOutput, heightOutput, widthOutput,</div> +<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  n, c, zOutput, yOutput, xOutput, dataLayout);</div> +<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  </div> +<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  rOutputEncoder[<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(outputIndex)];</div> +<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  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>  </div> +<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">continue</span>;</div> +<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  }</div> +<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  </div> +<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordtype">bool</span> clamped = (dclamped | hclamped | wclamped);</div> +<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  </div> +<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">if</span> (clamped && 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>  {</div> +<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <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>  <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>  poolAreaSize = armnn::numeric_cast<float>(depthClamped * heightClamped * widthClamped);</div> +<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  }</div> +<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  </div> +<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> zInput = dstart; zInput < dend; zInput++)</div> +<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  {</div> +<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> yInput = hstart; yInput < hend; yInput++)</div> +<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  {</div> +<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> xInput = wstart; xInput < wend; xInput++)</div> +<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  {</div> +<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  </div> +<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordtype">int</span> inputIndex = CalculateIndex(channels, depthInput, heightInput, widthInput,</div> +<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  n, c, zInput, yInput, xInput, dataLayout);</div> +<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  </div> +<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  accumulate(result, decodedInputVec[<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(inputIndex)]);</div> +<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  }</div> +<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  }</div> +<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  }</div> +<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  </div> +<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  execute(result, poolAreaSize);</div> +<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  </div> +<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="keywordtype">int</span> outputIndex = CalculateIndex(channels, depthOutput, heightOutput, widthOutput,</div> +<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  n, c, zOutput, yOutput, xOutput, dataLayout);</div> +<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  </div> +<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  rOutputEncoder[<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(outputIndex)];</div> +<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  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>  }</div> +<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  }</div> +<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  }</div> +<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  }</div> +<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  }</div> +<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> }</div> +</div><!-- fragment --> +<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder< IType >::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< IType >::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> {</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <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> </div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keyword">auto</span> channelsIndex = dataLayout.GetChannelsIndex();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">auto</span> depthIndex = dataLayout.GetDepthIndex();</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">auto</span> heightIndex = dataLayout.GetHeightIndex();</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keyword">auto</span> widthIndex = dataLayout.GetWidthIndex();</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> batchSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> channels = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> depthOutput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> heightOutput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> widthOutput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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> </div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> depthInput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> heightInput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> widthInput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> padLeft = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padRight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padTop = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padBottom = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padFront = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> padBack = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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> </div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> strideX = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> strideY = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> strideZ = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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> </div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> poolHeight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> poolWidth = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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>  <span class="keyword">const</span> <span class="keywordtype">int</span> poolDepth = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(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> </div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <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>  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>  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> </div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <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>  <span class="comment">// the inner loop.</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">if</span> (params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> != PaddingMethod::Exclude &&</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  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>  {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">"Unsupported padding type"</span>);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keyword">const</span> std::vector<float> 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> </div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> n = 0; n < batchSize; n++)</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  {</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> c = 0; c < channels; c++)</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> zOutput = 0; zOutput < depthOutput; zOutput++)</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <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>  <span class="keywordtype">int</span> dstart = (zOutput * strideZ) - padFront;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordtype">int</span> dend = dstart + poolDepth;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <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>  <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>  dend = std::min(dend, depthInput + padBack);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordtype">int</span> depth = dend - dstart;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordtype">bool</span> dclamped = ClampRange(dstart, dend, depthInput);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordtype">int</span> depthClamped = dend - dstart;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> yOutput = 0; yOutput < heightOutput; yOutput++)</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  {</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordtype">int</span> hstart = (yOutput * strideY) - padTop;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordtype">int</span> hend = hstart + poolHeight;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <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>  <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>  hend = std::min(hend, heightInput + padBottom);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordtype">int</span> height = hend - hstart;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordtype">bool</span> hclamped = ClampRange(hstart, hend, heightInput);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordtype">int</span> heightClamped = hend - hstart;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> xOutput = 0; xOutput < widthOutput; xOutput++)</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  {</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keywordtype">int</span> wstart = (xOutput * strideX) - padLeft;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordtype">int</span> wend = wstart + poolWidth;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <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>  <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>  wend = std::min(wend, widthInput + padRight);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordtype">int</span> width = wend - wstart;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordtype">bool</span> wclamped = ClampRange(wstart, wend, widthInput);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keywordtype">int</span> widthClamped = wend - wstart;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keywordtype">float</span> result = defaultInitializer;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordtype">float</span> poolAreaSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">float</span>>(depth * height * width);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <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>  <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>  <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>  <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>  <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>  <span class="keywordflow">if</span> (OnPaddingOnly(dstart, dend, depthInput) ||</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  OnPaddingOnly(hstart, hend, heightInput) ||</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  OnPaddingOnly(wstart, wend, widthInput))</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  {</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  result = 0.0f;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordtype">int</span> outputIndex = CalculateIndex(channels, depthOutput, heightOutput, widthOutput,</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  n, c, zOutput, yOutput, xOutput, dataLayout);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  rOutputEncoder[<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(outputIndex)];</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  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> </div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  }</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordtype">bool</span> clamped = (dclamped | hclamped | wclamped);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">if</span> (clamped && 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>  {</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <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>  <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>  poolAreaSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">float</span>>(depthClamped * heightClamped * widthClamped);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  }</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> zInput = dstart; zInput < dend; zInput++)</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> yInput = hstart; yInput < hend; yInput++)</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> xInput = wstart; xInput < wend; xInput++)</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordtype">int</span> inputIndex = CalculateIndex(channels, depthInput, heightInput, widthInput,</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  n, c, zInput, yInput, xInput, dataLayout);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  accumulate(result, decodedInputVec[static_cast<unsigned int>(inputIndex)]);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  execute(result, poolAreaSize);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="keywordtype">int</span> outputIndex = CalculateIndex(channels, depthOutput, heightOutput, widthOutput,</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  n, c, zOutput, yOutput, xOutput, dataLayout);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  rOutputEncoder[<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(outputIndex)];</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  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>  }</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  }</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  }</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  }</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  }</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> }</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 & 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< float > DecodeTensor(const TensorShape &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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">const</span> TensorShape& inputShape = inputInfo.GetShape();</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">const</span> TensorShape& alphaShape = alphaInfo.GetShape();</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">const</span> TensorShape& outputShape = outputInfo.GetShape();</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="comment">// PReLU activation: f(x) = alpha * x for x < 0, f(x) = x for x >= 0</span></div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  {</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> x < 0 ? alpha * x : x;</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  };</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  </div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  BroadcastLoop(inputShape, alphaShape, outputShape).Unroll(prelu, 0, inputData, alphaData, outputData);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</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> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">const</span> TensorShape& inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">const</span> TensorShape& alphaShape = alphaInfo.GetShape();</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">const</span> TensorShape& outputShape = outputInfo.GetShape();</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="comment">// PReLU activation: f(x) = alpha * x for x < 0, f(x) = x for x >= 0</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  {</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> x < 0 ? alpha * x : x;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  };</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  BroadcastLoop(inputShape, alphaShape, outputShape).Unroll(prelu, 0, inputData, alphaData, outputData);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</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> {</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <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>  <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>  <span class="keyword">const</span> TensorShape& inputShape = inputInfo.GetShape();</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  std::vector<unsigned int> strides(numDims, 0);</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  strides[numDims - 1] = inputShape[numDims - 1];</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  </div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 2; i <= numDims; i++)</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  {</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  strides[numDims - i] = strides[numDims - i + 1] * inputShape[numDims - i];</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  }</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  os << <span class="stringliteral">"{ "</span>;</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  os << <span class="stringliteral">"\"layerGuid\": "</span> << guid << <span class="stringliteral">", "</span>;</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  os << <span class="stringliteral">"\"layerName\": \""</span> << layerName << <span class="stringliteral">"\", "</span>;</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  os << <span class="stringliteral">"\"outputSlot\": "</span> << slotIndex << <span class="stringliteral">", "</span>;</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  os << <span class="stringliteral">"\"shape\": "</span>;</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  </div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  os << <span class="stringliteral">"["</span>;</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numDims; i++)</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  {</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  os << inputShape[i];</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">if</span> (i != numDims - 1)</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  {</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  os << <span class="stringliteral">", "</span>;</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  os << <span class="stringliteral">"], "</span>;</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  </div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  os << <span class="stringliteral">"\"min\": "</span></div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  << <span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(*std::min_element(inputData, inputData + numElements)) << <span class="stringliteral">", "</span>;</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  os << <span class="stringliteral">"\"max\": "</span></div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  << <span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(*std::max_element(inputData, inputData + numElements)) << <span class="stringliteral">", "</span>;</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  </div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  os << <span class="stringliteral">"\"data\": "</span>;</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  </div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numElements; i++)</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j < numDims; j++)</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  {</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">if</span> (i % strides[j] == 0)</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  {</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  os << <span class="stringliteral">"["</span>;</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  }</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  }</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  </div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  os << static_cast<float>(inputData[i]);</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  </div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j < numDims; j++)</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">if</span> ((i + 1) % strides[j] == 0)</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  os << <span class="stringliteral">"]"</span>;</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  }</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  </div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">if</span> (i != numElements - 1)</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  {</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  os << <span class="stringliteral">", "</span>;</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  </div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  os << <span class="stringliteral">" }"</span> << std::endl;</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> }</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> {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <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>  <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>  <span class="keyword">const</span> TensorShape& inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  std::vector<unsigned int> strides(numDims, 0);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  strides[numDims - 1] = inputShape[numDims - 1];</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 2; i <= numDims; i++)</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  strides[numDims - i] = strides[numDims - i + 1] * inputShape[numDims - i];</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  }</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  os << <span class="stringliteral">"{ "</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  os << <span class="stringliteral">"\"layerGuid\": "</span> << guid << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  os << <span class="stringliteral">"\"layerName\": \""</span> << layerName << <span class="stringliteral">"\", "</span>;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  os << <span class="stringliteral">"\"outputSlot\": "</span> << slotIndex << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  os << <span class="stringliteral">"\"shape\": "</span>;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  os << <span class="stringliteral">"["</span>;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numDims; i++)</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  os << inputShape[i];</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">if</span> (i != numDims - 1)</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  {</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  os << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  os << <span class="stringliteral">"], "</span>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  os << <span class="stringliteral">"\"min\": "</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  << <span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(*std::min_element(inputData, inputData + numElements)) << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  os << <span class="stringliteral">"\"max\": "</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  << <span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(*std::max_element(inputData, inputData + numElements)) << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  os << <span class="stringliteral">"\"data\": "</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < numElements; i++)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j < numDims; j++)</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">if</span> (i % strides[j] == 0)</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  os << <span class="stringliteral">"["</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  }</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  os << static_cast<float>(inputData[i]);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j < numDims; j++)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">if</span> ((i + 1) % strides[j] == 0)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  os << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">if</span> (i != numElements - 1)</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  os << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  os << <span class="stringliteral">" }"</span> << std::endl;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> }</div></div><!-- fragment --> + </div> </div> <a id="a2386397752b62040e3b0647e8bc4dc70"></a> @@ -27675,40 +37766,44 @@ Variables</h2></td></tr> </tr> </table> </div><div class="memdoc"> -<p>< Profiler used </p> +<p>< 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> {</div> +<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  IProfiler* profiler(ProfilerManager::GetInstance().GetProfiler()); <span class="comment">///< Profiler used</span></div> +<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment"></span> <span class="keywordflow">if</span> (profiler && profiler->IsProfilingEnabled())</div> +<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  profiler->AddLayerDetails(name, desc, infos, guid);</div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  }</div> +<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> }</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> {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  IProfiler* profiler(ProfilerManager::GetInstance().GetProfiler()); <span class="comment">///< Profiler used</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment"></span> <span class="keywordflow">if</span> (profiler && profiler->IsProfilingEnabled())</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  profiler->AddLayerDetails(name, desc, infos, guid);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  }</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> }</div></div><!-- fragment --> + </div> </div> -<a id="abbbe4a59b72fba606f21e7c24dcbd8c0"></a> -<h2 class="memtitle"><span class="permalink"><a href="#abbbe4a59b72fba606f21e7c24dcbd8c0">◆ </a></span>Quantize() <span class="overload">[1/2]</span></h2> +<a id="ad773a034fb9983e15f3094b4c5c7c30c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad773a034fb9983e15f3094b4c5c7c30c">◆ </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< int32_t > </td> <td>(</td> - <td class="paramtype">uint8_t * </td> - <td class="paramname"><em>quant</em>, </td> + <td class="paramtype">float </td> + <td class="paramname"><em>value</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> - <td class="paramtype">const float * </td> - <td class="paramname"><em>dequant</em>, </td> + <td class="paramtype">float </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> & </td> - <td class="paramname"><em>info</em> </td> + <td class="paramtype">int32_t </td> + <td class="paramname"><em>offset</em> </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> {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements(); i++)</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  quant[i] = armnn::Quantize<uint8_t>(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>  }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> }</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> {</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  static_assert(IsQuantizedType<QuantizedType>(), <span class="stringliteral">"Not an integer type."</span>);</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  constexpr QuantizedType max = std::numeric_limits<QuantizedType>::max();</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  constexpr QuantizedType min = std::numeric_limits<QuantizedType>::lowest();</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  <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>  </div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordtype">float</span> clampedValue = std::min(std::max((<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(offset) + <span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(round(value/scale))),</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(min)), <span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(max));</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">auto</span> quantizedBits = <span class="keyword">static_cast<</span>QuantizedType<span class="keyword">></span>(clampedValue);</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">return</span> quantizedBits;</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> }</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">◆ </a></span>Quantize() <span class="overload">[2/2]</span></h2> +<a id="abbbe4a59b72fba606f21e7c24dcbd8c0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abbbe4a59b72fba606f21e7c24dcbd8c0">◆ </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< int32_t > </td> + <td class="memname">void armnn::Quantize </td> <td>(</td> - <td class="paramtype">float </td> - <td class="paramname"><em>value</em>, </td> + <td class="paramtype">uint8_t * </td> + <td class="paramname"><em>quant</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> - <td class="paramtype">float </td> - <td class="paramname"><em>scale</em>, </td> + <td class="paramtype">const float * </td> + <td class="paramname"><em>dequant</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> - <td class="paramtype">int32_t </td> - <td class="paramname"><em>offset</em> </td> + <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> & </td> + <td class="paramname"><em>info</em> </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> {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  static_assert(IsQuantizedType<QuantizedType>(), <span class="stringliteral">"Not an integer type."</span>);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  constexpr QuantizedType max = std::numeric_limits<QuantizedType>::max();</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  constexpr QuantizedType min = std::numeric_limits<QuantizedType>::lowest();</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  <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> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordtype">float</span> clampedValue = std::min(std::max((static_cast<float>(offset) + static_cast<float>(round(value/scale))),</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  static_cast<float>(min)), static_cast<float>(max));</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">auto</span> quantizedBits = <span class="keyword">static_cast<</span>QuantizedType<span class="keyword">></span>(clampedValue);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">return</span> quantizedBits;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> }</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> {</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements(); i++)</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  {</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  quant[i] = armnn::Quantize<uint8_t>(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>  }</div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> }</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> {</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="comment">// Initialise temp output</span></div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  std::vector<float> tempOut(numOutputs);</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">switch</span>(reduceOperation)</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  {</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">case</span> ReduceOperation::Mean:</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">case</span> ReduceOperation::Sum:</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  std::fill(tempOut.begin(), tempOut.end(), 0.0f);</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">case</span> ReduceOperation::Prod:</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  std::fill(tempOut.begin(), tempOut.end(), 1.0f);</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">case</span> ReduceOperation::Max:</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  std::fill(tempOut.begin(), tempOut.end(), -1 * std::numeric_limits<float>::max());</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">case</span> ReduceOperation::Min:</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  std::fill(tempOut.begin(), tempOut.end(), std::numeric_limits<float>::max());</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">"Unknown reduce method: "</span> +</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  std::to_string(<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(reduceOperation)));</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  }</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  </div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="comment">// Initialise temp index</span></div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  std::vector<unsigned int> tempIndex(inputNumDims, 0);</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  </div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  std::vector<unsigned int> resolvedAxis = axis;</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">if</span> (resolvedAxis.empty())</div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  {</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx < inputNumDims; ++idx)</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  {</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  resolvedAxis.push_back(idx);</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  }</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">auto</span> numResolvedAxis = armnn::numeric_cast<unsigned int>(resolvedAxis.size());</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  </div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <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>  <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>  {</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <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>  <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>  numResolvedAxis, resolvedAxis);</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  input[inputOffset];</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <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>  <span class="keywordflow">switch</span>(reduceOperation)</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  {</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">case</span> ReduceOperation::Mean:</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">case</span> ReduceOperation::Sum:</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  tempOut[outputOffset] += inputValue;</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">case</span> ReduceOperation::Prod:</div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  tempOut[outputOffset] *= inputValue;</div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">case</span> ReduceOperation::Max:</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">if</span> (inputValue > tempOut[outputOffset])</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  {</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  tempOut[outputOffset] = inputValue;</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  }</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">case</span> ReduceOperation::Min:</div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">if</span> (inputValue < tempOut[outputOffset])</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  {</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  tempOut[outputOffset] = inputValue;</div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">"Unknown reduce method: "</span> +</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  std::to_string(<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(reduceOperation)));</div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  </div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <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>  <span class="keywordtype">size_t</span> numElementsInAxis = 1;</div> +<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx < numResolvedAxis; ++idx)</div> +<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  {</div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <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>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(armnn::numeric_cast<float>(current) <</div> +<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  (std::numeric_limits<float>::max() / armnn::numeric_cast<float>(numElementsInAxis)));</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  numElementsInAxis *= current;</div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  }</div> +<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  </div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx < numOutputs; ++idx)</div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  {</div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  output[idx];</div> +<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">if</span> (reduceOperation == ReduceOperation::Mean)</div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  {</div> +<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">if</span> (numElementsInAxis > 0)</div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  {</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  output.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(tempOut[idx] / armnn::numeric_cast<float>(numElementsInAxis));</div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  }</div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  {</div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  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>  }</div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  }</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</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< IType >::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< IType >::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< IType >::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< IType >::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> {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <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>  <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>  <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> </div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="comment">// Initialise temp output</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  std::vector<float> tempOut(numOutputs);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">switch</span>(reduceOperation)</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  {</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">case</span> ReduceOperation::Mean:</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">case</span> ReduceOperation::Sum:</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  std::fill(tempOut.begin(), tempOut.end(), 0.0f);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">case</span> ReduceOperation::Prod:</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  std::fill(tempOut.begin(), tempOut.end(), 1.0f);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">case</span> ReduceOperation::Max:</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  std::fill(tempOut.begin(), tempOut.end(), -1 * std::numeric_limits<float>::max());</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">case</span> ReduceOperation::Min:</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  std::fill(tempOut.begin(), tempOut.end(), std::numeric_limits<float>::max());</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">"Unknown reduce method: "</span> +</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  std::to_string(static_cast<int>(reduceOperation)));</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="comment">// Initialise temp index</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  std::vector<unsigned int> tempIndex(inputNumDims, 0);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  std::vector<unsigned int> resolvedAxis = axis;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">if</span> (resolvedAxis.empty())</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  {</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx < inputNumDims; ++idx)</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  resolvedAxis.push_back(idx);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">auto</span> numResolvedAxis = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>>(resolvedAxis.size());</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <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>  <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>  {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <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>  <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>  numResolvedAxis, resolvedAxis);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  input[inputOffset];</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <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>  <span class="keywordflow">switch</span>(reduceOperation)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">case</span> ReduceOperation::Mean:</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">case</span> ReduceOperation::Sum:</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  tempOut[outputOffset] += inputValue;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">case</span> ReduceOperation::Prod:</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  tempOut[outputOffset] *= inputValue;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">case</span> ReduceOperation::Max:</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">if</span> (inputValue > tempOut[outputOffset])</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  tempOut[outputOffset] = inputValue;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">case</span> ReduceOperation::Min:</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">if</span> (inputValue < tempOut[outputOffset])</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  tempOut[outputOffset] = inputValue;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">"Unknown reduce method: "</span> +</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  std::to_string(static_cast<int>(reduceOperation)));</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <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>  <span class="keywordtype">size_t</span> numElementsInAxis = 1;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx < numResolvedAxis; ++idx)</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <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>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(armnn::numeric_cast<float>(current) <</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  (std::numeric_limits<float>::max() / armnn::numeric_cast<float>(numElementsInAxis)));</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  numElementsInAxis *= current;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx < numOutputs; ++idx)</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  output[idx];</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">if</span> (reduceOperation == ReduceOperation::Mean)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">if</span> (numElementsInAxis > 0)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  output.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(tempOut[idx] / armnn::numeric_cast<float>(numElementsInAxis));</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  {</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  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>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  }</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</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 &dims, std::vector< unsigned int > &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 &dims, std::vector< unsigned int > &index, const unsigned int numAxis, const std::vector< unsigned int > &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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx < numDims; ++idx)</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  {</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordtype">bool</span> isAxis = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">if</span> (!axis.empty())</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axisIdx = 0; axisIdx < numAxis; ++axisIdx)</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  {</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">if</span> (idx == axis[axisIdx])</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  {</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  isAxis = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  }</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  }</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  }</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">if</span> (!isAxis)</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  offset = offset * dims[idx] + index[idx];</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  }</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> offset;</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> }</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> {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx < numDims; ++idx)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordtype">bool</span> isAxis = <span class="keyword">false</span>;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">if</span> (!axis.empty())</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axisIdx = 0; axisIdx < numAxis; ++axisIdx)</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  {</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">if</span> (idx == axis[axisIdx])</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  isAxis = <span class="keyword">true</span>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">if</span> (!isAxis)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  offset = offset * dims[idx] + index[idx];</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> offset;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> }</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> { <span class="keywordflow">return</span> <span class="stringliteral">"CpuRef"</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> { <span class="keywordflow">return</span> <span class="stringliteral">"CpuRef"</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> { <span class="keywordflow">return</span> <span class="stringliteral">"Arm/Ref/TensorHandleFactory"</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> { <span class="keywordflow">return</span> <span class="stringliteral">"Arm/Ref/TensorHandleFactory"</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< MemoryType >::GetInfo()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00427">TensorInfo::GetNumBytes()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00297">BaseTensor< MemoryType >::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> {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>* weight = <span class="keyword">static_cast<</span><a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>*<span class="keyword">></span>(permuteBuffer);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">const</span> TensorShape& weightShape = weightHandle.GetShape();</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> multiplier;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> height;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">switch</span> (dataLayout)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <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>  height = weightShape[0];</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  width = weightShape[1];</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  inputChannels = weightShape[2];</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  multiplier = weightShape[3];</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <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>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  height = weightShape[2];</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  width = weightShape[3];</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  inputChannels = weightShape[1];</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  multiplier = weightShape[0];</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  std::vector<DataType> weightAclOrder(height*width*inputChannels*multiplier);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> destinationWeightsChannel;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <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>  <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>  <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> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> originWeightsChannel = 0; originWeightsChannel < totalChannels; originWeightsChannel++)</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  {</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  inputChannel = originWeightsChannel % inputChannels;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  destinationWeightsChannel = (originWeightsChannel - inputChannel) / inputChannels + multiplier * inputChannel;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < channelSize; i++)</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  weightAclOrder[i + destinationWeightsChannel * channelSize] =</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  weight[i + originWeightsChannel * channelSize];</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  ::memcpy(permuteBuffer, weightAclOrder.data(), weightHandle.GetInfo().GetNumBytes());</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">return</span> ConstTensor(weightHandle.GetInfo(), permuteBuffer);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> }</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> {</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>* weight = <span class="keyword">static_cast<</span><a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>*<span class="keyword">></span>(permuteBuffer);</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">const</span> TensorShape& weightShape = weightHandle.GetShape();</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> multiplier;</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> height;</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width;</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels;</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">switch</span> (dataLayout)</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <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>  height = weightShape[0];</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  width = weightShape[1];</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  inputChannels = weightShape[2];</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  multiplier = weightShape[3];</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <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>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  height = weightShape[2];</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  width = weightShape[3];</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  inputChannels = weightShape[1];</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  multiplier = weightShape[0];</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  </div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  std::vector<DataType> weightAclOrder(height*width*inputChannels*multiplier);</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> destinationWeightsChannel;</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> originWeightsChannel = 0; originWeightsChannel < totalChannels; originWeightsChannel++)</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  {</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  inputChannel = originWeightsChannel % inputChannels;</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  destinationWeightsChannel = (originWeightsChannel - inputChannel) / inputChannels + multiplier * inputChannel;</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  </div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < channelSize; i++)</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  {</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  weightAclOrder[i + destinationWeightsChannel * channelSize] =</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  weight[i + originWeightsChannel * channelSize];</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  }</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  </div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  ::memcpy(permuteBuffer, weightAclOrder.data(), weightHandle.GetInfo().GetNumBytes());</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">return</span> ConstTensor(weightHandle.GetInfo(), permuteBuffer);</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> }</div> </div><!-- fragment --> +<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00295">BaseTensor< MemoryType >::GetInfo()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00427">TensorInfo::GetNumBytes()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00297">BaseTensor< MemoryType >::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">◆ </a></span>ReplaceLayers()</h2> +<a id="abecdb9c231b9ced02bec27a1ca54184f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abecdb9c231b9ced02bec27a1ca54184f">◆ </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< <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> *> & </td> + <td class="paramtype">std::vector< <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> * > & </td> <td class="paramname"><em>layers</em> </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> {</div> +<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  std::list<IConnectableLayer*> replacementLayers(layers.begin(), layers.end());</div> +<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  </div> +<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  SubgraphView substitutionSubgraph(baseLayer);</div> +<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  SubgraphView replacementSubgraph(std::move(replacementLayers),</div> +<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  CreateIInputsFrom({replacementLayers.front()}),</div> +<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  CreateIOutputsFrom({replacementLayers.back()}));</div> +<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  </div> +<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</div> +<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> }</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> {</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  std::list<IConnectableLayer*> replacementLayers(layers.begin(), layers.end());</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  SubgraphView substitutionSubgraph(baseLayer);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  SubgraphView replacementSubgraph(std::move(replacementLayers),</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  CreateIInputsFrom({replacementLayers.front()}),</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  CreateIOutputsFrom({replacementLayers.back()}));</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> }</div></div><!-- fragment --> + </div> </div> -<a id="a7658f93d899c8646515a29370e6aa994"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a7658f93d899c8646515a29370e6aa994">◆ </a></span>ReportError()</h2> +<a id="a3cf1cee98e0ed8b54263ec7279f6ec69"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3cf1cee98e0ed8b54263ec7279f6ec69">◆ </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>< std::vector< std::string > &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > </td> <td class="paramname"><em>errorMessages</em> </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> {</div> +<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  std::stringstream fullErrorMessage;</div> +<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  fullErrorMessage << <span class="stringliteral">"ERROR: "</span> << errorMessage;</div> +<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) << fullErrorMessage.str();</div> +<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="keywordflow">if</span> (errorMessages)</div> +<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  {</div> +<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  errorMessages.value().push_back(fullErrorMessage.str());</div> +<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  }</div> +<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> }</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> {</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  std::stringstream fullErrorMessage;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  fullErrorMessage << <span class="stringliteral">"ERROR: "</span> << errorMessage;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) << fullErrorMessage.str();</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="keywordflow">if</span> (errorMessages)</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  {</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  errorMessages.value().push_back(fullErrorMessage.str());</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  }</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span> }</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">◆ </a></span>ReportUntouchedLayers()</h2> +<a id="a5afd10e5e84ebf5cb8cfc8707492eda7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5afd10e5e84ebf5cb8cfc8707492eda7">◆ </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< <a class="el" href="_types_8hpp.xhtml#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>, <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> *> </td> + <td class="paramtype">std::map< <a class="el" href="_types_8hpp.xhtml#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>, <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> * > </td> <td class="paramname"><em>untouched</em> </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> {</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  std::vector<Layer*> untouchedVector;</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>& pair : untouched)</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  {</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  Layer* layer = pair.second;</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  SubgraphView subgraphView({layer},</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  CreateIInputsFrom({layer}),</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  CreateIOutputsFrom({layer}));</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  optimizationViews.AddUntouchedSubgraph(std::move(subgraphView));</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> }</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> {</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  std::vector<Layer*> untouchedVector;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>& pair : untouched)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  Layer* layer = pair.second;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  SubgraphView subgraphView({layer},</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  CreateIInputsFrom({layer}),</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  CreateIOutputsFrom({layer}));</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  optimizationViews.AddUntouchedSubgraph(std::move(subgraphView));</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> }</div></div><!-- fragment --> + </div> </div> -<a id="a38e626422579decc13e3ee37da1a84c9"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a38e626422579decc13e3ee37da1a84c9">◆ </a></span>ReportWarning()</h2> +<a id="a070307e9ee0f7969f7d4320145d1dddb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a070307e9ee0f7969f7d4320145d1dddb">◆ </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>< std::vector< std::string > &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > </td> <td class="paramname"><em>warningMessages</em> </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> {</div> +<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  std::stringstream fullWarningMessage;</div> +<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  fullWarningMessage << <span class="stringliteral">"WARNING: "</span> << warningMessage;</div> +<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) << fullWarningMessage.str();</div> +<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">if</span> (warningMessages)</div> +<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  {</div> +<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  warningMessages.value().push_back(fullWarningMessage.str());</div> +<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  }</div> +<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> }</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> {</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  std::stringstream fullWarningMessage;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  fullWarningMessage << <span class="stringliteral">"WARNING: "</span> << warningMessage;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) << fullWarningMessage.str();</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">if</span> (warningMessages)</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  {</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  warningMessages.value().push_back(fullWarningMessage.str());</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  }</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> }</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> {</div> +<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  <span class="keywordflow">if</span> (src != dst)</div> +<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  {</div> +<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  ITensorHandleFactory* srcFactory = registry.GetFactory(src);</div> +<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>  ITensorHandleFactory* dstFactory = registry.GetFactory(dst);</div> +<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  </div> +<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  <span class="keywordflow">if</span> (srcFactory && dstFactory &&</div> +<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  (srcFactory->GetExportFlags() & dstFactory->GetImportFlags()) != 0)</div> +<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  {</div> +<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  }</div> +<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  }</div> +<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> }</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> {</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  <span class="keywordflow">if</span> (src != dst)</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  {</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  ITensorHandleFactory* srcFactory = registry.GetFactory(src);</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>  ITensorHandleFactory* dstFactory = registry.GetFactory(dst);</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> </div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  <span class="keywordflow">if</span> (srcFactory && dstFactory &&</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  (srcFactory->GetExportFlags() & dstFactory->GetImportFlags()) != 0)</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  {</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  }</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  }</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> }</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> {</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="comment">// Reshape the weights in-place</span></div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">const</span> TensorShape& weightShape = weightInfo.GetShape();</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">switch</span> (dataLayout)</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">case</span> DataLayout::NHWC:</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <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>  weightInfo.SetShape({ 1,</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  weightShape[0],</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  weightShape[1],</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  weightShape[2] * weightShape[3] });</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  weightInfo.SetShape({ 1,</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  weightShape[0] * weightShape[1],</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  weightShape[2],</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  weightShape[3] });</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">case</span> DataLayout::NCHW:</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <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>  weightInfo.SetShape({ 1, weightShape[0] * weightShape[1], weightShape[2], weightShape[3] });</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</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> {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="comment">// Reshape the weights in-place</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">const</span> TensorShape& weightShape = weightInfo.GetShape();</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">switch</span> (dataLayout)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">case</span> DataLayout::NHWC:</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <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>  weightInfo.SetShape({ 1,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  weightShape[0],</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  weightShape[1],</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  weightShape[2] * weightShape[3] });</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  weightInfo.SetShape({ 1,</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  weightShape[0] * weightShape[1],</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  weightShape[2],</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  weightShape[3] });</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">case</span> DataLayout::NCHW:</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <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>  weightInfo.SetShape({ 1, weightShape[0] * weightShape[1], weightShape[2], weightShape[3] });</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</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> {</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="comment">// alignCorners and halfPixelCenters cannot both be true</span></div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(!(alignCorners && halfPixelCenters));</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  </div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <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>  <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>  </div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <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>  <span class="comment">// in the input image.</span></div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <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>  <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>  </div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <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>  <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>  </div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n = 0; n < batchSize; ++n)</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  {</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < channelCount; ++c)</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y = 0; y < outputHeight; ++y)</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  {</div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <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>  <span class="keywordtype">float</span> iy = PixelScaler(y, scaleY, halfPixelCenters, resizeMethod);</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  </div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <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>  <span class="keyword">const</span> <span class="keywordtype">float</span> fiy = (resizeMethod == <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">armnn::ResizeMethod::NearestNeighbor</a> && alignCorners) ?</div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  roundf(iy) : floorf(iy);</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <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>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y0 = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(std::max(fiy, 0.0f));</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  </div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="comment">// Interpolation weight (range [0,1]).</span></div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <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>  </div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x = 0; x < outputWidth; ++x)</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  {</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <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>  <span class="keywordtype">float</span> ix = PixelScaler(x, scaleX, halfPixelCenters, resizeMethod);</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  </div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <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>  <span class="keyword">const</span> <span class="keywordtype">float</span> fix = resizeMethod == <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">armnn::ResizeMethod::NearestNeighbor</a> && alignCorners ?</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  roundf(ix) : floorf(ix);</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <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>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x0 = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(std::max(fix, 0.0f));</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  </div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="comment">// Interpolation weight (range [0,1]).</span></div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <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>  </div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x1;</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y1;</div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <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>  <span class="keywordflow">if</span> (halfPixelCenters)</div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  {</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  x1 = std::min(<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(std::ceil(ix)), inputWidth - 1u);</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  y1 = std::min(<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(std::ceil(iy)), inputHeight - 1u);</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  }</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <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>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  {</div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  x1 = std::min(x0 + 1, inputWidth - 1u);</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  y1 = std::min(y0 + 1, inputHeight - 1u);</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  </div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordtype">float</span> interpolatedValue;</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">switch</span> (resizeMethod)</div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  {</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <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>  {</div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  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>  <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>  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>  <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>  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>  <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>  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>  <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>  </div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <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>  <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>  interpolatedValue = Lerp(ly0, ly1, yw);</div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  }</div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <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>  {</div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="comment">// calculate euclidean distance to the 4 neighbours</span></div> +<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">auto</span> distance00 = EuclideanDistance(fix, fiy, x0, y0);</div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keyword">auto</span> distance01 = EuclideanDistance(fix, fiy, x0, y1);</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">auto</span> distance10 = EuclideanDistance(fix, fiy, x1, y0);</div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">auto</span> distance11 = EuclideanDistance(fix, fiy, x1, y1);</div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  </div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <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>  </div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <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>  <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>  </div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <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>  {</div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  xNearest = x0;</div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  yNearest = y0;</div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  }</div> +<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <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>  {</div> +<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  xNearest = x0;</div> +<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  yNearest = y1;</div> +<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  }</div> +<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <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>  {</div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  xNearest = x1;</div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  yNearest = y0;</div> +<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  }</div> +<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <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>  {</div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  xNearest = x1;</div> +<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  yNearest = y1;</div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  }</div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  {</div> +<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">"Resize Nearest Neighbor failure"</span>);</div> +<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  }</div> +<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  </div> +<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  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>  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>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  }</div> +<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">"Unknown resize method: "</span> +</div> +<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  std::to_string(<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(resizeMethod)));</div> +<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  }</div> +<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  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>  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>  }</div> +<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div> +<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  }</div> +<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  }</div> +<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> }</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< IType >::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< IType >::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> {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="comment">// alignCorners and halfPixelCenters cannot both be true</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(!(alignCorners && halfPixelCenters));</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <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>  <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>  <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> </div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <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>  <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> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <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>  <span class="comment">// in the input image.</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <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>  <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> </div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <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>  <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> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n = 0; n < batchSize; ++n)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < channelCount; ++c)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y = 0; y < outputHeight; ++y)</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <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>  <span class="keywordtype">float</span> iy = PixelScaler(y, scaleY, halfPixelCenters, resizeMethod);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <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>  <span class="keyword">const</span> <span class="keywordtype">float</span> fiy = (resizeMethod == <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">armnn::ResizeMethod::NearestNeighbor</a> && alignCorners) ?</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  roundf(iy) : floorf(iy);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <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>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y0 = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(std::max(fiy, 0.0f));</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="comment">// Interpolation weight (range [0,1]).</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <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> </div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x = 0; x < outputWidth; ++x)</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <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>  <span class="keywordtype">float</span> ix = PixelScaler(x, scaleX, halfPixelCenters, resizeMethod);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <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>  <span class="keyword">const</span> <span class="keywordtype">float</span> fix = resizeMethod == <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">armnn::ResizeMethod::NearestNeighbor</a> && alignCorners ?</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  roundf(ix) : floorf(ix);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <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>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x0 = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(std::max(fix, 0.0f));</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="comment">// Interpolation weight (range [0,1]).</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <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> </div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x1;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y1;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <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>  <span class="keywordflow">if</span> (halfPixelCenters)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  x1 = std::min(static_cast<unsigned int>(std::ceil(ix)), inputWidth - 1u);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  y1 = std::min(static_cast<unsigned int>(std::ceil(iy)), inputHeight - 1u);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  }</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <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>  <span class="keywordflow">else</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  x1 = std::min(x0 + 1, inputWidth - 1u);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  y1 = std::min(y0 + 1, inputHeight - 1u);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordtype">float</span> interpolatedValue;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">switch</span> (resizeMethod)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <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>  {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  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>  <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>  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>  <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>  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>  <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>  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>  <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> </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <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>  <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>  interpolatedValue = Lerp(ly0, ly1, yw);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <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>  {</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="comment">// calculate euclidean distance to the 4 neighbours</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">auto</span> distance00 = EuclideanDistance(fix, fiy, x0, y0);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keyword">auto</span> distance01 = EuclideanDistance(fix, fiy, x0, y1);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">auto</span> distance10 = EuclideanDistance(fix, fiy, x1, y0);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">auto</span> distance11 = EuclideanDistance(fix, fiy, x1, y1);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <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> </div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <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>  <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> </div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <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>  {</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  xNearest = x0;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  yNearest = y0;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  }</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <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>  {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  xNearest = x0;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  yNearest = y1;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <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>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  xNearest = x1;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  yNearest = y0;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  }</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <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>  {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  xNearest = x1;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  yNearest = y1;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">"Resize Nearest Neighbor failure"</span>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  }</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  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>  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>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">"Unknown resize method: "</span> +</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  std::to_string(static_cast<int>(resizeMethod)));</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  }</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  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>  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>  }</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> }</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 & 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 &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">◆ </a></span>ReturnWithError()</h2> +<a id="aeee4e55e6ad4fe12b2168f9fd1e88141"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aeee4e55e6ad4fe12b2168f9fd1e88141">◆ </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>< std::vector< std::string > &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > </td> <td class="paramname"><em>errMessages</em> </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> {</div> +<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  std::stringstream failureMsg;</div> +<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  failureMsg << <span class="stringliteral">"Layer of type "</span> << <a class="code" href="namespacearmnn.xhtml#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a>(layer->GetType())</div> +<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  << <span class="stringliteral">" is not supported on any preferred backend "</span> << backendSettings.m_PreferredBackends;</div> +<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <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>  </div> +<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  res.m_Error = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keywordflow">return</span> res;</div> +<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> }</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> {</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  std::stringstream failureMsg;</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  failureMsg << <span class="stringliteral">"Layer of type "</span> << <a class="code" href="namespacearmnn.xhtml#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a>(layer->GetType())</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  << <span class="stringliteral">" is not supported on any preferred backend "</span> << backendSettings.m_PreferredBackends;</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <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> </div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  res.m_Error = <span class="keyword">true</span>;</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keywordflow">return</span> res;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span> }</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 &errorMessage, Optional< std::vector< std::string > &> 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> {</div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">try</span></div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  {</div> +<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keyword">function</span>.run();</div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div> +<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">catch</span> (cl::Error& error)</div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  {</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <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>  }</div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> }</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> {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">try</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keyword">function</span>.run();</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">catch</span> (cl::Error& error)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <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>  }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> }</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 &clError, const CheckLocation &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">◆ </a></span>SelectTensorHandleStrategy()</h2> +<a id="acbf7c9a630f03ece800f807d946239ab"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acbf7c9a630f03ece800f807d946239ab">◆ </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>< std::vector< std::string > &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::vector< std::string > & > </td> <td class="paramname"><em>errMessages</em> </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> {</div> +<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Optimizer_SelectTensorHandleStrategy"</span>);</div> +<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>  OptimizationResult result;</div> +<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>  </div> +<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>  optGraph.ForEachLayer([&backends, &registry, &result, &errMessages, importEnabled, exportEnabled](Layer* layer)</div> +<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>  {</div> +<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>  <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>  </div> +<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>  <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>  <span class="comment">// assignment if this check fails</span></div> +<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(backends.find(layer->GetBackendId()) != backends.end());</div> +<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>  </div> +<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>  <span class="comment">// Check each output separately</span></div> +<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slotIdx = 0; slotIdx < layer->GetNumOutputSlots(); slotIdx++)</div> +<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>  {</div> +<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>  OutputSlot& outputSlot = layer->GetOutputSlot(slotIdx);</div> +<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>  </div> +<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>  <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>  </div> +<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>  <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>  <span class="keywordflow">switch</span>(layer->GetType())</div> +<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>  {</div> +<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>  <span class="keywordflow">case</span> LayerType::Input:</div> +<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>  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>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>  <span class="keywordflow">case</span> LayerType::Output:</div> +<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>  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>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>  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>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>  }</div> +<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>  outputSlot.SetTensorHandleFactory(slotOption);</div> +<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>  </div> +<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>  <span class="comment">// Now determine the "best" edge strategy for each connection given the slotOption.</span></div> +<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>  <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>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& connection : outputSlot.GetConnections())</div> +<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>  {</div> +<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>  <span class="keyword">const</span> Layer& connectedLayer = connection->GetOwningLayer();</div> +<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>  </div> +<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>  <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>  registry, importEnabled);</div> +<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>  </div> +<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>  <span class="keywordflow">if</span> (strategy == EdgeStrategy::Undefined)</div> +<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>  {</div> +<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>  result.m_Error = <span class="keyword">true</span>;</div> +<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>  <span class="keywordflow">if</span> (errMessages)</div> +<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>  {</div> +<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>  errMessages.value().emplace_back(<span class="stringliteral">"Could not find valid strategy required for compatibility"</span></div> +<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>  <span class="stringliteral">" between backends."</span>);</div> +<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>  }</div> +<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>  <span class="keywordflow">return</span>;</div> +<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>  }</div> +<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>  </div> +<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>  outputSlot.SetEdgeStrategy(connectionIdx, strategy);</div> +<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>  </div> +<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>  connectionIdx++;</div> +<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>  }</div> +<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>  }</div> +<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>  });</div> +<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>  </div> +<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>  <span class="keywordflow">return</span> result;</div> +<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> }</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> {</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>  <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">"Optimizer_SelectTensorHandleStrategy"</span>);</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>  OptimizationResult result;</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span> </div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>  optGraph.ForEachLayer([&backends, &registry, &result, &errMessages, importEnabled, exportEnabled](Layer* layer)</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>  {</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>  <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> </div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>  <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>  <span class="comment">// assignment if this check fails</span></div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(backends.find(layer->GetBackendId()) != backends.end());</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> </div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>  <span class="comment">// Check each output separately</span></div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slotIdx = 0; slotIdx < layer->GetNumOutputSlots(); slotIdx++)</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>  {</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>  OutputSlot& outputSlot = layer->GetOutputSlot(slotIdx);</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> </div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>  <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> </div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>  <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>  <span class="keywordflow">switch</span>(layer->GetType())</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>  {</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>  <span class="keywordflow">case</span> LayerType::Input:</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>  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>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>  <span class="keywordflow">case</span> LayerType::Output:</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>  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>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>  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>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>  }</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>  outputSlot.SetTensorHandleFactory(slotOption);</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span> </div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>  <span class="comment">// Now determine the "best" edge strategy for each connection given the slotOption.</span></div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>  <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>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>&& connection : outputSlot.GetConnections())</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>  {</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>  <span class="keyword">const</span> Layer& connectedLayer = connection->GetOwningLayer();</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span> </div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>  <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>  registry, importEnabled);</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> </div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>  <span class="keywordflow">if</span> (strategy == EdgeStrategy::Undefined)</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>  {</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>  result.m_Error = <span class="keyword">true</span>;</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>  <span class="keywordflow">if</span> (errMessages)</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>  {</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>  errMessages.value().emplace_back(<span class="stringliteral">"Could not find valid strategy required for compatibility"</span></div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>  <span class="stringliteral">" between backends."</span>);</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>  }</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>  }</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> </div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>  outputSlot.SetEdgeStrategy(connectionIdx, strategy);</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> </div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>  connectionIdx++;</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>  }</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>  }</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>  });</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> </div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> }</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 &backends, OutputSlot &slot, TensorHandleFactoryRegistry &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 &backends, ITensorHandleFactory::FactoryId srcFactoryId, const Layer &layer, const Layer &connectedLayer, TensorHandleFactoryRegistry &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 &backends, OutputSlot &outputSlot, TensorHandleFactoryRegistry &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 &backends, OutputSlot &slot, TensorHandleFactoryRegistry &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> {</div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  SetLoggingSinks<LogSeverity::Trace>(standardOut, debugOut, coloured);</div> +<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  SetLoggingSinks<LogSeverity::Debug>(standardOut, debugOut, coloured);</div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  SetLoggingSinks<LogSeverity::Info>(standardOut, debugOut, coloured);</div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  SetLoggingSinks<LogSeverity::Warning>(standardOut, debugOut, coloured);</div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  SetLoggingSinks<LogSeverity::Error>(standardOut, debugOut, coloured);</div> +<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  SetLoggingSinks<LogSeverity::Fatal>(standardOut, debugOut, coloured);</div> +<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</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< Level >::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> {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  SetLoggingSinks<LogSeverity::Trace>(standardOut, debugOut, coloured);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  SetLoggingSinks<LogSeverity::Debug>(standardOut, debugOut, coloured);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  SetLoggingSinks<LogSeverity::Info>(standardOut, debugOut, coloured);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  SetLoggingSinks<LogSeverity::Warning>(standardOut, debugOut, coloured);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  SetLoggingSinks<LogSeverity::Error>(standardOut, debugOut, coloured);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  SetLoggingSinks<LogSeverity::Fatal>(standardOut, debugOut, coloured);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</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> {</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <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>  <span class="comment">// expected by the ACL NESlice workload</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <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>  <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> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_dims = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(m_begin.size());</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <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>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < num_dims; i++)</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  {</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <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> </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  starts.set(i, static_cast<int>(m_begin[revertedIndex]));</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  ends.set(i, static_cast<int>(m_begin[revertedIndex] + m_size[revertedIndex]));</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">return</span> std::make_tuple(starts, ends);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> }</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< unsigned int, MaxNumOfTensorDimensions > 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> {</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <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>  <span class="comment">// expected by the ACL NESlice workload</span></div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <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>  <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>  </div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_dims = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(m_begin.size());</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  </div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <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>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < num_dims; i++)</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  {</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <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>  </div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  starts.set(i, <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(m_begin[revertedIndex]));</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  ends.set(i, <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(m_begin[revertedIndex] + m_size[revertedIndex]));</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  </div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">return</span> std::make_tuple(starts, ends);</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> }</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> {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <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>  <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>  <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> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_dims = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(m_begin.size());</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < num_dims; i++) {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <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> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  starts.set(i, static_cast<int>(m_begin[revertedIndex]));</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  ends.set(i, static_cast<int>(m_end[revertedIndex]));</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  strides.set(i, static_cast<int>(m_stride[revertedIndex]));</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">return</span> std::make_tuple(starts, ends, strides);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</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< unsigned int, MaxNumOfTensorDimensions > 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> {</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_dims = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(m_begin.size());</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  </div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < num_dims; i++) {</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <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>  </div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  starts.set(i, <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(m_begin[revertedIndex]));</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  ends.set(i, <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(m_end[revertedIndex]));</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  strides.set(i, <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(m_stride[revertedIndex]));</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  </div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">return</span> std::make_tuple(starts, ends, strides);</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</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> {</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  SimpleLogger<LogSeverity::Trace>::Get().Enable(<span class="keyword">false</span>);</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  SimpleLogger<LogSeverity::Debug>::Get().Enable(<span class="keyword">false</span>);</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  SimpleLogger<LogSeverity::Info>::Get().Enable(<span class="keyword">false</span>);</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  SimpleLogger<LogSeverity::Warning>::Get().Enable(<span class="keyword">false</span>);</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  SimpleLogger<LogSeverity::Error>::Get().Enable(<span class="keyword">false</span>);</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  SimpleLogger<LogSeverity::Fatal>::Get().Enable(<span class="keyword">false</span>);</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">switch</span> (level)</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">case</span> LogSeverity::Trace:</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  SimpleLogger<LogSeverity::Trace>::Get().Enable(<span class="keyword">true</span>);</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <a class="code" href="_utils_8hpp.xhtml#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <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>  SimpleLogger<LogSeverity::Debug>::Get().Enable(<span class="keyword">true</span>);</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="_utils_8hpp.xhtml#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">case</span> LogSeverity::Info:</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  SimpleLogger<LogSeverity::Info>::Get().Enable(<span class="keyword">true</span>);</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <a class="code" href="_utils_8hpp.xhtml#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">case</span> LogSeverity::Warning:</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  SimpleLogger<LogSeverity::Warning>::Get().Enable(<span class="keyword">true</span>);</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <a class="code" href="_utils_8hpp.xhtml#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">case</span> LogSeverity::Error:</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  SimpleLogger<LogSeverity::Error>::Get().Enable(<span class="keyword">true</span>);</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="_utils_8hpp.xhtml#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">case</span> LogSeverity::Fatal:</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  SimpleLogger<LogSeverity::Fatal>::Get().Enable(<span class="keyword">true</span>);</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">default</span>:</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <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>  }</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> }</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< Level >::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< Level >::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< Level >::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< Level >::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< Level >::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> {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  SimpleLogger<LogSeverity::Trace>::Get().Enable(<span class="keyword">false</span>);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  SimpleLogger<LogSeverity::Debug>::Get().Enable(<span class="keyword">false</span>);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  SimpleLogger<LogSeverity::Info>::Get().Enable(<span class="keyword">false</span>);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  SimpleLogger<LogSeverity::Warning>::Get().Enable(<span class="keyword">false</span>);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  SimpleLogger<LogSeverity::Error>::Get().Enable(<span class="keyword">false</span>);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  SimpleLogger<LogSeverity::Fatal>::Get().Enable(<span class="keyword">false</span>);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">switch</span> (level)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">case</span> LogSeverity::Trace:</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  SimpleLogger<LogSeverity::Trace>::Get().Enable(<span class="keyword">true</span>);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <a class="code" href="_utils_8hpp.xhtml#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <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>  SimpleLogger<LogSeverity::Debug>::Get().Enable(<span class="keyword">true</span>);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="_utils_8hpp.xhtml#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">case</span> LogSeverity::Info:</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  SimpleLogger<LogSeverity::Info>::Get().Enable(<span class="keyword">true</span>);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <a class="code" href="_utils_8hpp.xhtml#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">case</span> LogSeverity::Warning:</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  SimpleLogger<LogSeverity::Warning>::Get().Enable(<span class="keyword">true</span>);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <a class="code" href="_utils_8hpp.xhtml#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">case</span> LogSeverity::Error:</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  SimpleLogger<LogSeverity::Error>::Get().Enable(<span class="keyword">true</span>);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="_utils_8hpp.xhtml#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">case</span> LogSeverity::Fatal:</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  SimpleLogger<LogSeverity::Fatal>::Get().Enable(<span class="keyword">true</span>);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <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>  }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> }</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 &inputInfo, const T *inputData, LayerGuid guid, const std::string &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> {</div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  SimpleLogger<Level>::Get().RemoveAllSinks();</div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  </div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">if</span> (standardOut)</div> +<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  {</div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">if</span> (coloured)</div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  {</div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  SimpleLogger<Level>::Get().AddSink(</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  std::make_shared<StandardOutputColourSink>(Level));</div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  } <span class="keywordflow">else</span></div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  {</div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  SimpleLogger<Level>::Get().AddSink(</div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  std::make_shared<StandardOutputSink>());</div> +<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  }</div> +<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div> +<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  </div> +<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">if</span> (debugOut)</div> +<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  {</div> +<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  SimpleLogger<Level>::Get().AddSink(</div> +<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  std::make_shared<DebugOutputSink>());</div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  }</div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> }</div> +</div><!-- fragment --> <p class="reference">References <a class="el" href="_logging_8hpp_source.xhtml#l00183">SimpleLogger< Level >::AddSink()</a>, <a class="el" href="_logging_8cpp_source.xhtml#l00025">SimpleLogger< Level >::Get()</a>, and <a class="el" href="_logging_8hpp_source.xhtml#l00178">SimpleLogger< Level >::RemoveAllSinks()</a>.</p> -<div class="fragment"><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> {</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  SimpleLogger<Level>::Get().RemoveAllSinks();</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">if</span> (standardOut)</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  {</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">if</span> (coloured)</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  SimpleLogger<Level>::Get().AddSink(</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  std::make_shared<StandardOutputColourSink>(Level));</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  } <span class="keywordflow">else</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  SimpleLogger<Level>::Get().AddSink(</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  std::make_shared<StandardOutputSink>());</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">if</span> (debugOut)</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  SimpleLogger<Level>::Get().AddSink(</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  std::make_shared<DebugOutputSink>());</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  }</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> }</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> {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <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>  <span class="comment">// expected by the ACL NESlice workload</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <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>  <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> </div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_dims = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(m_begin.size());</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <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>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < num_dims; i++)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <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> </div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  starts.set(i, static_cast<int>(m_begin[revertedIndex]));</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  ends.set(i, static_cast<int>(m_begin[revertedIndex] + m_size[revertedIndex]));</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">return</span> std::make_tuple(starts, ends);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> }</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< unsigned int, MaxNumOfTensorDimensions > 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> {</div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <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>  <span class="comment">// expected by the ACL NESlice workload</span></div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <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>  <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>  </div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_dims = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(m_begin.size());</div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  </div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <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>  <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>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < num_dims; i++)</div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  {</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <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>  </div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  starts.set(i, <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(m_begin[revertedIndex]));</div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  ends.set(i, <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(m_begin[revertedIndex] + m_size[revertedIndex]));</div> +<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  }</div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  </div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">return</span> std::make_tuple(starts, ends);</div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> }</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> {</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <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>  <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>  <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> </div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_dims = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(m_begin.size());</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < num_dims; i++)</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <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> </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  starts.set(i, static_cast<int>(m_begin[revertedIndex]));</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  ends.set(i, static_cast<int>(m_end[revertedIndex]));</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  strides.set(i, static_cast<int>(m_stride[revertedIndex]));</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">return</span> std::make_tuple(starts, ends, strides);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> }</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< unsigned int, MaxNumOfTensorDimensions > 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> {</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_dims = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(m_begin.size());</div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  </div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < num_dims; i++)</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  {</div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <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>  </div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  starts.set(i, <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(m_begin[revertedIndex]));</div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  ends.set(i, <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(m_end[revertedIndex]));</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  strides.set(i, <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(m_stride[revertedIndex]));</div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  </div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">return</span> std::make_tuple(starts, ends, strides);</div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> }</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">◆ </a></span>SetValueChecked()</h2> +<a id="a8c88a8a91827e9ccc3cf3ce6b14fcd17"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8c88a8a91827e9ccc3cf3ce6b14fcd17">◆ </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>< T &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< T & > </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> {</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keywordflow">if</span> (optionalRef)</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  optionalRef.value() = val;</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  }</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> }</div> +</div><!-- fragment --> <p class="reference">References <a class="el" href="_optional_8hpp_source.xhtml#l00146">OptionalReferenceSwitch< std::is_reference< T >::value, T >::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> {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keywordflow">if</span> (optionalRef)</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  optionalRef.value() = val;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  }</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> }</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> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">const</span> TensorShape& inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  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>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(numDims <= maxNumDims);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  std::vector<unsigned int> paddedInput(4);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  std::vector<unsigned int> paddedBegin(4);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  std::vector<unsigned int> paddedSize (4);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i < maxNumDims; ++i)</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">if</span> (i < numPaddingDims)</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  paddedInput[i] = 1u;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  paddedBegin[i] = 0u;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  paddedSize[i] = 1u;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <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>  paddedInput[i] = inputShape[j];</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  paddedBegin[i] = descriptor.m_Begin[j];</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  paddedSize[i] = descriptor.m_Size[j];</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(begin0 + size0 <= dim0);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(begin1 + size1 <= dim1);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(begin2 + size2 <= dim2);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(begin3 + size3 <= dim3);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* input = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">></span>(inputData);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* output = <span class="keyword">reinterpret_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">></span>(outputData);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(dim0);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx0 = begin0; idx0 < begin0 + size0; ++idx0)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx1 = begin1; idx1 < begin1 + size1; ++idx1)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx2 = begin2; idx2 < begin2 + size2; ++idx2)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx3 = begin3; idx3 < begin3 + size3; ++idx3)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <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>  (((idx0 * dim1 + idx1) * dim2 + idx2) * dim3 + idx3) * dataTypeSize;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  ::memcpy(output, input + inputOffset, dataTypeSize);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  output += dataTypeSize;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</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 &&...)</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> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">const</span> TensorShape& inputShape = inputInfo.GetShape();</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <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>  </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <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>  <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>  </div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  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>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(numDims <= maxNumDims);</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  std::vector<unsigned int> paddedInput(4);</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  std::vector<unsigned int> paddedBegin(4);</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  std::vector<unsigned int> paddedSize (4);</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  </div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i < maxNumDims; ++i)</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  {</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">if</span> (i < numPaddingDims)</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  paddedInput[i] = 1u;</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  paddedBegin[i] = 0u;</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  paddedSize[i] = 1u;</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  {</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <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>  paddedInput[i] = inputShape[j];</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  paddedBegin[i] = descriptor.m_Begin[j];</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  paddedSize[i] = descriptor.m_Size[j];</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  }</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  }</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  </div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(begin0 + size0 <= dim0);</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(begin1 + size1 <= dim1);</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(begin2 + size2 <= dim2);</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(begin3 + size3 <= dim3);</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  </div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* input = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">></span>(inputData);</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* output = <span class="keyword">reinterpret_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">></span>(outputData);</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  </div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(dim0);</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx0 = begin0; idx0 < begin0 + size0; ++idx0)</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx1 = begin1; idx1 < begin1 + size1; ++idx1)</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx2 = begin2; idx2 < begin2 + size2; ++idx2)</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx3 = begin3; idx3 < begin3 + size3; ++idx3)</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <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>  (((idx0 * dim1 + idx1) * dim2 + idx2) * dim3 + idx3) * dataTypeSize;</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  </div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  ::memcpy(output, input + inputOffset, dataTypeSize);</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  output += dataTypeSize;</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</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< IType >::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< IType >::Set()</a>.</p> -<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(axis < static_cast<int>(inputTensorInfo.GetNumDimensions()),</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="stringliteral">"Required axis index greater than number of dimensions."</span>);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(axis >= -static_cast<int>(inputTensorInfo.GetNumDimensions()),</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="stringliteral">"Required axis index lower than negative of the number of dimensions"</span>);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> uAxis = axis < 0 ?</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  inputTensorInfo.GetNumDimensions() - <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(abs(axis))</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  : static_cast<unsigned int>(axis);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">const</span> TensorShape& inputShape = inputTensorInfo.GetShape();</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  <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>  <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>  uAxis + 1,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  inputShape.GetNumDimensions());</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outer = 0; outer < outerSize; ++outer)</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <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>  <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>  <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> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inner = 0; inner < innerSize; ++inner, ++inputBeginIdx, ++inputEndIdx, ++outputBeginIdx)</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="comment">// Find max</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordtype">float</span> maxValue = std::numeric_limits<float>::lowest();</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iter = inputBeginIdx; iter < inputEndIdx; iter += innerSize)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  in[iter];</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  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>  }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="comment">// Compute sum</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordtype">float</span> sum = 0.0f;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iter = inputBeginIdx; iter < inputEndIdx; iter += innerSize)</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  in[iter];</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  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>  }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="comment">// Compute result</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <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>  out[outputIter];</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iter = inputBeginIdx; iter < inputEndIdx; iter += innerSize, outputIter += innerSize)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  out[outputIter];</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  in[iter];</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  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>  }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</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 &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> {</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(axis < <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(inputTensorInfo.GetNumDimensions()),</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="stringliteral">"Required axis index greater than number of dimensions."</span>);</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(axis >= -<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(inputTensorInfo.GetNumDimensions()),</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="stringliteral">"Required axis index lower than negative of the number of dimensions"</span>);</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> uAxis = axis < 0 ?</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  inputTensorInfo.GetNumDimensions() - <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(abs(axis))</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  : <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(axis);</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  </div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">const</span> TensorShape& inputShape = inputTensorInfo.GetShape();</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  <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>  <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>  uAxis + 1,</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  inputShape.GetNumDimensions());</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  </div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outer = 0; outer < outerSize; ++outer)</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  {</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inner = 0; inner < innerSize; ++inner, ++inputBeginIdx, ++inputEndIdx, ++outputBeginIdx)</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  {</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="comment">// Find max</span></div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordtype">float</span> maxValue = std::numeric_limits<float>::lowest();</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iter = inputBeginIdx; iter < inputEndIdx; iter += innerSize)</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  in[iter];</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  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>  }</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  </div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="comment">// Compute sum</span></div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordtype">float</span> sum = 0.0f;</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iter = inputBeginIdx; iter < inputEndIdx; iter += innerSize)</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  {</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  in[iter];</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  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>  }</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  </div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="comment">// Compute result</span></div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <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>  out[outputIter];</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iter = inputBeginIdx; iter < inputEndIdx; iter += innerSize, outputIter += innerSize)</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  out[outputIter];</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  in[iter];</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  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>  }</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  }</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</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< IType >::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< IType >::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> {</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <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>  </div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">const</span> <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="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">const</span> <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="l00044"></a><span class="lineno"> 44</span>  </div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  </div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <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>  <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>  </div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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>  <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>  </div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outB = 0; outB < outputBatchSize; outB++)</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <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>  </div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <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>  <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>  </div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outH = 0; outH < outputHeight; outH++)</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  {</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outW = 0; outW < outputWidth; outW++)</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">if</span> (outH * blockHeight + shiftH < paddingTop ||</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  outH * blockHeight + shiftH >= paddingTop + inputHeight ||</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  outW * blockWidth + shiftW < paddingLeft ||</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  outW * blockWidth + shiftW >= paddingLeft + inputWidth)</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < channels; c++)</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <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>  outB,</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  outH,</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  outW,</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  c,</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  dataLayout);</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  outputData += outOffset;</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  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>  outputData -= outOffset;</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  {</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < channels; c++)</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  {</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <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>  inB,</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  (outH * blockHeight + shiftH) - paddingTop,</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  (outW * blockWidth + shiftW) - paddingLeft,</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  c,</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  dataLayout);</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  </div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <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>  outB,</div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  outH,</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  outW,</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  c,</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  dataLayout);</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  </div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  outputData += outOffset;</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  inputData += inOffset;</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  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>  inputData -= inOffset;</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  outputData -= outOffset;</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  }</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  }</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  }</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</div> +</div><!-- fragment --> <p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder< IType >::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< IType >::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> {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <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> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">const</span> <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="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">const</span> <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="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <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>  <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>  <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> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <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>  <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>  <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> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <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>  <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> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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>  <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> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outB = 0; outB < outputBatchSize; outB++)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <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> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <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>  <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> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outH = 0; outH < outputHeight; outH++)</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outW = 0; outW < outputWidth; outW++)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">if</span> (outH * blockHeight + shiftH < paddingTop ||</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  outH * blockHeight + shiftH >= paddingTop + inputHeight ||</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  outW * blockWidth + shiftW < paddingLeft ||</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  outW * blockWidth + shiftW >= paddingLeft + inputWidth)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < channels; c++)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <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>  outB,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  outH,</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  outW,</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  c,</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  dataLayout);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  outputData += outOffset;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  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>  outputData -= outOffset;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < channels; c++)</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <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>  inB,</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  (outH * blockHeight + shiftH) - paddingTop,</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  (outW * blockWidth + shiftW) - paddingLeft,</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  c,</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  dataLayout);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <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>  outB,</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  outH,</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  outW,</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  c,</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  dataLayout);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  outputData += outOffset;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  inputData += inOffset;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  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>  inputData -= inOffset;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  outputData -= outOffset;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</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 & 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< std::pair< unsigned int, unsigned int > > 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 &shape, unsigned int b, unsigned int h, unsigned int w, unsigned int c, const DataLayoutIndexed &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< unsigned int > 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> {</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <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>  </div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">const</span> <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="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">const</span> <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="l00046"></a><span class="lineno"> 46</span>  </div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <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>  <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>  </div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <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>  </div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">if</span> (blockSize == 0)</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  {</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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>  <span class="stringliteral">"Input shape must be divisible by block size in all spatial dimensions: Block size is"</span></div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="stringliteral">" equal to zero"</span>);</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  }</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  </div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outChannelIndex = 0; outChannelIndex < outputChannels; outChannelIndex++)</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  {</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <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>  </div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <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>  <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>  </div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outH = 0; outH < outputHeight; outH++)</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outW = 0; outW < outputWidth; outW++)</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  {</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inBatchIndex = 0; inBatchIndex < inputBatchSize; inBatchIndex++)</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  {</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <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>  inChannelIndex,</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  (outH * blockSize + shiftH),</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  (outW * blockSize + shiftW),</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  inBatchIndex,</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  dataLayout);</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  </div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <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>  outChannelIndex,</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  outH,</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  outW,</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  inBatchIndex,</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  dataLayout);</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  </div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  outputData += outOffset;</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  inputData += inOffset;</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  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>  inputData -= inOffset;</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  outputData -= outOffset;</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  }</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  }</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  }</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</div> +</div><!-- fragment --> <p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder< IType >::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< IType >::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> {</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <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> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">const</span> <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="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">const</span> <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="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <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>  <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> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <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>  <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>  <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> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <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> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">if</span> (blockSize == 0)</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <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>  <span class="stringliteral">"Input shape must be divisible by block size in all spatial dimensions: Block size is"</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="stringliteral">" equal to zero"</span>);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outChannelIndex = 0; outChannelIndex < outputChannels; outChannelIndex++)</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <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> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <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>  <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> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outH = 0; outH < outputHeight; outH++)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outW = 0; outW < outputWidth; outW++)</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inBatchIndex = 0; inBatchIndex < inputBatchSize; inBatchIndex++)</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <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>  inChannelIndex,</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  (outH * blockSize + shiftH),</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  (outW * blockSize + shiftW),</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  inBatchIndex,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  dataLayout);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <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>  outChannelIndex,</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  outH,</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  outW,</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  inBatchIndex,</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  dataLayout);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  outputData += outOffset;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  inputData += inOffset;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  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>  inputData -= inOffset;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  outputData -= outOffset;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</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 & 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 &shape, unsigned int b, unsigned int h, unsigned int w, unsigned int c, const DataLayoutIndexed &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 >= 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">◆ </a></span>Split()</h2> +<a id="a3e6cbdbfb81dbcea27d219a6553838dc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3e6cbdbfb81dbcea27d219a6553838dc">◆ </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< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *> </td> + <td class="paramtype">std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> * > </td> <td class="paramname"><em>inputs</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> - <td class="paramtype">std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *> </td> + <td class="paramtype">std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> * > </td> <td class="paramname"><em>outputs</em> </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< IType >::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> {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> TensorInfo& 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> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  std::unique_ptr<Decoder<float>> decoderPtr =</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  MakeDecoder<float>(inputInfo, inputs[0]->Map());</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  Decoder<float>& decoder = *decoderPtr;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = 0; index < inputInfo.GetNumElements(); ++index)</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  {</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <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> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  <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> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i<inputInfo.GetNumDimensions(); i++)</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  dimensionStride /= inputInfo.GetShape()[i];</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  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>  indexRemainder -= indices[i] * dimensionStride;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> viewIdx = 0; viewIdx < data.m_ViewOrigins.size(); ++viewIdx)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  SplitterQueueDescriptor::ViewOrigin <span class="keyword">const</span>& view = data.m_ViewOrigins[viewIdx];</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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>  <span class="keyword">const</span> TensorInfo& 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>  <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> </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <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>  <span class="keywordtype">bool</span> insideView = <span class="keyword">true</span>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i<outputInfo.GetNumDimensions(); i++)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">if</span> (indices[i] < view.m_Origin[i])</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  insideView = <span class="keyword">false</span>;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">if</span> (indices[i] >= view.m_Origin[i] + outputInfo.GetShape()[i])</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  insideView = <span class="keyword">false</span>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">if</span> (insideView)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  std::unique_ptr<Encoder<float>> encoderPtr =</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  MakeEncoder<float>(outputInfo, outputs[viewIdx]->Map());</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  Encoder<float>& encoder = *encoderPtr;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <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>  <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>  <span class="keywordtype">float</span> inputValue = 0.f;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = outputInfo.GetNumDimensions(); i-- > 0;)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  outIndex += dimensionStride * (indices[i] - view.m_Origin[i]);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  dimensionStride *= outputInfo.GetShape()[i];</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  decoder += index;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  inputValue = decoder.Get();</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  decoder -= index;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  encoder += outIndex;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  encoder.Set(inputValue);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</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">◆ </a></span>Splitter()</h2> +<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">const</span> TensorInfo& 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>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  std::unique_ptr<Decoder<float>> decoderPtr =</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  MakeDecoder<float>(inputInfo, inputs[0]-><a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>());</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  Decoder<float>& decoder = *decoderPtr;</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = 0; index < inputInfo.GetNumElements(); ++index)</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  {</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <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>  </div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  <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>  </div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i<inputInfo.GetNumDimensions(); i++)</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  dimensionStride /= inputInfo.GetShape()[i];</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  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>  indexRemainder -= indices[i] * dimensionStride;</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  }</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> viewIdx = 0; viewIdx < data.m_ViewOrigins.size(); ++viewIdx)</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  SplitterQueueDescriptor::ViewOrigin <span class="keyword">const</span>& view = data.m_ViewOrigins[viewIdx];</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  </div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <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>  <span class="keyword">const</span> TensorInfo& 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>  <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>  </div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <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>  <span class="keywordtype">bool</span> insideView = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i<outputInfo.GetNumDimensions(); i++)</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  {</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">if</span> (indices[i] < view.m_Origin[i])</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  {</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  insideView = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  }</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">if</span> (indices[i] >= view.m_Origin[i] + outputInfo.GetShape()[i])</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  insideView = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  }</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  </div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">if</span> (insideView)</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  std::unique_ptr<Encoder<float>> encoderPtr =</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  MakeEncoder<float>(outputInfo, outputs[viewIdx]-><a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>());</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  Encoder<float>& encoder = *encoderPtr;</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  </div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <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>  <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>  <span class="keywordtype">float</span> inputValue = 0.f;</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  </div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = outputInfo.GetNumDimensions(); i-- > 0;)</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  outIndex += dimensionStride * (indices[i] - view.m_Origin[i]);</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  dimensionStride *= outputInfo.GetShape()[i];</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  </div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  decoder += index;</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  inputValue = decoder.Get();</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  decoder -= index;</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  </div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  encoder += outIndex;</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  encoder.Set(inputValue);</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  }</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</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< IType >::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< IType >::Set()</a>.</p> + +</div> +</div> +<a id="a0fdab6fc39d90c5beea97f4ca0a584c4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0fdab6fc39d90c5beea97f4ca0a584c4">◆ </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< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *> </td> + <td class="paramtype">std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> * > </td> <td class="paramname"><em>inputs</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> - <td class="paramtype">std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *> </td> + <td class="paramtype">std::vector< <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> * > </td> <td class="paramname"><em>outputs</em> </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> {</div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">const</span> TensorInfo& 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>  </div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = 0; index < inputInfo0.GetNumElements(); ++index)</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  {</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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>  </div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  <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>  </div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i<inputInfo0.GetNumDimensions(); i++)</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  {</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  dimensionStride /= inputInfo0.GetShape()[i];</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  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>  indexRemainder -= indices[i] * dimensionStride;</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  }</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  </div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> viewIdx = 0; viewIdx < data.m_ViewOrigins.size(); ++viewIdx)</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  {</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  SplitterQueueDescriptor::ViewOrigin <span class="keyword">const</span>& view = data.m_ViewOrigins[viewIdx];</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  </div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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>  <span class="keyword">const</span> TensorInfo& 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>  <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>  </div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  <span class="keywordtype">bool</span> insideView = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i<outputInfo.GetNumDimensions(); i++)</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  {</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">if</span> (indices[i] < view.m_Origin[i])</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  {</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  insideView = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  }</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">if</span> (indices[i] >= view.m_Origin[i] + outputInfo.GetShape()[i])</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  {</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  insideView = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  }</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  </div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">if</span> (insideView)</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <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>  <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>  </div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = outputInfo.GetNumDimensions(); i-- > 0;)</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  {</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  outIndex += dimensionStride * (indices[i] - view.m_Origin[i]);</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  dimensionStride *= outputInfo.GetShape()[i];</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  </div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <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>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>* outputData = GetOutputTensorData<DataType>(viewIdx, data);</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <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>  </div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>* inputData = GetInputTensorData<DataType>(0, data);</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <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>  </div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  outputData[outIndex] = inputData[index];</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  }</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  }</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> }</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> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">const</span> TensorInfo& 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> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = 0; index < inputInfo0.GetNumElements(); ++index)</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <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> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <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>  <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> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i<inputInfo0.GetNumDimensions(); i++)</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  dimensionStride /= inputInfo0.GetShape()[i];</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  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>  indexRemainder -= indices[i] * dimensionStride;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  }</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> viewIdx = 0; viewIdx < data.m_ViewOrigins.size(); ++viewIdx)</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  SplitterQueueDescriptor::ViewOrigin <span class="keyword">const</span>& view = data.m_ViewOrigins[viewIdx];</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <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>  <span class="keyword">const</span> TensorInfo& 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>  <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> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  <span class="keywordtype">bool</span> insideView = <span class="keyword">true</span>;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i<outputInfo.GetNumDimensions(); i++)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">if</span> (indices[i] < view.m_Origin[i])</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  insideView = <span class="keyword">false</span>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">if</span> (indices[i] >= view.m_Origin[i] + outputInfo.GetShape()[i])</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  insideView = <span class="keyword">false</span>;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">if</span> (insideView)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <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>  <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> </div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = outputInfo.GetNumDimensions(); i-- > 0;)</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  outIndex += dimensionStride * (indices[i] - view.m_Origin[i]);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  dimensionStride *= outputInfo.GetShape()[i];</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <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>  <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>* outputData = GetOutputTensorData<DataType>(viewIdx, data);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <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> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>* inputData = GetInputTensorData<DataType>(0, data);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <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> </div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  outputData[outIndex] = inputData[index];</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> }</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< LayerDescriptor >::m_Parameters</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder< IType >::Set()</a>.</p> -<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> {</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <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>  <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> </div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>& outputDims = outputInfo.GetShape();</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>& inputDims = inputInfo.GetShape();</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <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>  <span class="keywordflow">if</span> (!axis)</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  <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> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputIdx=0; inputIdx<numInputs; ++inputIdx)</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> elmt=0; elmt<inputLength; ++elmt)</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  (*inputs[inputIdx])[elmt];</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  output[(inputIdx * inputLength) + elmt];</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  output.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputs[inputIdx]->Get());</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  }</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  }</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iNumTensors = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(data.m_Inputs.size());</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannels = (inputNumDims > 1) ? inputDims[1] : 1;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHeight = (inputNumDims > 2) ? inputDims[2] : 1;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iWidth = (inputNumDims > 3) ? inputDims[3] : 1;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <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>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannels = (outputNumDims > 2) ? outputDims[2] : 1;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oHeight = (outputNumDims > 3) ? outputDims[3] : 1;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oWidth = (outputNumDims > 4) ? outputDims[4] : 1;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="comment">// Array to store the input coordinates</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <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>  <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>  <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>  <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>  std::array<unsigned int, 6> iCoordinates{ 0 };</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <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>  <span class="comment">// This array is initialized with &iCoordinates[5] since this will be always zero</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  std::array<unsigned int *, 5> oCoordinates = { &iCoordinates[5],</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  &iCoordinates[5],</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  &iCoordinates[5],</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  &iCoordinates[5],</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  &iCoordinates[5] };</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="comment">// Set the axis coordinate</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  oCoordinates[axis] = &iCoordinates[0];</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <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>  <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>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim = 0; dim < inputNumDims; ++dim)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">if</span>(dim == axis)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  dim_shift++;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  oCoordinates[dim + dim_shift] = &iCoordinates[dim + 1];</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="comment">// Alias for the input coordinates</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &i = iCoordinates[0];</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &bi = iCoordinates[1];</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &ci = iCoordinates[2];</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &hi = iCoordinates[3];</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &wi = iCoordinates[4];</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="comment">// Alias for the output coordinates</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &o = *(oCoordinates[0]);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &bo = *(oCoordinates[1]);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &co = *(oCoordinates[2]);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &ho = *(oCoordinates[3]);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &wo = *(oCoordinates[4]);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="comment">// Stack tensors</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">for</span>(; i < iNumTensors; ++(i))</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">for</span>(bi = 0; bi < iBatchSize; ++(bi))</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">for</span>(ci = 0; ci < iChannels; ++(ci))</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">for</span>(hi = 0; hi < iHeight; ++(hi))</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  {</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">for</span>(wi = 0; wi < iWidth; ++(wi))</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  {</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  output[o * oWidth * oHeight * oChannels * oBatchSize +</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  bo * oWidth * oHeight * oChannels +</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  co * oWidth * oHeight +</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  ho * oWidth +</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  wo];</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  output.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputs[i]->Get());</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  ++(*(inputs[i]));</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  }</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</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> {</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <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>  <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>  </div> +<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>& outputDims = outputInfo.GetShape();</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>& inputDims = inputInfo.GetShape();</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <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>  </div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <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>  <span class="keywordflow">if</span> (!axis)</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  {</div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  <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>  </div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputIdx=0; inputIdx<numInputs; ++inputIdx)</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  {</div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> elmt=0; elmt<inputLength; ++elmt)</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  {</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  (*inputs[inputIdx])[elmt];</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  output[(inputIdx * inputLength) + elmt];</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  output.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputs[inputIdx]->Get());</div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  }</div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  }</div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">return</span>;</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iNumTensors = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(data.m_Inputs.size());</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannels = (inputNumDims > 1) ? inputDims[1] : 1;</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHeight = (inputNumDims > 2) ? inputDims[2] : 1;</div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iWidth = (inputNumDims > 3) ? inputDims[3] : 1;</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  </div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <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>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannels = (outputNumDims > 2) ? outputDims[2] : 1;</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oHeight = (outputNumDims > 3) ? outputDims[3] : 1;</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oWidth = (outputNumDims > 4) ? outputDims[4] : 1;</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  </div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="comment">// Array to store the input coordinates</span></div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <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>  <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>  <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>  <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>  std::array<unsigned int, 6> iCoordinates{ 0 };</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <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>  <span class="comment">// This array is initialized with &iCoordinates[5] since this will be always zero</span></div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  std::array<unsigned int *, 5> oCoordinates = { &iCoordinates[5],</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  &iCoordinates[5],</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  &iCoordinates[5],</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  &iCoordinates[5],</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  &iCoordinates[5] };</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  </div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="comment">// Set the axis coordinate</span></div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  oCoordinates[axis] = &iCoordinates[0];</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  </div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <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>  <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>  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim = 0; dim < inputNumDims; ++dim)</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">if</span>(dim == axis)</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  dim_shift++;</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  oCoordinates[dim + dim_shift] = &iCoordinates[dim + 1];</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  </div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="comment">// Alias for the input coordinates</span></div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &i = iCoordinates[0];</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &bi = iCoordinates[1];</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &ci = iCoordinates[2];</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &hi = iCoordinates[3];</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &wi = iCoordinates[4];</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  </div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="comment">// Alias for the output coordinates</span></div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &o = *(oCoordinates[0]);</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &bo = *(oCoordinates[1]);</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &co = *(oCoordinates[2]);</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &ho = *(oCoordinates[3]);</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &wo = *(oCoordinates[4]);</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  </div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="comment">// Stack tensors</span></div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">for</span>(; i < iNumTensors; ++(i))</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">for</span>(bi = 0; bi < iBatchSize; ++(bi))</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  {</div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">for</span>(ci = 0; ci < iChannels; ++(ci))</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  {</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">for</span>(hi = 0; hi < iHeight; ++(hi))</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  {</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">for</span>(wi = 0; wi < iWidth; ++(wi))</div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  {</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  output[o * oWidth * oHeight * oChannels * oBatchSize +</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  bo * oWidth * oHeight * oChannels +</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  co * oWidth * oHeight +</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  ho * oWidth +</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  wo];</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  </div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  output.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputs[i]->Get());</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  </div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  ++(*(inputs[i]));</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  }</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  }</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  }</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</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< LayerDescriptor >::m_Parameters</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder< IType >::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> {</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordtype">bool</span> isEqual = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; isEqual && (i < N); ++i)</div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  {</div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  isEqual = (strA[i] == strB[i]);</div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  }</div> +<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">return</span> isEqual;</div> +<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> }</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> {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordtype">bool</span> isEqual = <span class="keyword">true</span>;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; isEqual && (i < N); ++i)</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  isEqual = (strA[i] == strB[i]);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  }</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">return</span> isEqual;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> }</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> {</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* input = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">></span>(inputData);</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* output = <span class="keyword">reinterpret_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">></span>(outputData);</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  </div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keyword">const</span> TensorShape inputShape = ExtendShape(inputInfo.GetShape(), 4);</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  </div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  StridedSliceDescriptor paddedParams = params;</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  </div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="comment">// Pad parameters to 4 dimensions</span></div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  PadParams(paddedParams, 4);</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  </div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <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>  <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>  </div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <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>  <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>  </div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <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>  <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>  </div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <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>  <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>  </div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> step = armnn::numeric_cast<int>(dataTypeSize);</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  </div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <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>  !LoopCondition(in0, stop0, paddedParams.m_Stride[0]);</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  in0 += paddedParams.m_Stride[0])</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <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>  !LoopCondition(in1, stop1, paddedParams.m_Stride[1]);</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  in1 += paddedParams.m_Stride[1])</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  {</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <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>  !LoopCondition(in2, stop2, paddedParams.m_Stride[2]);</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  in2 += paddedParams.m_Stride[2])</div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  {</div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <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>  !LoopCondition(in3, stop3, paddedParams.m_Stride[3]);</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  in3 += paddedParams.m_Stride[3])</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  {</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordtype">int</span> dim1 = armnn::numeric_cast<int>(inputShape[1]);</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordtype">int</span> dim2 = armnn::numeric_cast<int>(inputShape[2]);</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordtype">int</span> dim3 = armnn::numeric_cast<int>(inputShape[3]);</div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  </div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <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>  ::memcpy(output, input + inputOffset, dataTypeSize);</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  output += step;</div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  }</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</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> {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* input = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">></span>(inputData);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* output = <span class="keyword">reinterpret_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">></span>(outputData);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keyword">const</span> TensorShape inputShape = ExtendShape(inputInfo.GetShape(), 4);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  StridedSliceDescriptor paddedParams = params;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="comment">// Pad parameters to 4 dimensions</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  PadParams(paddedParams, 4);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <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>  <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> </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <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>  <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> </div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <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>  <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> </div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <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>  <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> </div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> step = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(dataTypeSize);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <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>  !LoopCondition(in0, stop0, paddedParams.m_Stride[0]);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  in0 += paddedParams.m_Stride[0])</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <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>  !LoopCondition(in1, stop1, paddedParams.m_Stride[1]);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  in1 += paddedParams.m_Stride[1])</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <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>  !LoopCondition(in2, stop2, paddedParams.m_Stride[2]);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  in2 += paddedParams.m_Stride[2])</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <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>  !LoopCondition(in3, stop3, paddedParams.m_Stride[3]);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  in3 += paddedParams.m_Stride[3])</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordtype">int</span> dim1 = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(inputShape[1]);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordtype">int</span> dim2 = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(inputShape[2]);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordtype">int</span> dim3 = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a><<span class="keywordtype">int</span>>(inputShape[3]);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <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>  ::memcpy(output, input + inputOffset, dataTypeSize);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  output += step;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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> {</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="comment">// Transfer to lower case</span></div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  std::transform(level.begin(), level.end(), level.begin(),</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  [](<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>  );</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  </div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">if</span> (level == <span class="stringliteral">"trace"</span>)</div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">return</span> LogSeverity::Trace;</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  }</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">"debug"</span>)</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  {</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <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>  }</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">"info"</span>)</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  {</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">return</span> LogSeverity::Info;</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  }</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">"warning"</span>)</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">return</span> LogSeverity::Warning;</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">"error"</span>)</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  {</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">return</span> LogSeverity::Error;</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  }</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">"fatal"</span>)</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> LogSeverity::Fatal;</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  }</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  {</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>(<span class="stringliteral">"Unknown severity level for logging: '"</span> + level +</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="stringliteral">"'. Valid options: trace, debug, info, warning, error, fatal"</span>);</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  }</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</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> {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="comment">// Transfer to lower case</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  std::transform(level.begin(), level.end(), level.begin(),</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  [](<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>  );</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">if</span> (level == <span class="stringliteral">"trace"</span>)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">return</span> LogSeverity::Trace;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">"debug"</span>)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <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>  }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">"info"</span>)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">return</span> LogSeverity::Info;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">"warning"</span>)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">return</span> LogSeverity::Warning;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">"error"</span>)</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">return</span> LogSeverity::Error;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">"fatal"</span>)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> LogSeverity::Fatal;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  }</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>(<span class="stringliteral">"Unknown severity level for logging: '"</span> + level +</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="stringliteral">"'. Valid options: trace, debug, info, warning, error, fatal"</span>);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</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 &inputInfo, const T *inputData, LayerGuid guid, const std::string &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> {</div> +<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <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>  <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>  <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>  <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>  <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> }</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< Comparable >::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< Comparable >::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> {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <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>  <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>  <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>  <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>  <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> }</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 &first, ViewsDescriptor &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> {</div> +<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <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>  <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>  <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> }</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> {</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <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>  <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>  <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> }</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 &first, ViewsDescriptor &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> {</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  std::partial_sort(indices, indices + k, indices + numElement,</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  [&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] > values[j]; });</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> }</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> {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  std::partial_sort(indices, indices + k, indices + numElement,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  [&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] > values[j]; });</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> }</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> { <span class="keywordflow">return</span> <span class="stringliteral">"TosaRef"</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> { <span class="keywordflow">return</span> <span class="stringliteral">"TosaRef"</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> {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> {</div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> }</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> { <span class="keywordflow">return</span> <span class="stringliteral">"Arm/TosaRef/TensorHandleFactory"</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> { <span class="keywordflow">return</span> <span class="stringliteral">"Arm/TosaRef/TensorHandleFactory"</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> {</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled && !biasesDecoder)</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  {</div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Biases enabled but no bias data provided"</span>);</div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  }</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <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>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <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>  </div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <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>  <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>  <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>  </div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <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>  <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>  </div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <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>  <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>  </div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  std::vector<float> outputBuffer(outputShape.GetNumElements(), 0);</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  </div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">const</span> std::vector<float> 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>  <span class="keyword">const</span> std::vector<float> 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>  </div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batch = 0u; batch < numBatches; ++batch)</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  {</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yInput = 0u; yInput < inputHeight; ++yInput)</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  {</div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xInput = 0u; xInput < inputWidth; ++xInput)</div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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>  <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>  </div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dOutput = 0u; dOutput < outputDepth; ++dOutput)</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yWeights = 0u; yWeights < weightsHeight; ++yWeights)</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  {</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xWeights = 0u; xWeights < weightsWidth; ++xWeights)</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  {</div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <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>  <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>  </div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">if</span> (yOutput < outputHeight && xOutput< outputWidth)</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dInput = 0u; dInput < inputDepth; dInput++)</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  {</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputIndex;</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputIndex;</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> weightsIndex;</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  </div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <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>  {</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  inputIndex = batch * inputHeight * inputWidth * inputDepth +</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  yInput * inputWidth * inputDepth +</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  xInput * inputDepth +</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  dInput;</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  </div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  weightsIndex = dOutput * weightsHeight * weightsWidth * weightsDepth +</div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  yWeights * weightsWidth * weightsDepth +</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  xWeights * weightsDepth +</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  dInput;</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  </div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  outputIndex = batch * outputHeight * outputWidth * outputDepth +</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  yOutput * outputWidth * outputDepth +</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  xOutput * outputDepth +</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  dOutput;</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  }</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  {</div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  inputIndex = batch * inputDepth * inputHeight * inputWidth +</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  dInput * inputHeight * inputWidth +</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  yInput * inputWidth +</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  xInput;</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  </div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  weightsIndex = dOutput * weightsDepth * weightsHeight * weightsWidth +</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  dInput * weightsHeight * weightsWidth +</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  yWeights * weightsWidth +</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  xWeights;</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  </div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  outputIndex = batch * outputDepth * outputHeight * outputWidth +</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  dOutput * outputHeight * outputWidth +</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  yOutput * outputWidth +</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  xOutput;</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  </div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  outputBuffer[outputIndex] += inputVec[inputIndex] * filterVec[weightsIndex];</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  }</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  }</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  }</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  </div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  </div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="comment">// Apply bias (if enabled)</span></div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  {</div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  outputEncoder[0];</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  Decoder<float>& rBiasesDecoder = *biasesDecoder;</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  </div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batch = 0u; batch < numBatches; ++batch)</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dOutput = 0u; dOutput < outputDepth; ++dOutput)</div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  {</div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  rBiasesDecoder[dOutput];</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yOutput = 0u; yOutput < outputHeight; ++yOutput)</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  {</div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xOutput = 0u; xOutput < outputWidth; ++xOutput)</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  {</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <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>  dataLayoutIndexed.GetIndex(outputShape, batch, dOutput, yOutput, xOutput);</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  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>  }</div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  }</div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  }</div> +<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  }</div> +<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  outputEncoder[0];</div> +<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <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>  {</div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  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>  ++outputEncoder;</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> }</div> +</div><!-- fragment --> <p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder< IType >::DecodeTensor()</a>, <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder< IType >::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< IType >::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> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled && !biasesDecoder)</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Biases enabled but no bias data provided"</span>);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  }</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <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> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <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>  <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>  <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> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <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>  <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>  <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> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <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>  <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>  <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> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <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>  <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> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <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>  <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> </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  std::vector<float> outputBuffer(outputShape.GetNumElements(), 0);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">const</span> std::vector<float> 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>  <span class="keyword">const</span> std::vector<float> 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> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batch = 0u; batch < numBatches; ++batch)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yInput = 0u; yInput < inputHeight; ++yInput)</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  {</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xInput = 0u; xInput < inputWidth; ++xInput)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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>  <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> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dOutput = 0u; dOutput < outputDepth; ++dOutput)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yWeights = 0u; yWeights < weightsHeight; ++yWeights)</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xWeights = 0u; xWeights < weightsWidth; ++xWeights)</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <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>  <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> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">if</span> (yOutput < outputHeight && xOutput< outputWidth)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dInput = 0u; dInput < inputDepth; dInput++)</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputIndex;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputIndex;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> weightsIndex;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <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>  {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  inputIndex = batch * inputHeight * inputWidth * inputDepth +</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  yInput * inputWidth * inputDepth +</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  xInput * inputDepth +</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  dInput;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  weightsIndex = dOutput * weightsHeight * weightsWidth * weightsDepth +</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  yWeights * weightsWidth * weightsDepth +</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  xWeights * weightsDepth +</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  dInput;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  outputIndex = batch * outputHeight * outputWidth * outputDepth +</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  yOutput * outputWidth * outputDepth +</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  xOutput * outputDepth +</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  dOutput;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  inputIndex = batch * inputDepth * inputHeight * inputWidth +</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  dInput * inputHeight * inputWidth +</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  yInput * inputWidth +</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  xInput;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  weightsIndex = dOutput * weightsDepth * weightsHeight * weightsWidth +</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  dInput * weightsHeight * weightsWidth +</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  yWeights * weightsWidth +</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  xWeights;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  outputIndex = batch * outputDepth * outputHeight * outputWidth +</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  dOutput * outputHeight * outputWidth +</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  yOutput * outputWidth +</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  xOutput;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  outputBuffer[outputIndex] += inputVec[inputIndex] * filterVec[weightsIndex];</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  }</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  }</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="comment">// Apply bias (if enabled)</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  outputEncoder[0];</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  Decoder<float>& rBiasesDecoder = *biasesDecoder;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batch = 0u; batch < numBatches; ++batch)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dOutput = 0u; dOutput < outputDepth; ++dOutput)</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  rBiasesDecoder[dOutput];</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yOutput = 0u; yOutput < outputHeight; ++yOutput)</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xOutput = 0u; xOutput < outputWidth; ++xOutput)</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <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>  dataLayoutIndexed.GetIndex(outputShape, batch, dOutput, yOutput, xOutput);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  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>  }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  }</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  outputEncoder[0];</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <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>  {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  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>  ++outputEncoder;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> }</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< float > DecodeTensor(const TensorShape &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">◆ </a></span>TrueFunc()</h2> +<a id="a1c60a2624c7cabd60237bbeec07c70a0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1c60a2624c7cabd60237bbeec07c70a0">◆ </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>< std::string &> </td> + <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>< std::string & > </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> {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(reasonIfUnsupported);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</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 &&...)</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> {</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(reasonIfUnsupported);</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</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> {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="comment">// Find the "Global" 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>  <span class="comment">// added as backend options.</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keyword">const</span> vector<BackendOptions>::iterator& backendItr =</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  find_if(optimizedOptions.begin(), optimizedOptions.end(), [](<span class="keyword">const</span> BackendOptions& backend) {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">if</span> (backend.GetBackendId().Get() == <span class="stringliteral">"Global"</span>)</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  {</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  });</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordtype">bool</span> importEnabled = <span class="keyword">false</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordtype">bool</span> exportEnabled = <span class="keyword">false</span>;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">if</span> (backendItr != optimizedOptions.end())</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="comment">// Find the importEnabled and exportEnabled values.</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < backendItr->GetOptionCount(); i++)</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">const</span> BackendOptions::BackendOption& option = backendItr->GetOption(i);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">if</span> (option.GetName() == <span class="stringliteral">"ImportEnabled"</span>)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  importEnabled = option.GetValue().AsBool();</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">if</span> (option.GetName() == <span class="stringliteral">"ExportEnabled"</span>)</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  exportEnabled = option.GetValue().AsBool();</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <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>  <span class="comment">// Any value of MemorySource that's not "Undefined" 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>  <span class="keywordflow">if</span> ((networkProperties.m_InputSource == MemorySource::Undefined && importEnabled) ||</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  (networkProperties.m_InputSource != MemorySource::Undefined && !importEnabled))</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keyword">auto</span> message = fmt::format(<span class="stringliteral">"The input memory source specified, '{0}',"</span>, networkProperties.m_InputSource);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">if</span> (!importEnabled)</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  message.append(<span class="stringliteral">" requires that memory import be enabled. However, "</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="stringliteral">"it was disabled when this network was optimized."</span>);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  message.append(<span class="stringliteral">" requires that memory import be disabled. However, "</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="stringliteral">"it was enabled when this network was optimized."</span>);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">throw</span> InvalidArgumentException(message);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">if</span> ((networkProperties.m_OutputSource == MemorySource::Undefined && exportEnabled) ||</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  (networkProperties.m_OutputSource != MemorySource::Undefined && !exportEnabled))</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">auto</span> message = fmt::format(<span class="stringliteral">"The output memory source specified, '{0}',"</span>, networkProperties.m_OutputSource);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">if</span> (!exportEnabled)</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  message.append(<span class="stringliteral">" requires that memory export be enabled. However, "</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="stringliteral">"it was disabled when this network was optimized."</span>);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  message.append(<span class="stringliteral">" requires that memory export be disabled. However, "</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="stringliteral">"it was enabled when this network was optimized."</span>);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">throw</span> InvalidArgumentException(message);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> } <span class="comment">// anonymous</span></div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> {</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="comment">// Find the "Global" 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>  <span class="comment">// added as backend options.</span></div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keyword">const</span> vector<BackendOptions>::iterator& backendItr =</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  find_if(optimizedOptions.begin(), optimizedOptions.end(), [](<span class="keyword">const</span> BackendOptions& backend) {</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  if (backend.GetBackendId().Get() == <span class="stringliteral">"Global"</span>)</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  {</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  return true;</div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  }</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  {</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  return false;</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  }</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  });</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordtype">bool</span> importEnabled = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordtype">bool</span> exportEnabled = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">if</span> (backendItr != optimizedOptions.end())</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  {</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="comment">// Find the importEnabled and exportEnabled values.</span></div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < backendItr->GetOptionCount(); i++)</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  {</div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">const</span> BackendOptions::BackendOption& option = backendItr->GetOption(i);</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">if</span> (option.GetName() == <span class="stringliteral">"ImportEnabled"</span>)</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  importEnabled = option.GetValue().AsBool();</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">if</span> (option.GetName() == <span class="stringliteral">"ExportEnabled"</span>)</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  {</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  exportEnabled = option.GetValue().AsBool();</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  </div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <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>  <span class="comment">// Any value of MemorySource that's not "Undefined" 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>  <span class="keywordflow">if</span> ((networkProperties.m_InputSource == MemorySource::Undefined && importEnabled) ||</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  (networkProperties.m_InputSource != MemorySource::Undefined && !importEnabled))</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keyword">auto</span> message = fmt::format(<span class="stringliteral">"The input memory source specified, '{0}',"</span>, networkProperties.m_InputSource);</div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">if</span> (!importEnabled)</div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  {</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  message.append(<span class="stringliteral">" requires that memory import be enabled. However, "</span></div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="stringliteral">"it was disabled when this network was optimized."</span>);</div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  {</div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  message.append(<span class="stringliteral">" requires that memory import be disabled. However, "</span></div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="stringliteral">"it was enabled when this network was optimized."</span>);</div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">throw</span> InvalidArgumentException(message);</div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  }</div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  </div> +<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">if</span> ((networkProperties.m_OutputSource == MemorySource::Undefined && exportEnabled) ||</div> +<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  (networkProperties.m_OutputSource != MemorySource::Undefined && !exportEnabled))</div> +<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  {</div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">auto</span> message = fmt::format(<span class="stringliteral">"The output memory source specified, '{0}',"</span>, networkProperties.m_OutputSource);</div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">if</span> (!exportEnabled)</div> +<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  {</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  message.append(<span class="stringliteral">" requires that memory export be enabled. However, "</span></div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="stringliteral">"it was disabled when this network was optimized."</span>);</div> +<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  }</div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  {</div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  message.append(<span class="stringliteral">" requires that memory export be disabled. However, "</span></div> +<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="stringliteral">"it was enabled when this network was optimized."</span>);</div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div> +<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">throw</span> InvalidArgumentException(message);</div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  }</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> } <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>  {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">return</span> verifier.VerifyBuffer<armnn::ClContext>(<a class="code" href="namespacearmnn.xhtml#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a>());</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> }</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>  {</div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">return</span> verifier.VerifyBuffer<armnn::ClContext>(<a class="code" href="namespacearmnn.xhtml#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a>());</div> +<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> }</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>  {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">return</span> verifier.VerifySizePrefixedBuffer<armnn::ClContext>(<a class="code" href="namespacearmnn.xhtml#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a>());</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</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>  {</div> +<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">return</span> verifier.VerifySizePrefixedBuffer<armnn::ClContext>(<a class="code" href="namespacearmnn.xhtml#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a>());</div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</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> {</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <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>  {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  std::stringstream ss;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  ss << <span class="stringliteral">"Unexpected datatype:"</span> << <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>  << <span class="stringliteral">" for tensor:"</span> << 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>  << <span class="stringliteral">". The type expected to be: "</span> << <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">armnn::GetDataTypeName</a>(dataType);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <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>  }</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span> }</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 & 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> {</div> +<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <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>  {</div> +<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  std::stringstream ss;</div> +<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  ss << <span class="stringliteral">"Unexpected datatype:"</span> << <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>  << <span class="stringliteral">" for tensor:"</span> << <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetShape()</div> +<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  << <span class="stringliteral">". The type expected to be: "</span> << <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">armnn::GetDataTypeName</a>(dataType);</div> +<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <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>  }</div> +<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> }</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> & </td> + <td class="paramtype">const cl::Error & </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> {</div> +<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  std::stringstream message;</div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  message << <span class="stringliteral">"CL error: "</span> << clError.what() << <span class="stringliteral">". Error code: "</span> << clError.err();</div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  </div> +<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">return</span> RuntimeException(message.str(), location);</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> }</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> {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  std::stringstream message;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  message << <span class="stringliteral">"CL error: "</span> << clError.what() << <span class="stringliteral">". Error code: "</span> << clError.err();</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">return</span> RuntimeException(message.str(), location);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> }</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 &paramsInfo, const TensorInfo &indicesInfo, const TensorInfo &outputInfo, Decoder< float > &params, const int32_t *indices, Encoder< float > &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 &data, std::vector< std::unique_ptr< Decoder< float >>> &inputs, Encoder< float > &output, const TensorInfo &inputInfo, const TensorInfo &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 &inputInfo, const DepthToSpaceDescriptor &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< float > &in, OUT *out, const TensorInfo &inputTensorInfo, const TensorInfo &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 &dstShape, const armnn::PermutationVector &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< float > &rInputDecoder, Encoder< float > &rOutputEncoder, const TensorInfo &inputInfo, const TensorInfo &outputInfo, const Pooling2dDescriptor &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 &rInputShape, Decoder< float > &rInputDecoder, const TensorShape &rOutputShape, Encoder< float > &rOutputEncoder, const TensorShape &rWeightsShape, Decoder< float > &rWeightDecoder, Decoder< float > *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< Layer, AddDebugToFileImpl > 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< Program > CreateProgram(flatbuffers::FlatBufferBuilder &_fbb, flatbuffers::Offset< flatbuffers::String > name=0, flatbuffers::Offset< flatbuffers::Vector< uint8_t >> 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 &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< ConvertFp16ToFp32Layer, ConvertFp32ToFp16Layer, OptimizeInverseConversionsImpl > 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 &inputInfo, const SliceDescriptor &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< ClContext > CreateClContext(flatbuffers::FlatBufferBuilder &_fbb, flatbuffers::Offset< flatbuffers::Vector< flatbuffers::Offset< armnn::Program >>> 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< float > &vector, uint32_t vSize, armnn::Encoder< float > &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 &optGraph, BackendsMap &backends, TensorHandleFactoryRegistry &registry, bool importEnabled, bool exportEnabled, Optional< std::vector< std::string > & > errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.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 &backendSettings, SubgraphView &subgraph, Optional< std::vector< std::string > & > 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 &input, const TensorInfo &output, const ReduceDescriptor &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 &dataLayout, const TensorInfo &inputTensorInfo, const TensorInfo &outputTensorInfo, const std::vector< unsigned int > &blockShape, const std::vector< std::pair< unsigned int, unsigned int >> &cropsData, Decoder< float > &inputDecoder, Encoder< float > &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< std::string, unsigned int > 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 & 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< PadLayer, Convolution2dLayer, pad_fold::FoldPadIntoConvolution2dImpl > 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 &inputInfo, const DepthToSpaceDescriptor &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 &dims, std::vector< unsigned int > &index, const unsigned int numAxis, const std::vector< unsigned int > &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 &data, std::vector< std::unique_ptr< Decoder< float >>> &inputs, Encoder< float > &output, const TensorInfo &inputInfo, const TensorInfo &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 &outArmnnActivation, float &outA, float &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< float > &in, Encoder< float > &out, const TensorInfo &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< ConstantLayer, PermuteLayer, ConvertConstPermuteLayersToConstLayers > 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< ConvertFp32ToFp16Layer * > InsertConvertFp32ToFp16LayersAfter(Graph &graph, Layer &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< IOptimizedNetwork, void(*)(IOptimizedNetwork *network)> 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 &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< Layer, TransposeLayer, MoveTransposeUpImpl > 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 &optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &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< unsigned int > 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< float > &vector, uint32_t vSize, armnn::Decoder< float > &batchVector, uint32_t nBatch, armnn::Encoder< float > &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< float > &in, OUT *out, const TensorInfo &inputTensorInfo, const TensorInfo &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< float > &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 &backendSettings, Optional< std::vector< std::string > & > 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< BackendId, std::unique_ptr< class IBackendInternal > > 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< float > &vector1, armnn::Decoder< float > &vector2, uint32_t vSize, armnn::Encoder< float > &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< ConvertFp32ToFp16Layer, ConvertFp16ToFp32Layer, OptimizeInverseConversionsImpl > 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 &dims, std::vector< unsigned int > &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 &backends, OutputSlot &slot, TensorHandleFactoryRegistry &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 &backendSettings, Graph &graph, Layer *layer, BackendId backend, DataType dataTypeIn, DataType dataTypeOut, const std::vector< BackendId > &availablePreferredBackends, std::string &reasonIfUnsupported, Optional< std::vector< std::string > & > 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< float > &vector, uint32_t vSize, armnn::Decoder< float > &batchVector, uint32_t nBatch, armnn::Encoder< float > &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< std::pair< unsigned int, unsigned int > > 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 &backendSettings, BackendsMap &backends, const ModelOptions &modelOptions, Optional< std::vector< std::string > & > 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 &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< const BackendOptions::BackendOption > GetCapability(const std::string &backendCapabilityName, const BackendCapabilities &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 &armnnAxis, const armnn::TensorInfo &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< TransposeLayer, TransposeLayer, OptimizeInversePermutesImpl< TransposeLayer > > 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< float > &input_vector, armnn::Encoder< float > &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 &inputInfo, const TensorInfo &outputInfo, const ITensorHandle *inputHandle, ITensorHandle *outputHandle, const PadQueueDescriptor &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 &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 &shape, unsigned int batch, unsigned int height, unsigned int width, unsigned int channels, const DataLayoutIndexed &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< BackendOptions > 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 &rInputShape, Decoder< float > &rInputDecoder, const TensorShape &rOutputShape, Encoder< float > &rOutputEncoder, const TensorShape &rWeightsShape, Decoder< float > &rWeightDecoder, Decoder< float > *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< Layer, ReshapeLayer, SquashEqualSiblingsImpl< ReshapeLayer > > 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 &&...)</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 &inputInfo, const StridedSliceDescriptor &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< Layer, AddBroadcastReshapeLayerImpl > 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 &input, const std::vector< uint32_t > &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 &handleFactoryRegistry, BackendSettings &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 &&... 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< Layer, PermuteLayer, MovePermuteUpImpl > 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 &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< Float32ToFloat16, IsFloat16Layer > 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< float > &vector1, armnn::Decoder< float > &vector2, uint32_t vSize, armnn::Encoder< float > &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 &first, ViewsDescriptor &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 &warningMessage, Optional< std::vector< std::string > & > 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< Layer, PermuteDepthwiseConv2dWeightsImpl > 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< T & > optionalRef, V &&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< std::is_reference< T >::value, T >::value</a></div><div class="ttdeci">const T & 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< Layer, TransposeLayer, SquashEqualSiblingsImpl< TransposeLayer > > 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< int > &m_begin, const std::vector< int > &m_end, const std::vector< int > &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< float > &rInputDecoder, Encoder< float > &rOutputEncoder, const TensorInfo &inputInfo, const TensorInfo &outputInfo, const Pooling3dDescriptor &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 &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 &srcShape, const armnn::PermutationVector &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< DataType > 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 &inputInfo, const T *inputData, LayerGuid guid, const std::string &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 &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 &layerInfos, LayerSelectionInfo &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 &inputInfo, const TensorInfo &outputInfo, Decoder< float > &input, Encoder< float > &output, const std::vector< uint32_t > 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< int > &m_begin, const std::vector< int > &m_end, const std::vector< int > &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< float > &vector, uint32_t vSize, uint32_t nBatch, armnn::Encoder< float > &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< unsigned int > &m_begin, const std::vector< unsigned int > &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 &clError, const CheckLocation &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 &errorMessage, Optional< std::vector< std::string > & > 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< float > &input, Encoder< float > &output, const TensorInfo &inputInfo, const LogSoftmaxDescriptor &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< OptimizedNetworkImpl > 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 &input, const TensorInfo &output, const ReduceDescriptor &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< TensorInfo, unsigned int > Convert1HWOTensorInfoToAcl(const TensorInfo &weightInfo, const TensorInfo &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< float > &rInputDecoder, Encoder< float > &rOutputEncoder, const TensorInfo &inputInfo, const TensorInfo &outputInfo, const Pooling2dDescriptor &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 &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 &boxEncodingsInfo, const TensorInfo &scoresInfo, const TensorInfo &anchorsInfo, const TensorInfo &detectionBoxesInfo, const TensorInfo &detectionClassesInfo, const TensorInfo &detectionScoresInfo, const TensorInfo &numDetectionsInfo, const DetectionPostProcessDescriptor &desc, Decoder< float > &boxEncodings, Decoder< float > &scores, Decoder< float > &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< float > &in, Encoder< float > &out, const TensorInfo &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< Layer, ConvertFp32NetworkToFp16Impl > 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 >= 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< Layer, AddDebugImpl > 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(&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 &paramsInfo, const TensorInfo &indicesInfo, const TensorInfo &outputInfo, Decoder< float > &params, const int32_t *indices, Encoder< float > &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< float > &matrix, uint32_t mRows, uint32_t mCols, armnn::Decoder< float > &vector, uint32_t nBatch, armnn::Encoder< float > &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< DepthwiseConvolution2dLayer, BatchNormalizationLayer, FuseBatchNorm< DepthwiseConvolution2dLayer, armnn::DataType::Float16 > > 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< TransposeLayer, TransposeAsReshapeImpl > 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 &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 &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 & 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 &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 &shape, unsigned int b, unsigned int h, unsigned int w, unsigned int c, const DataLayoutIndexed &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 &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 &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 &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< float > &output, const TensorShape &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 &data, std::vector< ITensorHandle * > inputs, std::vector< ITensorHandle * > 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< unsigned int > 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 &backends, ITensorHandleFactory::FactoryId srcFactoryId, const Layer &layer, const Layer &connectedLayer, TensorHandleFactoryRegistry &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< PadLayer, DepthwiseConvolution2dLayer, pad_fold::FoldPadIntoDepthwiseConvolution2dImpl > 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< std::vector< std::string > & > errMessages, OptimizationResult &result, BackendSettings &backendSettings, std::vector< BackendId > &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< PermuteLayer, BatchToSpaceNdLayer, PermuteAndBatchToSpaceAsDepthToSpaceImpl< PermuteLayer > > PermuteAndBatchToSpaceAsDepthToSpace</div><div class="ttdef"><b>Definition:</b> <a href="_permute_and_batch_to_space_as_depth_to_space_8hpp_source.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 &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 &backends, OutputSlot &outputSlot, TensorHandleFactoryRegistry &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< ConstantLayer, DequantizeLayer, ConvertConstDequantisationLayersToConstLayersImpl > 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< PermuteLayer, PermuteLayer, OptimizeInversePermutesImpl< PermuteLayer > > 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< unsigned int > &m_begin, const std::vector< unsigned int > &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< Convolution2dLayer, BatchNormalizationLayer, FuseBatchNorm< Convolution2dLayer, armnn::DataType::Float16 > > 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 &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< PadLayer, Pooling2dLayer, pad_fold::FoldPadIntoPooling2dImpl > 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< float > &vector, uint32_t vSize, armnn::Decoder< float > &batchVector, uint32_t nBatch, armnn::Encoder< float > &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< unsigned int, std::vector< float > > GetPerAxisParams(const armnn::TensorInfo &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< Convolution2dLayer, BatchNormalizationLayer, FuseBatchNorm< Convolution2dLayer, armnn::DataType::Float32 > > 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 &dstShape, const armnn::PermutationVector &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 &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< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > 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< std::vector< std::string > & > 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< Layer, PermuteLayer, SquashEqualSiblingsImpl< PermuteLayer > > 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< ConvertFp16ToFp32Layer * > InsertConvertFp16ToFp32LayersBefore(Graph &graph, Layer &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< DepthwiseConvolution2dLayer, BatchNormalizationLayer, FuseBatchNorm< DepthwiseConvolution2dLayer, armnn::DataType::Float32 > > 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 &inputInfo, const TensorInfo &outputInfo, const SpaceToDepthDescriptor &params, Decoder< float > &inputData, Encoder< float > &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< float > DecodeTensor(const TensorShape &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 &parentObject, std::map< const Event *, std::vector< const Event * >> 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< Float16ToFloat32, IsFloat32Layer > 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< unsigned int > NonMaxSuppression(unsigned int numBoxes, const std::vector< float > &boxCorners, const std::vector< float > &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< float > &in, const TensorInfo &inputInfo, Encoder< float > &out, const TensorInfo &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: "X.Y.Z" 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 &network, const std::vector< BackendId > &backendPreferences, const IDeviceSpec &deviceSpec, const OptimizerOptions &options=OptimizerOptions(), Optional< std::vector< std::string > & > 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 &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< float > &boxCorners, const std::vector< unsigned int > &outputIndices, const std::vector< unsigned int > &selectedBoxes, const std::vector< unsigned int > &selectedClasses, const std::vector< float > &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 & 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< PermuteLayer, PermuteAsReshapeImpl > 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 &optimizations, Front &&front, Others &&... 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< unsigned int, MaxNumOfTensorDimensions > 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 &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< ReshapeLayer, ReshapeLayer, OptimizeConsecutiveReshapesImpl > 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< float > &vector, uint32_t vSize, armnn::Encoder< float > &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< TransposeLayer, BatchToSpaceNdLayer, PermuteAndBatchToSpaceAsDepthToSpaceImpl< TransposeLayer > > TransposeAndBatchToSpaceAsDepthToSpace</div><div class="ttdef"><b>Definition:</b> <a href="_permute_and_batch_to_space_as_depth_to_space_8hpp_source.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 &name, const BackendCapabilities &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< float > &vector, uint32_t vSize, float absLimit, armnn::Encoder< float > &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 &backends, OutputSlot &slot, TensorHandleFactoryRegistry &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 &dstShape, const armnn::PermutationVector &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 &inputInfo, const TensorInfo &outputInfo, const SpaceToBatchNdDescriptor &params, Decoder< float > &inputData, Encoder< float > &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> |