blob: d19d94e76c42dd84c6c035241ceb47b39171dbad [file] [log] [blame]
<!-- HTML header for doxygen 1.8.17-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Arm NN: armnn Namespace Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX","output/HTML-CSS"],
});
</script>
<script type="text/javascript" async="async" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 15rem; margin-top: .5rem; margin-left 13px"/>
<td id="projectalign" style="padding-left: 0.9em;">
<div id="projectname">
&#160;<span id="projectnumber">24.05</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('namespacearmnn.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#namespaces">Namespaces</a> &#124;
<a href="#nested-classes">Classes</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> &#124;
<a href="#var-members">Variables</a> </div>
<div class="headertitle">
<div class="title">armnn Namespace Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Copyright (c) 2021 ARM Limited and Contributors.
<a href="namespacearmnn.html#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
Namespaces</h2></td></tr>
<tr class="memitem:namespacearmnn_1_1experimental"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn_1_1experimental.html">experimental</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:namespacearmnn_1_1optimizations"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn_1_1optimizations.html">optimizations</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:namespacearmnn_1_1profiling"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn_1_1profiling.html">profiling</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:namespacearmnn_1_1string_utils"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn_1_1string_utils.html">stringUtils</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:namespacearmnn_1_1timelinedecoder"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn_1_1timelinedecoder.html">timelinedecoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:namespacearmnn_1_1utility"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn_1_1utility.html">utility</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1abs.html">abs</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_abs_layer.html">AbsLayer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_abs_queue_descriptor.html">AbsQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An <a class="el" href="structarmnn_1_1_activation_descriptor.html" title="An ActivationDescriptor for the ActivationLayer.">ActivationDescriptor</a> for the <a class="el" href="classarmnn_1_1_activation_layer.html" title="This layer represents an activation operation with the specified activation function.">ActivationLayer</a>. <a href="structarmnn_1_1_activation_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents an activation operation with the specified activation function. <a href="classarmnn_1_1_activation_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_activation_queue_descriptor.html">ActivationQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_added_layer_observable.html">AddedLayerObservable</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_addition_layer.html">AdditionLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents an addition operation. <a href="classarmnn_1_1_addition_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_addition_queue_descriptor.html">AdditionQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_allocator.html">Allocator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_arg_min_max_descriptor.html">ArgMinMaxDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An <a class="el" href="structarmnn_1_1_arg_min_max_descriptor.html" title="An ArgMinMaxDescriptor for ArgMinMaxLayer.">ArgMinMaxDescriptor</a> for <a class="el" href="classarmnn_1_1_arg_min_max_layer.html" title="This layer represents a ArgMinMax operation.">ArgMinMaxLayer</a>. <a href="structarmnn_1_1_arg_min_max_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_arg_min_max_layer.html">ArgMinMaxLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a ArgMinMax operation. <a href="classarmnn_1_1_arg_min_max_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_arg_min_max_queue_descriptor.html">ArgMinMaxQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_arm_n_n_profiling_service_initialiser.html">ArmNNProfilingServiceInitialiser</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_backend_capability_exception.html">BackendCapabilityException</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_backend_options.html">BackendOptions</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Struct for the users to pass backend specific options. <a href="structarmnn_1_1_backend_options.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_backend_registry.html">BackendRegistry</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_backend_settings.html">BackendSettings</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_backend_unavailable_exception.html">BackendUnavailableException</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class for non-fatal exceptions raised while initialising a backend. <a href="classarmnn_1_1_backend_unavailable_exception.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_backend_version.html">BackendVersion</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_bad_optional_access_exception.html">BadOptionalAccessException</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_base_descriptor.html">BaseDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base class for all descriptors. <a href="structarmnn_1_1_base_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_base_iterator.html">BaseIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_base_memory_manager.html">BaseMemoryManager</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_base_tensor.html">BaseTensor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_base_workload.html">BaseWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_batch_mat_mul.html">BatchMatMul</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_batch_mat_mul_descriptor.html">BatchMatMulDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_batch_mat_mul_descriptor.html" title="A BatchMatMulDescriptor for the BatchMatMul operator.">BatchMatMulDescriptor</a> for the <a class="el" href="classarmnn_1_1_batch_mat_mul.html">BatchMatMul</a> operator. <a href="structarmnn_1_1_batch_mat_mul_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_batch_mat_mul_layer.html">BatchMatMulLayer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_batch_mat_mul_queue_descriptor.html">BatchMatMulQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_batch_normalization_descriptor.html">BatchNormalizationDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_batch_normalization_descriptor.html" title="A BatchNormalizationDescriptor for the BatchNormalizationLayer.">BatchNormalizationDescriptor</a> for the <a class="el" href="classarmnn_1_1_batch_normalization_layer.html" title="This layer represents a batch normalization operation.">BatchNormalizationLayer</a>. <a href="structarmnn_1_1_batch_normalization_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_batch_normalization_layer.html">BatchNormalizationLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a batch normalization operation. <a href="classarmnn_1_1_batch_normalization_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_batch_normalization_queue_descriptor.html">BatchNormalizationQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_batch_to_space_nd_descriptor.html">BatchToSpaceNdDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_batch_to_space_nd_descriptor.html" title="A BatchToSpaceNdDescriptor for the BatchToSpaceNdLayer.">BatchToSpaceNdDescriptor</a> for the <a class="el" href="classarmnn_1_1_batch_to_space_nd_layer.html" title="This layer represents a BatchToSpaceNd operation.">BatchToSpaceNdLayer</a>. <a href="structarmnn_1_1_batch_to_space_nd_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_batch_to_space_nd_layer.html">BatchToSpaceNdLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a BatchToSpaceNd operation. <a href="classarmnn_1_1_batch_to_space_nd_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_batch_to_space_nd_queue_descriptor.html">BatchToSpaceNdQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_b_float16.html">BFloat16</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_bias_and_weights_types_compatible.html">BiasAndWeightsTypesCompatible</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_bias_and_weights_types_match.html">BiasAndWeightsTypesMatch</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_bindable_layer.html">BindableLayer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_boolean_decoder.html">BooleanDecoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_boolean_decoder_bool.html">BooleanDecoderBool</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_boolean_encoder.html">BooleanEncoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_broadcast_loop.html">BroadcastLoop</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_broadcast_to_descriptor.html">BroadcastToDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_broadcast_to_layer.html">BroadcastToLayer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_broadcast_to_queue_descriptor.html">BroadcastToQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_buffer_storage.html">BufferStorage</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_capability.html">Capability</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structarmnn_1_1_capability.html" title="Capability of the TensorHandleFactory.">Capability</a> of the TensorHandleFactory. <a href="structarmnn_1_1_capability.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cast_layer.html">CastLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a cast operation. <a href="classarmnn_1_1_cast_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_cast_queue_descriptor.html">CastQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1ceil.html">ceil</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_channel_shuffle_descriptor.html">ChannelShuffleDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_channel_shuffle_descriptor.html" title="A ChannelShuffleDescriptor for the ChannelShuffle operator.">ChannelShuffleDescriptor</a> for the ChannelShuffle operator. <a href="structarmnn_1_1_channel_shuffle_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_channel_shuffle_layer.html">ChannelShuffleLayer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_channel_shuffle_queue_descriptor.html">ChannelShuffleQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_check_location.html">CheckLocation</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_abs_workload.html">ClAbsWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_activation_workload.html">ClActivationWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_addition_workload.html">ClAdditionWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_arg_min_max_workload.html">ClArgMinMaxWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_backend.html">ClBackend</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_backend_context.html">ClBackendContext</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_backend_default_allocator.html">ClBackendDefaultAllocator</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default Memory <a class="el" href="structarmnn_1_1_allocator.html">Allocator</a> class returned from IBackendInternal::GetDefaultAllocator(MemorySource) <a href="classarmnn_1_1_cl_backend_default_allocator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_backend_model_context.html">ClBackendModelContext</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The <a class="el" href="classarmnn_1_1_cl_backend_model_context.html" 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.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_base_workload.html">ClBaseWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_batch_mat_mul_workload.html">ClBatchMatMulWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_batch_normalization_float_workload.html">ClBatchNormalizationFloatWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_batch_to_space_nd_workload.html">ClBatchToSpaceNdWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_cast_workload.html">ClCastWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_channel_shuffle_workload.html">ClChannelShuffleWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_comparison_workload.html">ClComparisonWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_concat_workload.html">ClConcatWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_constant_workload.html">ClConstantWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_cl_context_builder.html">ClContextBuilder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_context_control.html">ClContextControl</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_context_deserializer.html">ClContextDeserializer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_context_serializer.html">ClContextSerializer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_convert_fp16_to_fp32_workload.html">ClConvertFp16ToFp32Workload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_convert_fp32_to_fp16_workload.html">ClConvertFp32ToFp16Workload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_convolution2d_workload.html">ClConvolution2dWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_convolution3d_workload.html">ClConvolution3dWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_depth_to_space_workload.html">ClDepthToSpaceWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_depthwise_convolution_workload.html">ClDepthwiseConvolutionWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_dequantize_workload.html">ClDequantizeWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_division_workload.html">ClDivisionWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_elementwise_binary_workload.html">ClElementwiseBinaryWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_exp_workload.html">ClExpWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_fill_workload.html">ClFillWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_floor_float_workload.html">ClFloorFloatWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_fully_connected_workload.html">ClFullyConnectedWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_gather_nd_workload.html">ClGatherNdWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_gather_workload.html">ClGatherWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_import_sub_tensor_handle.html">ClImportSubTensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_import_tensor_handle.html">ClImportTensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_import_tensor_handle_factory.html">ClImportTensorHandleFactory</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This factory creates ClImportTensorHandles that refer to imported memory tensors. <a href="classarmnn_1_1_cl_import_tensor_handle_factory.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_instance_normalization_workload.html">ClInstanceNormalizationWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_l2_normalization_float_workload.html">ClL2NormalizationFloatWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_layer_support.html">ClLayerSupport</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_logical_and_workload.html">ClLogicalAndWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_logical_not_workload.html">ClLogicalNotWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_logical_or_workload.html">ClLogicalOrWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_log_softmax_workload.html">ClLogSoftmaxWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_log_workload.html">ClLogWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_lstm_float_workload.html">ClLstmFloatWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_maximum_workload.html">ClMaximumWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_mean_workload.html">ClMeanWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_memory_manager.html">ClMemoryManager</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_minimum_workload.html">ClMinimumWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_multiplication_workload.html">ClMultiplicationWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_neg_workload.html">ClNegWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_normalization_float_workload.html">ClNormalizationFloatWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_pad_workload.html">ClPadWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_permute_workload.html">ClPermuteWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_pooling2d_workload.html">ClPooling2dWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_pooling3d_workload.html">ClPooling3dWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_prelu_workload.html">ClPreluWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_q_lstm_workload.html">ClQLstmWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_quantized_lstm_workload.html">ClQuantizedLstmWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_quantize_workload.html">ClQuantizeWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_cl_rank_workload.html">ClRankWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_reduce_workload.html">ClReduceWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_reshape_workload.html">ClReshapeWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_resize_workload.html">ClResizeWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_reverse_v2_workload.html">ClReverseV2Workload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_rsqrt_workload.html">ClRsqrtWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_runtime_unavailable_exception.html">ClRuntimeUnavailableException</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_scatter_nd_workload.html">ClScatterNdWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_sin_workload.html">ClSinWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_slice_workload.html">ClSliceWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_softmax_workload.html">ClSoftmaxWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_space_to_batch_nd_workload.html">ClSpaceToBatchNdWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_space_to_depth_workload.html">ClSpaceToDepthWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_splitter_workload.html">ClSplitterWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_sqrt_workload.html">ClSqrtWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_stack_workload.html">ClStackWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_strided_slice_workload.html">ClStridedSliceWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_sub_tensor_handle.html">ClSubTensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_subtraction_workload.html">ClSubtractionWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_tensor_decorator.html">ClTensorDecorator</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classarmnn_1_1_cl_tensor_decorator.html" title="ClTensorDecorator wraps an existing CL tensor allowing us to override the TensorInfo for it.">ClTensorDecorator</a> wraps an existing CL tensor allowing us to override the <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> for it. <a href="classarmnn_1_1_cl_tensor_decorator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_tensor_handle.html">ClTensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_tensor_handle_decorator.html">ClTensorHandleDecorator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_tensor_handle_factory.html">ClTensorHandleFactory</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_tile_workload.html">ClTileWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_transpose_convolution2d_workload.html">ClTransposeConvolution2dWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_transpose_workload.html">ClTransposeWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_tuned_parameters.html">ClTunedParameters</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_unidirectional_sequence_lstm_float_workload.html">ClUnidirectionalSequenceLstmFloatWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_workload_factory.html">ClWorkloadFactory</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_comparison_descriptor.html">ComparisonDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_comparison_descriptor.html" title="A ComparisonDescriptor for the ComparisonLayer.">ComparisonDescriptor</a> for the <a class="el" href="classarmnn_1_1_comparison_layer.html" title="This layer represents a comparison operation.">ComparisonLayer</a>. <a href="structarmnn_1_1_comparison_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_comparison_layer.html">ComparisonLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a comparison operation. <a href="classarmnn_1_1_comparison_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_comparison_queue_descriptor.html">ComparisonQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_concat_layer.html">ConcatLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a merge operation. <a href="classarmnn_1_1_concat_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_concat_queue_descriptor.html">ConcatQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_constant_layer.html">ConstantLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A layer that the constant data can be bound to. <a href="classarmnn_1_1_constant_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_constant_memory_strategy.html">ConstantMemoryStrategy</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_constant_queue_descriptor.html">ConstantQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_const_passthrough_tensor_handle.html">ConstPassthroughTensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_construct_in_place.html">ConstructInPlace</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Disambiguation tag that can be passed to the constructor to indicate that the contained object should be constructed in-place. <a href="structarmnn_1_1_construct_in_place.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_const_tensor.html">ConstTensor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A tensor defined by a <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> (shape and data type) and an immutable backing store. <a href="classarmnn_1_1_const_tensor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_const_tensor_handle.html">ConstTensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_convert_fp16_to_fp32_layer.html">ConvertFp16ToFp32Layer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer converts data type Float 16 to Float 32. <a href="classarmnn_1_1_convert_fp16_to_fp32_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_convert_fp16_to_fp32_queue_descriptor.html">ConvertFp16ToFp32QueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_convert_fp32_to_fp16_layer.html">ConvertFp32ToFp16Layer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer converts data type Float 32 to Float 16. <a href="classarmnn_1_1_convert_fp32_to_fp16_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_convert_fp32_to_fp16_queue_descriptor.html">ConvertFp32ToFp16QueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_convolution2d_descriptor.html">Convolution2dDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_convolution2d_descriptor.html" title="A Convolution2dDescriptor for the Convolution2dLayer.">Convolution2dDescriptor</a> for the <a class="el" href="classarmnn_1_1_convolution2d_layer.html" title="This layer represents a convolution 2d operation.">Convolution2dLayer</a>. <a href="structarmnn_1_1_convolution2d_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_convolution2d_layer.html">Convolution2dLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a convolution 2d operation. <a href="classarmnn_1_1_convolution2d_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_convolution2d_queue_descriptor.html">Convolution2dQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_convolution3d_descriptor.html">Convolution3dDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_convolution3d_descriptor.html" title="A Convolution3dDescriptor for the Convolution3dLayer.">Convolution3dDescriptor</a> for the <a class="el" href="classarmnn_1_1_convolution3d_layer.html" title="This layer represents a convolution 3d operation.">Convolution3dLayer</a>. <a href="structarmnn_1_1_convolution3d_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_convolution3d_layer.html">Convolution3dLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a convolution 3d operation. <a href="classarmnn_1_1_convolution3d_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_convolution3d_queue_descriptor.html">Convolution3dQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_copy_mem_generic_workload.html">CopyMemGenericWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_debug_layer.html">DebugLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer visualizes the data flowing through the network. <a href="classarmnn_1_1_debug_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_debug_queue_descriptor.html">DebugQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_default_allocator.html">DefaultAllocator</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default Memory <a class="el" href="structarmnn_1_1_allocator.html">Allocator</a> class returned from IBackendInternal::GetDefaultAllocator(MemorySource) <a href="classarmnn_1_1_default_allocator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_depth_to_space_layer.html">DepthToSpaceLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a DepthToSpace operation. <a href="classarmnn_1_1_depth_to_space_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_depth_to_space_queue_descriptor.html">DepthToSpaceQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html">DepthwiseConvolution2dDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html" title="A DepthwiseConvolution2dDescriptor for the DepthwiseConvolution2dLayer.">DepthwiseConvolution2dDescriptor</a> for the <a class="el" href="classarmnn_1_1_depthwise_convolution2d_layer.html" title="This layer represents a depthwise convolution 2d operation.">DepthwiseConvolution2dLayer</a>. <a href="structarmnn_1_1_depthwise_convolution2d_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_depthwise_convolution2d_layer.html">DepthwiseConvolution2dLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a depthwise convolution 2d operation. <a href="classarmnn_1_1_depthwise_convolution2d_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.html">DepthwiseConvolution2dQueueDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Depthwise Convolution 2D layer workload data. <a href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dequantize_layer.html">DequantizeLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer dequantizes the input tensor. <a href="classarmnn_1_1_dequantize_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_dequantize_queue_descriptor.html">DequantizeQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_detection_post_process_descriptor.html">DetectionPostProcessDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_detection_post_process_layer.html">DetectionPostProcessLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a detection postprocess operator. <a href="classarmnn_1_1_detection_post_process_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_detection_post_process_queue_descriptor.html">DetectionPostProcessQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_device_spec.html">DeviceSpec</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_division_layer.html">DivisionLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a division operation. <a href="classarmnn_1_1_division_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_division_queue_descriptor.html">DivisionQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dot_attribute_set.html">DotAttributeSet</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dot_base.html">DotBase</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dot_defaults.html">DotDefaults</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dot_edge.html">DotEdge</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dot_graph.html">DotGraph</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dot_node.html">DotNode</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dynamic_backend.html">DynamicBackend</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dynamic_backend_utils.html">DynamicBackendUtils</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_elementwise_base_layer.html">ElementwiseBaseLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">NOTE: this is an abstract class to encapsulate the element wise operations, it does not implement: std::unique_ptr&lt;IWorkload&gt; <a class="el" href="classarmnn_1_1_layer.html#a08d1e10a45f15cd0bd02557be35a3864">Layer::CreateWorkload(const IWorkloadFactory&amp; factory) const </a>= 0; Layer* <a class="el" href="classarmnn_1_1_layer.html#ae89ff455503aa106d00bf34103d2f2e0" title="Creates a dynamically-allocated copy of this layer.">Clone(Graph&amp; graph) const </a>= 0;. <a href="classarmnn_1_1_elementwise_base_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_elementwise_binary_descriptor.html">ElementwiseBinaryDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_elementwise_binary_descriptor.html" title="A ElementwiseBinaryDescriptor for the ElementwiseBinaryLayer.">ElementwiseBinaryDescriptor</a> for the <a class="el" href="classarmnn_1_1_elementwise_binary_layer.html" title="This layer represents a elementwiseBinary operation.">ElementwiseBinaryLayer</a>. <a href="structarmnn_1_1_elementwise_binary_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_elementwise_binary_function.html">ElementwiseBinaryFunction</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_elementwise_binary_layer.html">ElementwiseBinaryLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a elementwiseBinary operation. <a href="classarmnn_1_1_elementwise_binary_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_elementwise_binary_queue_descriptor.html">ElementwiseBinaryQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_elementwise_unary_descriptor.html">ElementwiseUnaryDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_elementwise_unary_descriptor.html" title="A ElementwiseUnaryDescriptor for the ElementwiseUnaryLayer.">ElementwiseUnaryDescriptor</a> for the <a class="el" href="classarmnn_1_1_elementwise_unary_layer.html" title="This layer represents a elementwiseUnary operation.">ElementwiseUnaryLayer</a>. <a href="structarmnn_1_1_elementwise_unary_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_elementwise_unary_function.html">ElementwiseUnaryFunction</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_elementwise_unary_layer.html">ElementwiseUnaryLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a elementwiseUnary operation. <a href="classarmnn_1_1_elementwise_unary_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_elementwise_unary_queue_descriptor.html">ElementwiseUnaryQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_empty_optional.html">EmptyOptional</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structarmnn_1_1_empty_optional.html" title="EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...">EmptyOptional</a> is used to initialize the <a class="el" href="classarmnn_1_1_optional.html">Optional</a> class in case we want to have default value for an <a class="el" href="classarmnn_1_1_optional.html">Optional</a> in a function declaration. <a href="structarmnn_1_1_empty_optional.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_equal_queue_descriptor.html">EqualQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_erased_layer_names_observable.html">ErasedLayerNamesObservable</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_event.html">Event</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classarmnn_1_1_event.html" 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.html#aa75e3a38ab9fee7b2ad5522e746ad0af" title="Get the recorded measurements calculated between Start() and Stop()">Event::GetMeasurements()</a> is called. <a href="classarmnn_1_1_event.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_exception.html">Exception</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base class for all ArmNN exceptions so that users can filter to just those. <a href="classarmnn_1_1_exception.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_execution_frame.html">ExecutionFrame</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1exp.html">exp</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_fake_quantization_descriptor.html">FakeQuantizationDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_fake_quantization_descriptor.html" title="A FakeQuantizationDescriptor for the FakeQuantizationLayer.">FakeQuantizationDescriptor</a> for the <a class="el" href="classarmnn_1_1_fake_quantization_layer.html" title="This layer represents a fake quantization operation.">FakeQuantizationLayer</a>. <a href="structarmnn_1_1_fake_quantization_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_fake_quantization_layer.html">FakeQuantizationLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a fake quantization operation. <a href="classarmnn_1_1_fake_quantization_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_fake_quantization_queue_descriptor.html">FakeQuantizationQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_file_not_found_exception.html">FileNotFoundException</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_fill_descriptor.html">FillDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_fill_descriptor.html" title="A FillDescriptor for the FillLayer.">FillDescriptor</a> for the <a class="el" href="classarmnn_1_1_fill_layer.html" title="This layer represents a fill operation.">FillLayer</a>. <a href="structarmnn_1_1_fill_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_fill_layer.html">FillLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a fill operation. <a href="classarmnn_1_1_fill_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_fill_queue_descriptor.html">FillQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_first_input_typed_workload.html">FirstInputTypedWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_f_l_a_t_b_u_f_f_e_r_s___f_i_n_a_l___c_l_a_s_s.html">FLATBUFFERS_FINAL_CLASS</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_float16_decoder.html">Float16Decoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_float16_encoder.html">Float16Encoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_float32_decoder.html">Float32Decoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_float32_encoder.html">Float32Encoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_floor_layer.html">FloorLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a floor operation. <a href="classarmnn_1_1_floor_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_floor_queue_descriptor.html">FloorQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_fully_connected_descriptor.html">FullyConnectedDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_fully_connected_descriptor.html" title="A FullyConnectedDescriptor for the FullyConnectedLayer.">FullyConnectedDescriptor</a> for the <a class="el" href="classarmnn_1_1_fully_connected_layer.html" title="This layer represents a fully connected operation.">FullyConnectedLayer</a>. <a href="structarmnn_1_1_fully_connected_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_fully_connected_layer.html">FullyConnectedLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a fully connected operation. <a href="classarmnn_1_1_fully_connected_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_fully_connected_queue_descriptor.html">FullyConnectedQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_fused_descriptor.html">FusedDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_fused_descriptor.html" title="A FusedDescriptor for the FusedLayer.">FusedDescriptor</a> for the <a class="el" href="classarmnn_1_1_fused_layer.html">FusedLayer</a>. <a href="structarmnn_1_1_fused_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_fused_layer.html">FusedLayer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_fused_queue_descriptor.html">FusedQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_gather_descriptor.html">GatherDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_gather_descriptor.html" title="A GatherDescriptor for the GatherLayer.">GatherDescriptor</a> for the <a class="el" href="classarmnn_1_1_gather_layer.html" title="This layer represents a Gather operator.">GatherLayer</a>. <a href="structarmnn_1_1_gather_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_gather_layer.html">GatherLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a Gather operator. <a href="classarmnn_1_1_gather_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_gather_nd_layer.html">GatherNdLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a GatherNd operator. <a href="classarmnn_1_1_gather_nd_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_gather_nd_queue_descriptor.html">GatherNdQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_gather_queue_descriptor.html">GatherQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_gpu_fsa_backend.html">GpuFsaBackend</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_gpu_fsa_backend_context.html">GpuFsaBackendContext</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_gpu_fsa_backend_default_allocator.html">GpuFsaBackendDefaultAllocator</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default Memory <a class="el" href="structarmnn_1_1_allocator.html">Allocator</a> class returned from IBackendInternal::GetDefaultAllocator(MemorySource) <a href="classarmnn_1_1_gpu_fsa_backend_default_allocator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_gpu_fsa_base_workload.html">GpuFsaBaseWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_gpu_fsa_constant_workload.html">GpuFsaConstantWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_gpu_fsa_context_control.html">GpuFsaContextControl</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_gpu_fsa_layer_support.html">GpuFsaLayerSupport</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_gpu_fsa_memory_manager.html">GpuFsaMemoryManager</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A structure which contains all the elements needed to execute a fused workload in the GpuFsa Backend. <a href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_gpu_fsa_pre_compiled_workload.html">GpuFsaPreCompiledWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_gpu_fsa_sub_tensor_handle.html">GpuFsaSubTensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_gpu_fsa_tensor_handle.html">GpuFsaTensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_gpu_fsa_tensor_handle_factory.html">GpuFsaTensorHandleFactory</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_gpu_fsa_workload_factory.html">GpuFsaWorkloadFactory</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html">Graph</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph_observable.html">GraphObservable</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph_validation_exception.html">GraphValidationException</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_greater_queue_descriptor.html">GreaterQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_html_bold.html">HtmlBold</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_html_font.html">HtmlFont</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_html_section.html">HtmlSection</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_html_simple_tag.html">HtmlSimpleTag</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_acl_tensor_handle.html">IAclTensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_backend.html">IBackend</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Each backend should implement an <a class="el" href="classarmnn_1_1_i_backend.html" title="Each backend should implement an IBackend.">IBackend</a>. <a href="classarmnn_1_1_i_backend.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_backend_context.html">IBackendContext</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_backend_internal.html">IBackendInternal</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_backend_model_context.html">IBackendModelContext</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_cl_tensor_handle.html">IClTensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_c_l_tensor_proxy.html">ICLTensorProxy</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_connectable_layer.html">IConnectableLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. <a href="classarmnn_1_1_i_connectable_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_custom_allocator.html">ICustomAllocator</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Custom <a class="el" href="structarmnn_1_1_allocator.html">Allocator</a> interface. <a href="classarmnn_1_1_i_custom_allocator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_device_spec.html">IDeviceSpec</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Device specific knowledge to be passed to the optimizer. <a href="classarmnn_1_1_i_device_spec.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_execution_frame.html">IExecutionFrame</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classarmnn_1_1_execution_frame.html">ExecutionFrame</a> interface to enqueue a workload computation. <a href="classarmnn_1_1_i_execution_frame.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_gpu_acc_tuned_parameters.html">IGpuAccTunedParameters</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Manages a set of GpuAcc parameters which have been tuned for maximum performance. <a href="classarmnn_1_1_i_gpu_acc_tuned_parameters.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_graph_observable.html">IGraphObservable</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_input_slot.html">IInputSlot</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An input connection slot for a layer. <a href="classarmnn_1_1_i_input_slot.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_layer_support.html">ILayerSupport</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_memory_manager.html">IMemoryManager</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_memory_optimizer_strategy.html">IMemoryOptimizerStrategy</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_i_memory_optimizer_strategy_factory.html">IMemoryOptimizerStrategyFactory</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_import_mem_generic_workload.html">ImportMemGenericWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_network.html">INetwork</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Main network class which provides the interface for building up a neural network. <a href="classarmnn_1_1_i_network.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_i_network_properties.html">INetworkProperties</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_input_layer.html">InputLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A layer user-provided data can be bound to (e.g. inputs, outputs). <a href="classarmnn_1_1_input_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_input_slot.html">InputSlot</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_instance_normalization_descriptor.html">InstanceNormalizationDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An <a class="el" href="structarmnn_1_1_instance_normalization_descriptor.html" title="An InstanceNormalizationDescriptor for InstanceNormalizationLayer.">InstanceNormalizationDescriptor</a> for <a class="el" href="classarmnn_1_1_instance_normalization_layer.html" title="This layer represents an instance normalization operation.">InstanceNormalizationLayer</a>. <a href="structarmnn_1_1_instance_normalization_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_instance_normalization_layer.html">InstanceNormalizationLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents an instance normalization operation. <a href="classarmnn_1_1_instance_normalization_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_instance_normalization_queue_descriptor.html">InstanceNormalizationQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_instrument.html">Instrument</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_int32_decoder.html">Int32Decoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_int32_encoder.html">Int32Encoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_int32_to_int32t_decoder.html">Int32ToInt32tDecoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_int32_to_int32t_encoder.html">Int32ToInt32tEncoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_int64_decoder.html">Int64Decoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_int64_encoder.html">Int64Encoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_output_slot.html">IOutputSlot</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An output connection slot for a layer. <a href="classarmnn_1_1_i_output_slot.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_profiler.html">IProfiler</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_runtime.html">IRuntime</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_is_half_type.html">IsHalfType</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_is_memory_source.html">IsMemorySource</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_is_memory_source_3_01_memory_source_01_4.html">IsMemorySource&lt; MemorySource &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_strategy.html">IStrategy</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_subgraph_view_converter.html">ISubgraphViewConverter</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html">ITensorHandleFactory</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_workload.html">IWorkload</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Workload interface to enqueue a layer computation. <a href="classarmnn_1_1_i_workload.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_workload_factory.html">IWorkloadFactory</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_json_child_object.html">JsonChildObject</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_json_printer.html">JsonPrinter</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_json_utils.html">JsonUtils</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_l2_normalization_descriptor.html">L2NormalizationDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_l2_normalization_descriptor.html" title="A L2NormalizationDescriptor for the L2NormalizationLayer.">L2NormalizationDescriptor</a> for the <a class="el" href="classarmnn_1_1_l2_normalization_layer.html" title="This layer represents a L2 normalization operation.">L2NormalizationLayer</a>. <a href="structarmnn_1_1_l2_normalization_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_l2_normalization_layer.html">L2NormalizationLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a L2 normalization operation. <a href="classarmnn_1_1_l2_normalization_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_l2_normalization_queue_descriptor.html">L2NormalizationQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_layer.html">Layer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_layer_support_base.html">LayerSupportBase</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_layer_support_handle.html">LayerSupportHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl.html">LayerTypeOfImpl</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_activation_01_4.html">LayerTypeOfImpl&lt; LayerType::Activation &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_addition_01_4.html">LayerTypeOfImpl&lt; LayerType::Addition &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_arg_min_max_01_4.html">LayerTypeOfImpl&lt; LayerType::ArgMinMax &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_batch_mat_mul_01_4.html">LayerTypeOfImpl&lt; LayerType::BatchMatMul &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_batch_normalization_01_4.html">LayerTypeOfImpl&lt; LayerType::BatchNormalization &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_batch_to_space_nd_01_4.html">LayerTypeOfImpl&lt; LayerType::BatchToSpaceNd &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_broadcast_to_01_4.html">LayerTypeOfImpl&lt; LayerType::BroadcastTo &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_cast_01_4.html">LayerTypeOfImpl&lt; LayerType::Cast &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_channel_shuffle_01_4.html">LayerTypeOfImpl&lt; LayerType::ChannelShuffle &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_comparison_01_4.html">LayerTypeOfImpl&lt; LayerType::Comparison &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_concat_01_4.html">LayerTypeOfImpl&lt; LayerType::Concat &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_constant_01_4.html">LayerTypeOfImpl&lt; LayerType::Constant &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_convert_fp16_to_fp32_01_4.html">LayerTypeOfImpl&lt; LayerType::ConvertFp16ToFp32 &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_convert_fp32_to_fp16_01_4.html">LayerTypeOfImpl&lt; LayerType::ConvertFp32ToFp16 &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_convolution2d_01_4.html">LayerTypeOfImpl&lt; LayerType::Convolution2d &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_convolution3d_01_4.html">LayerTypeOfImpl&lt; LayerType::Convolution3d &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_debug_01_4.html">LayerTypeOfImpl&lt; LayerType::Debug &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_depth_to_space_01_4.html">LayerTypeOfImpl&lt; LayerType::DepthToSpace &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_depthwise_convolution2d_01_4.html">LayerTypeOfImpl&lt; LayerType::DepthwiseConvolution2d &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_dequantize_01_4.html">LayerTypeOfImpl&lt; LayerType::Dequantize &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_detection_post_process_01_4.html">LayerTypeOfImpl&lt; LayerType::DetectionPostProcess &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_division_01_4.html">LayerTypeOfImpl&lt; LayerType::Division &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_elementwise_binary_01_4.html">LayerTypeOfImpl&lt; LayerType::ElementwiseBinary &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_elementwise_unary_01_4.html">LayerTypeOfImpl&lt; LayerType::ElementwiseUnary &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_fake_quantization_01_4.html">LayerTypeOfImpl&lt; LayerType::FakeQuantization &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_fill_01_4.html">LayerTypeOfImpl&lt; LayerType::Fill &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_floor_01_4.html">LayerTypeOfImpl&lt; LayerType::Floor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_fully_connected_01_4.html">LayerTypeOfImpl&lt; LayerType::FullyConnected &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_fused_01_4.html">LayerTypeOfImpl&lt; LayerType::Fused &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_gather_01_4.html">LayerTypeOfImpl&lt; LayerType::Gather &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_gather_nd_01_4.html">LayerTypeOfImpl&lt; LayerType::GatherNd &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_input_01_4.html">LayerTypeOfImpl&lt; LayerType::Input &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_instance_normalization_01_4.html">LayerTypeOfImpl&lt; LayerType::InstanceNormalization &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_l2_normalization_01_4.html">LayerTypeOfImpl&lt; LayerType::L2Normalization &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_logical_binary_01_4.html">LayerTypeOfImpl&lt; LayerType::LogicalBinary &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_log_softmax_01_4.html">LayerTypeOfImpl&lt; LayerType::LogSoftmax &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_lstm_01_4.html">LayerTypeOfImpl&lt; LayerType::Lstm &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_map_01_4.html">LayerTypeOfImpl&lt; LayerType::Map &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_maximum_01_4.html">LayerTypeOfImpl&lt; LayerType::Maximum &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_mean_01_4.html">LayerTypeOfImpl&lt; LayerType::Mean &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_mem_copy_01_4.html">LayerTypeOfImpl&lt; LayerType::MemCopy &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_mem_import_01_4.html">LayerTypeOfImpl&lt; LayerType::MemImport &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_merge_01_4.html">LayerTypeOfImpl&lt; LayerType::Merge &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_minimum_01_4.html">LayerTypeOfImpl&lt; LayerType::Minimum &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_multiplication_01_4.html">LayerTypeOfImpl&lt; LayerType::Multiplication &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_normalization_01_4.html">LayerTypeOfImpl&lt; LayerType::Normalization &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_output_01_4.html">LayerTypeOfImpl&lt; LayerType::Output &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_pad_01_4.html">LayerTypeOfImpl&lt; LayerType::Pad &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_permute_01_4.html">LayerTypeOfImpl&lt; LayerType::Permute &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_pooling2d_01_4.html">LayerTypeOfImpl&lt; LayerType::Pooling2d &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_pooling3d_01_4.html">LayerTypeOfImpl&lt; LayerType::Pooling3d &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_pre_compiled_01_4.html">LayerTypeOfImpl&lt; LayerType::PreCompiled &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_prelu_01_4.html">LayerTypeOfImpl&lt; LayerType::Prelu &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_q_lstm_01_4.html">LayerTypeOfImpl&lt; LayerType::QLstm &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_quantize_01_4.html">LayerTypeOfImpl&lt; LayerType::Quantize &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_quantized_lstm_01_4.html">LayerTypeOfImpl&lt; LayerType::QuantizedLstm &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_rank_01_4.html">LayerTypeOfImpl&lt; LayerType::Rank &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_reduce_01_4.html">LayerTypeOfImpl&lt; LayerType::Reduce &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_reshape_01_4.html">LayerTypeOfImpl&lt; LayerType::Reshape &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_resize_01_4.html">LayerTypeOfImpl&lt; LayerType::Resize &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_reverse_v2_01_4.html">LayerTypeOfImpl&lt; LayerType::ReverseV2 &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_scatter_nd_01_4.html">LayerTypeOfImpl&lt; LayerType::ScatterNd &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_shape_01_4.html">LayerTypeOfImpl&lt; LayerType::Shape &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_slice_01_4.html">LayerTypeOfImpl&lt; LayerType::Slice &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_softmax_01_4.html">LayerTypeOfImpl&lt; LayerType::Softmax &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_space_to_batch_nd_01_4.html">LayerTypeOfImpl&lt; LayerType::SpaceToBatchNd &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_space_to_depth_01_4.html">LayerTypeOfImpl&lt; LayerType::SpaceToDepth &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_splitter_01_4.html">LayerTypeOfImpl&lt; LayerType::Splitter &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_stack_01_4.html">LayerTypeOfImpl&lt; LayerType::Stack &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_stand_in_01_4.html">LayerTypeOfImpl&lt; LayerType::StandIn &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_strided_slice_01_4.html">LayerTypeOfImpl&lt; LayerType::StridedSlice &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_subtraction_01_4.html">LayerTypeOfImpl&lt; LayerType::Subtraction &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_switch_01_4.html">LayerTypeOfImpl&lt; LayerType::Switch &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_tile_01_4.html">LayerTypeOfImpl&lt; LayerType::Tile &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_transpose_01_4.html">LayerTypeOfImpl&lt; LayerType::Transpose &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_transpose_convolution2d_01_4.html">LayerTypeOfImpl&lt; LayerType::TransposeConvolution2d &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_unidirectional_sequence_lstm_01_4.html">LayerTypeOfImpl&lt; LayerType::UnidirectionalSequenceLstm &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_unmap_01_4.html">LayerTypeOfImpl&lt; LayerType::Unmap &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_layer_validation_exception.html">LayerValidationException</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_layer_with_parameters.html">LayerWithParameters</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_loaded_network.html">LoadedNetwork</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1log.html">log</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_logical_binary_descriptor.html">LogicalBinaryDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_logical_binary_descriptor.html" title="A LogicalBinaryDescriptor for the LogicalBinaryLayer.">LogicalBinaryDescriptor</a> for the <a class="el" href="classarmnn_1_1_logical_binary_layer.html" title="This layer represents a Logical Binary operation.">LogicalBinaryLayer</a>. <a href="structarmnn_1_1_logical_binary_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_logical_binary_function.html">LogicalBinaryFunction</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_logical_binary_layer.html">LogicalBinaryLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a Logical Binary operation. <a href="classarmnn_1_1_logical_binary_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_logical_binary_queue_descriptor.html">LogicalBinaryQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_logical_unary_function.html">LogicalUnaryFunction</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_log_sink.html">LogSink</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_log_softmax_layer.html">LogSoftmaxLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a log softmax operation. <a href="classarmnn_1_1_log_softmax_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_log_softmax_queue_descriptor.html">LogSoftmaxQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_basic_parameters.html">LstmBasicParameters</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_descriptor.html">LstmDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An <a class="el" href="structarmnn_1_1_lstm_descriptor.html" title="An LstmDescriptor for the LstmLayer.">LstmDescriptor</a> for the <a class="el" href="classarmnn_1_1_lstm_layer.html" title="This layer represents a LSTM operation.">LstmLayer</a>. <a href="structarmnn_1_1_lstm_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_input_params.html">LstmInputParams</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_input_params_info.html">LstmInputParamsInfo</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_lstm_layer.html">LstmLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a LSTM operation. <a href="classarmnn_1_1_lstm_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_opt_cifg_parameters.html">LstmOptCifgParameters</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_opt_layer_norm_parameters.html">LstmOptLayerNormParameters</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_opt_peephole_parameters.html">LstmOptPeepholeParameters</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_opt_projection_parameters.html">LstmOptProjectionParameters</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_queue_descriptor.html">LstmQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_managed_const_tensor_handle.html">ManagedConstTensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_map_layer.html">MapLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a memory copy operation. <a href="classarmnn_1_1_map_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_map_queue_descriptor.html">MapQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_map_workload.html">MapWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1maximum.html">maximum</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_maximum_layer.html">MaximumLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a maximum operation. <a href="classarmnn_1_1_maximum_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_maximum_queue_descriptor.html">MaximumQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_mean_descriptor.html">MeanDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_mean_descriptor.html" title="A MeanDescriptor for the MeanLayer.">MeanDescriptor</a> for the <a class="el" href="classarmnn_1_1_mean_layer.html" title="This layer represents a mean operation.">MeanLayer</a>. <a href="structarmnn_1_1_mean_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mean_layer.html">MeanLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a mean operation. <a href="classarmnn_1_1_mean_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_mean_queue_descriptor.html">MeanQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_measurement.html">Measurement</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_mem_bin.html">MemBin</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_mem_block.html">MemBlock</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mem_copy_layer.html">MemCopyLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a memory copy operation. <a href="classarmnn_1_1_mem_copy_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_mem_copy_queue_descriptor.html">MemCopyQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mem_import_layer.html">MemImportLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a memory import operation. <a href="classarmnn_1_1_mem_import_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_mem_import_queue_descriptor.html">MemImportQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_memory_export_exception.html">MemoryExportException</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_memory_import_exception.html">MemoryImportException</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_memory_info.html">MemoryInfo</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_memory_manager.html">MemoryManager</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_memory_requirements.html">MemoryRequirements</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_memory_validation_exception.html">MemoryValidationException</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_mem_sync_queue_descriptor.html">MemSyncQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_merge_layer.html">MergeLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer dequantizes the input tensor. <a href="classarmnn_1_1_merge_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_merge_queue_descriptor.html">MergeQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1minimum.html">minimum</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_minimum_layer.html">MinimumLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a minimum operation. <a href="classarmnn_1_1_minimum_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_minimum_queue_descriptor.html">MinimumQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mock_tensor_handle_factory.html">MockTensorHandleFactory</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_multiplication_layer.html">MultiplicationLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a multiplication operation. <a href="classarmnn_1_1_multiplication_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_multiplication_queue_descriptor.html">MultiplicationQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_multi_typed_workload.html">MultiTypedWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_abs_workload.html">NeonAbsWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_activation_workload.html">NeonActivationWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_addition_workload.html">NeonAdditionWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_arg_min_max_workload.html">NeonArgMinMaxWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_backend.html">NeonBackend</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_backend_model_context.html">NeonBackendModelContext</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The <a class="el" href="classarmnn_1_1_neon_backend_model_context.html" 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.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_base_workload.html">NeonBaseWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_batch_mat_mul_workload.html">NeonBatchMatMulWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_batch_normalization_workload.html">NeonBatchNormalizationWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_batch_to_space_nd_workload.html">NeonBatchToSpaceNdWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_cast_workload.html">NeonCastWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_channel_shuffle_workload.html">NeonChannelShuffleWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_comparison_workload.html">NeonComparisonWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_concat_workload.html">NeonConcatWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_constant_workload.html">NeonConstantWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_convert_fp16_to_fp32_workload.html">NeonConvertFp16ToFp32Workload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_convert_fp32_to_fp16_workload.html">NeonConvertFp32ToFp16Workload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_convolution2d_workload.html">NeonConvolution2dWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_convolution3d_workload.html">NeonConvolution3dWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_depth_to_space_workload.html">NeonDepthToSpaceWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_depthwise_convolution_workload.html">NeonDepthwiseConvolutionWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_dequantize_workload.html">NeonDequantizeWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_detection_post_process_workload.html">NeonDetectionPostProcessWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_division_workload.html">NeonDivisionWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_elementwise_binary_workload.html">NeonElementwiseBinaryWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_exp_workload.html">NeonExpWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_fill_workload.html">NeonFillWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_floor_float_workload.html">NeonFloorFloatWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_fully_connected_workload.html">NeonFullyConnectedWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_fused_workload.html">NeonFusedWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_gather_nd_workload.html">NeonGatherNdWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_gather_workload.html">NeonGatherWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_instance_normalization_workload.html">NeonInstanceNormalizationWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_interceptor_scheduler.html">NeonInterceptorScheduler</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_l2_normalization_float_workload.html">NeonL2NormalizationFloatWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_layer_support.html">NeonLayerSupport</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_logical_and_workload.html">NeonLogicalAndWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_logical_not_workload.html">NeonLogicalNotWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_logical_or_workload.html">NeonLogicalOrWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_log_softmax_workload.html">NeonLogSoftmaxWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_log_workload.html">NeonLogWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_lstm_float_workload.html">NeonLstmFloatWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_maximum_workload.html">NeonMaximumWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_mean_workload.html">NeonMeanWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_memory_manager.html">NeonMemoryManager</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_minimum_workload.html">NeonMinimumWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_multiplication_workload.html">NeonMultiplicationWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_neg_workload.html">NeonNegWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_normalization_float_workload.html">NeonNormalizationFloatWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_pad_workload.html">NeonPadWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_permute_workload.html">NeonPermuteWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_pooling2d_workload.html">NeonPooling2dWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_pooling3d_workload.html">NeonPooling3dWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_prelu_workload.html">NeonPreluWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_q_lstm_workload.html">NeonQLstmWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_quantized_lstm_workload.html">NeonQuantizedLstmWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_quantize_workload.html">NeonQuantizeWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_neon_rank_workload.html">NeonRankWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_reduce_workload.html">NeonReduceWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_reshape_workload.html">NeonReshapeWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_resize_workload.html">NeonResizeWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_reverse_v2_workload.html">NeonReverseV2Workload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_rsqrt_workload.html">NeonRsqrtWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_sin_workload.html">NeonSinWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_slice_workload.html">NeonSliceWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_softmax_workload.html">NeonSoftmaxWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_space_to_batch_nd_workload.html">NeonSpaceToBatchNdWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_space_to_depth_workload.html">NeonSpaceToDepthWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_splitter_workload.html">NeonSplitterWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_sqrt_workload.html">NeonSqrtWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_stack_workload.html">NeonStackWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_strided_slice_workload.html">NeonStridedSliceWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_sub_tensor_handle.html">NeonSubTensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_subtraction_workload.html">NeonSubtractionWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_tensor_decorator.html">NeonTensorDecorator</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classarmnn_1_1_neon_tensor_decorator.html" title="NeonTensorDecorator wraps an existing Neon tensor allowing us to override the TensorInfo for it.">NeonTensorDecorator</a> wraps an existing Neon tensor allowing us to override the <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> for it. <a href="classarmnn_1_1_neon_tensor_decorator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_tensor_handle.html">NeonTensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_tensor_handle_decorator.html">NeonTensorHandleDecorator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_tensor_handle_factory.html">NeonTensorHandleFactory</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_tile_workload.html">NeonTileWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_timer.html">NeonTimer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_transpose_convolution2d_workload.html">NeonTransposeConvolution2dWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_transpose_workload.html">NeonTransposeWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_unidirectional_sequence_lstm_float_workload.html">NeonUnidirectionalSequenceLstmFloatWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_unidirectional_sequence_lstm_workload.html">NeonUnidirectionalSequenceLstmWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_workload_factory.html">NeonWorkloadFactory</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_network_impl.html">NetworkImpl</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Private implementation of <a class="el" href="classarmnn_1_1_i_network.html" title="Main network class which provides the interface for building up a neural network.">INetwork</a>. <a href="classarmnn_1_1_network_impl.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_node_content.html">NodeContent</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_normalization_descriptor.html">NormalizationDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_normalization_descriptor.html" title="A NormalizationDescriptor for the NormalizationLayer.">NormalizationDescriptor</a> for the <a class="el" href="classarmnn_1_1_normalization_layer.html" title="This layer represents a normalization operation.">NormalizationLayer</a>. <a href="structarmnn_1_1_normalization_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_normalization_layer.html">NormalizationLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a normalization operation. <a href="classarmnn_1_1_normalization_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_normalization_queue_descriptor.html">NormalizationQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_no_throw_strategy.html">NoThrowStrategy</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_null_descriptor.html">NullDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Null Descriptor used as a return value from the <a class="el" href="classarmnn_1_1_i_connectable_layer.html" 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.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_null_pointer_exception.html">NullPointerException</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_null_workload.html">NullWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_open_cl_timer.html">OpenClTimer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classarmnn_1_1_open_cl_timer.html" 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.html#a156f3866ca69d98b4d9e6e1c1b3ec7da" title="Start the OpenCl timer.">Start()</a> and <a class="el" href="classarmnn_1_1_open_cl_timer.html#a634c58de2126b4a4e6a2a093e60e1290" title="Stop the OpenCl timer.">Stop()</a>. <a href="classarmnn_1_1_open_cl_timer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimization.html">Optimization</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimized_network_impl.html">OptimizedNetworkImpl</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimize_for_connection.html">OptimizeForConnection</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimize_for_connection_impl.html">OptimizeForConnectionImpl</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wrapper <a class="el" href="classarmnn_1_1_optimization.html">Optimization</a> class that calls Wrapped::Run for every connection BaseType -&gt; ChildType. <a href="classarmnn_1_1_optimize_for_connection_impl.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimize_for_exclusive_connection.html">OptimizeForExclusiveConnection</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimize_for_exclusive_connection_impl.html">OptimizeForExclusiveConnectionImpl</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wrapper <a class="el" href="classarmnn_1_1_optimization.html">Optimization</a> class that calls Wrapped::Run for every connection BaseType -&gt; ChildType. <a href="classarmnn_1_1_optimize_for_exclusive_connection_impl.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimize_for_type.html">OptimizeForType</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimize_for_type_impl.html">OptimizeForTypeImpl</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wrapper <a class="el" href="classarmnn_1_1_optimization.html">Optimization</a> base class that calls Wrapped::Run() for every layer of type BaseType. <a href="classarmnn_1_1_optimize_for_type_impl.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimize_for_type_impl_3_01_layer_00_01_wrapped_01_4.html">OptimizeForTypeImpl&lt; Layer, Wrapped &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specialization that calls Wrapped::Run() for any layer type. <a href="classarmnn_1_1_optimize_for_type_impl_3_01_layer_00_01_wrapped_01_4.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimizer.html">Optimizer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_optimizer_options.html">OptimizerOptions</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimizer_options_opaque.html">OptimizerOptionsOpaque</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_optimizer_options_opaque_impl.html">OptimizerOptionsOpaqueImpl</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optional.html">Optional</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optional_base.html">OptionalBase</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classarmnn_1_1_optional_base.html" 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.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optional_reference_switch.html">OptionalReferenceSwitch</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The default implementation is the non-reference case. <a href="classarmnn_1_1_optional_reference_switch.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optional_reference_switch_3_01true_00_01_t_01_4.html">OptionalReferenceSwitch&lt; true, T &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This is the special case for reference types. <a href="classarmnn_1_1_optional_reference_switch_3_01true_00_01_t_01_4.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_origins_descriptor.html">OriginsDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An <a class="el" href="structarmnn_1_1_origins_descriptor.html" title="An OriginsDescriptor for the ConcatLayer.">OriginsDescriptor</a> for the <a class="el" href="classarmnn_1_1_concat_layer.html" title="This layer represents a merge operation.">ConcatLayer</a>. <a href="structarmnn_1_1_origins_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_output_handler.html">OutputHandler</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_output_layer.html">OutputLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A layer user-provided data can be bound to (e.g. inputs, outputs). <a href="classarmnn_1_1_output_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_output_slot.html">OutputSlot</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_pad_descriptor.html">PadDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_pad_descriptor.html" title="A PadDescriptor for the PadLayer.">PadDescriptor</a> for the <a class="el" href="classarmnn_1_1_pad_layer.html" title="This layer represents a pad operation.">PadLayer</a>. <a href="structarmnn_1_1_pad_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_pad_layer.html">PadLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a pad operation. <a href="classarmnn_1_1_pad_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_pad_queue_descriptor.html">PadQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_parse_exception.html">ParseException</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_passthrough_tensor_handle.html">PassthroughTensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_per_axis_iterator.html">PerAxisIterator</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classarmnn_1_1_per_axis_iterator.html" title="PerAxisIterator for per-axis quantization.">PerAxisIterator</a> for per-axis quantization. <a href="classarmnn_1_1_per_axis_iterator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.html">PermutationVector</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_permute_descriptor.html">PermuteDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_permute_descriptor.html" title="A PermuteDescriptor for the PermuteLayer.">PermuteDescriptor</a> for the <a class="el" href="classarmnn_1_1_permute_layer.html" title="This layer represents a permutation operation.">PermuteLayer</a>. <a href="structarmnn_1_1_permute_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permute_layer.html">PermuteLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a permutation operation. <a href="classarmnn_1_1_permute_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_permute_queue_descriptor.html">PermuteQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_polymorphic_downcast_exception.html">PolymorphicDowncastException</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_pooling2d_descriptor.html">Pooling2dDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_pooling2d_descriptor.html" title="A Pooling2dDescriptor for the Pooling2dLayer.">Pooling2dDescriptor</a> for the <a class="el" href="classarmnn_1_1_pooling2d_layer.html" title="This layer represents a pooling 2d operation.">Pooling2dLayer</a>. <a href="structarmnn_1_1_pooling2d_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_pooling2d_layer.html">Pooling2dLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a pooling 2d operation. <a href="classarmnn_1_1_pooling2d_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_pooling2d_queue_descriptor.html">Pooling2dQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_pooling3d_descriptor.html">Pooling3dDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_pooling3d_descriptor.html" title="A Pooling3dDescriptor for the Pooling3dLayer.">Pooling3dDescriptor</a> for the <a class="el" href="classarmnn_1_1_pooling3d_layer.html" title="This layer represents a pooling 3d operation.">Pooling3dLayer</a>. <a href="structarmnn_1_1_pooling3d_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_pooling3d_layer.html">Pooling3dLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a pooling 3d operation. <a href="classarmnn_1_1_pooling3d_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_pooling3d_queue_descriptor.html">Pooling3dQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1power.html">power</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_pre_compiled_descriptor.html">PreCompiledDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_pre_compiled_descriptor.html" title="A PreCompiledDescriptor for the PreCompiledLayer.">PreCompiledDescriptor</a> for the <a class="el" href="classarmnn_1_1_pre_compiled_layer.html">PreCompiledLayer</a>. <a href="structarmnn_1_1_pre_compiled_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_pre_compiled_layer.html">PreCompiledLayer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_pre_compiled_queue_descriptor.html">PreCompiledQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_prelu_layer.html">PreluLayer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_prelu_queue_descriptor.html">PreluQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_profiler_impl.html">ProfilerImpl</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_profiler_manager.html">ProfilerManager</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_profiling_details.html">ProfilingDetails</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classarmnn_1_1_profiling_details.html" title="ProfilingDetails class records any details associated with the operator and passes on for outputting ...">ProfilingDetails</a> class records any details associated with the operator and passes on for outputting to the user. <a href="classarmnn_1_1_profiling_details.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_program_builder.html">ProgramBuilder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_a_symm8_decoder.html">QASymm8Decoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_a_symm8_encoder.html">QASymm8Encoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_a_symm_s8_decoder.html">QASymmS8Decoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_a_symm_s8_encoder.html">QASymmS8Encoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_q_lstm_basic_parameters.html">QLstmBasicParameters</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_q_lstm_descriptor.html">QLstmDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_q_lstm_descriptor.html" title="A QLstmDescriptor for the QLstmLayer.">QLstmDescriptor</a> for the <a class="el" href="classarmnn_1_1_q_lstm_layer.html" title="This layer represents a QLstm operation.">QLstmLayer</a>. <a href="structarmnn_1_1_q_lstm_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_lstm_layer.html">QLstmLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a QLstm operation. <a href="classarmnn_1_1_q_lstm_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_q_lstm_opt_cifg_parameters.html">QLstmOptCifgParameters</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_q_lstm_opt_layer_norm_parameters.html">QLstmOptLayerNormParameters</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_q_lstm_opt_peephole_parameters.html">QLstmOptPeepholeParameters</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_q_lstm_opt_projection_parameters.html">QLstmOptProjectionParameters</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_q_lstm_queue_descriptor.html">QLstmQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_symm16_decoder.html">QSymm16Decoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_symm16_encoder.html">QSymm16Encoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_symm16_per_axis_encoder.html">QSymm16PerAxisEncoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_symm8_per_axis_decoder.html">QSymm8PerAxisDecoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_symm8_per_axis_encoder.html">QSymm8PerAxisEncoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_symm_s8_decoder.html">QSymmS8Decoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_symm_s8_encoder.html">QSymmS8Encoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_quantization_parameters_are_equal.html">QuantizationParametersAreEqual</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_quantized_lstm_input_params.html">QuantizedLstmInputParams</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.html">QuantizedLstmInputParamsInfo</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_quantized_lstm_layer.html">QuantizedLstmLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a QuantizedLstm operation. <a href="classarmnn_1_1_quantized_lstm_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_quantized_lstm_parameters.html">QuantizedLstmParameters</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_quantized_lstm_queue_descriptor.html">QuantizedLstmQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_quantized_multiplier_smaller_than_one.html">QuantizedMultiplierSmallerThanOne</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs multiplication of an integer with a multiplier which is less than one, using quantized integer arithmetic which is consistent with AndroidNN's CPU executor. <a href="structarmnn_1_1_quantized_multiplier_smaller_than_one.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_quantize_layer.html">QuantizeLayer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_quantize_queue_descriptor.html">QuantizeQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_queue_descriptor_with_parameters.html">QueueDescriptorWithParameters</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_range_tracker.html">RangeTracker</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_rank_layer.html">RankLayer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_rank_queue_descriptor.html">RankQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_reduce_descriptor.html">ReduceDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_reduce_descriptor.html" title="A ReduceDescriptor for the REDUCE operators.">ReduceDescriptor</a> for the REDUCE operators. <a href="structarmnn_1_1_reduce_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_reduce_layer.html">ReduceLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a reduction operation. <a href="classarmnn_1_1_reduce_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_reduce_queue_descriptor.html">ReduceQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_activation_workload.html">RefActivationWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_arg_min_max_workload.html">RefArgMinMaxWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_backend.html">RefBackend</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_base_workload.html">RefBaseWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_batch_mat_mul_workload.html">RefBatchMatMulWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_batch_normalization_workload.html">RefBatchNormalizationWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_batch_to_space_nd_workload.html">RefBatchToSpaceNdWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_broadcast_to_workload.html">RefBroadcastToWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_cast_workload.html">RefCastWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_channel_shuffle_workload.html">RefChannelShuffleWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_comparison_workload.html">RefComparisonWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_concat_workload.html">RefConcatWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_constant_workload.html">RefConstantWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_convert_fp16_to_fp32_workload.html">RefConvertFp16ToFp32Workload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_convert_fp32_to_fp16_workload.html">RefConvertFp32ToFp16Workload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_convolution2d_workload.html">RefConvolution2dWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_convolution3d_workload.html">RefConvolution3dWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_depth_to_space_workload.html">RefDepthToSpaceWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_depthwise_convolution2d_workload.html">RefDepthwiseConvolution2dWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_dequantize_workload.html">RefDequantizeWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_detection_post_process_workload.html">RefDetectionPostProcessWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_elementwise_binary_workload.html">RefElementwiseBinaryWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_elementwise_unary_workload.html">RefElementwiseUnaryWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_elementwise_workload.html">RefElementwiseWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_fake_quantization_float32_workload.html">RefFakeQuantizationFloat32Workload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_fill_workload.html">RefFillWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_floor_workload.html">RefFloorWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_fully_connected_workload.html">RefFullyConnectedWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_gather_nd_workload.html">RefGatherNdWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_gather_workload.html">RefGatherWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_instance_normalization_workload.html">RefInstanceNormalizationWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_l2_normalization_workload.html">RefL2NormalizationWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_layer_support.html">RefLayerSupport</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_logical_binary_workload.html">RefLogicalBinaryWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_logical_unary_workload.html">RefLogicalUnaryWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_log_softmax_workload.html">RefLogSoftmaxWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_lstm_workload.html">RefLstmWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_mean_workload.html">RefMeanWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_memory_manager.html">RefMemoryManager</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_normalization_workload.html">RefNormalizationWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_pad_workload.html">RefPadWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_permute_workload.html">RefPermuteWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_pooling2d_workload.html">RefPooling2dWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_pooling3d_workload.html">RefPooling3dWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_prelu_workload.html">RefPreluWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_q_lstm_workload.html">RefQLstmWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_quantize_workload.html">RefQuantizeWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_ref_rank_workload.html">RefRankWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_reduce_workload.html">RefReduceWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_reshape_workload.html">RefReshapeWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_resize_workload.html">RefResizeWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_reverse_v2_workload.html">RefReverseV2Workload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_scatter_nd_workload.html">RefScatterNdWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_ref_shape_workload.html">RefShapeWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_slice_workload.html">RefSliceWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_softmax_workload.html">RefSoftmaxWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_space_to_batch_nd_workload.html">RefSpaceToBatchNdWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_space_to_depth_workload.html">RefSpaceToDepthWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_splitter_workload.html">RefSplitterWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_stack_workload.html">RefStackWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_strided_slice_workload.html">RefStridedSliceWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_tensor_handle.html">RefTensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_tensor_handle_decorator.html">RefTensorHandleDecorator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_tensor_handle_factory.html">RefTensorHandleFactory</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_tile_workload.html">RefTileWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_transpose_convolution2d_workload.html">RefTransposeConvolution2dWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_transpose_workload.html">RefTransposeWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_unidirectional_sequence_lstm_workload.html">RefUnidirectionalSequenceLstmWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_workload_factory.html">RefWorkloadFactory</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_reshape_descriptor.html">ReshapeDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_reshape_descriptor.html" title="A ReshapeDescriptor for the ReshapeLayer.">ReshapeDescriptor</a> for the <a class="el" href="classarmnn_1_1_reshape_layer.html" title="This layer represents a reshape operation.">ReshapeLayer</a>. <a href="structarmnn_1_1_reshape_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_reshape_layer.html">ReshapeLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a reshape operation. <a href="classarmnn_1_1_reshape_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_reshape_queue_descriptor.html">ReshapeQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resize_descriptor.html">ResizeDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_resize_descriptor.html" title="A ResizeDescriptor for the ResizeLayer.">ResizeDescriptor</a> for the <a class="el" href="classarmnn_1_1_resize_layer.html" title="This layer represents a resize operation.">ResizeLayer</a>. <a href="structarmnn_1_1_resize_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_resize_layer.html">ResizeLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a resize operation. <a href="classarmnn_1_1_resize_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resize_queue_descriptor.html">ResizeQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl.html">ResolveTypeImpl</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_b_float16_01_4.html">ResolveTypeImpl&lt; DataType::BFloat16 &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_boolean_01_4.html">ResolveTypeImpl&lt; DataType::Boolean &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_float16_01_4.html">ResolveTypeImpl&lt; DataType::Float16 &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_float32_01_4.html">ResolveTypeImpl&lt; DataType::Float32 &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_q_asymm_s8_01_4.html">ResolveTypeImpl&lt; DataType::QAsymmS8 &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_q_asymm_u8_01_4.html">ResolveTypeImpl&lt; DataType::QAsymmU8 &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_q_symm_s16_01_4.html">ResolveTypeImpl&lt; DataType::QSymmS16 &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_q_symm_s8_01_4.html">ResolveTypeImpl&lt; DataType::QSymmS8 &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_signed32_01_4.html">ResolveTypeImpl&lt; DataType::Signed32 &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_signed64_01_4.html">ResolveTypeImpl&lt; DataType::Signed64 &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_reverse_v2_layer.html">ReverseV2Layer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a ReverseV2 operation. <a href="classarmnn_1_1_reverse_v2_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_reverse_v2_queue_descriptor.html">ReverseV2QueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1rsqrt.html">rsqrt</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_rsqrt_layer.html">RsqrtLayer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_rsqrt_queue_descriptor.html">RsqrtQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_rule.html">Rule</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_runtime_exception.html">RuntimeException</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_runtime_impl.html">RuntimeImpl</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_scaled_int32_decoder.html">ScaledInt32Decoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_scaled_int32_per_axis_decoder.html">ScaledInt32PerAxisDecoder</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_scatter_nd_descriptor.html">ScatterNdDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_scatter_nd_descriptor.html" title="A ScatterNdDescriptor for the ScatterNdLayer.">ScatterNdDescriptor</a> for the <a class="el" href="classarmnn_1_1_scatter_nd_layer.html" title="This layer represents a ScatterNd operator.">ScatterNdLayer</a>. <a href="structarmnn_1_1_scatter_nd_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_scatter_nd_layer.html">ScatterNdLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a ScatterNd operator. <a href="classarmnn_1_1_scatter_nd_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_scatter_nd_queue_descriptor.html">ScatterNdQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_scoped_profiling_event.html">ScopedProfilingEvent</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_scoped_record.html">ScopedRecord</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_scoped_tensor_handle.html">ScopedTensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_shape_layer.html">ShapeLayer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_shape_queue_descriptor.html">ShapeQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_shapes_are_broadcast_compatible.html">ShapesAreBroadcastCompatible</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_shapes_are_same_rank.html">ShapesAreSameRank</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_shapes_are_same_total_size.html">ShapesAreSameTotalSize</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_simple_logger.html">SimpleLogger</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1sin.html">sin</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_single_axis_priority_list.html">SingleAxisPriorityList</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classarmnn_1_1_single_axis_priority_list.html" 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.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_slice_descriptor.html">SliceDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_slice_descriptor.html" title="A SliceDescriptor for the SliceLayer.">SliceDescriptor</a> for the <a class="el" href="classarmnn_1_1_slice_layer.html">SliceLayer</a>. <a href="structarmnn_1_1_slice_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_slice_layer.html">SliceLayer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_slice_queue_descriptor.html">SliceQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_softmax_descriptor.html">SoftmaxDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_softmax_descriptor.html" title="A SoftmaxDescriptor for the SoftmaxLayer.">SoftmaxDescriptor</a> for the <a class="el" href="classarmnn_1_1_softmax_layer.html" title="This layer represents a softmax operation.">SoftmaxLayer</a>. <a href="structarmnn_1_1_softmax_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_softmax_layer.html">SoftmaxLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a softmax operation. <a href="classarmnn_1_1_softmax_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_softmax_queue_descriptor.html">SoftmaxQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.html">SpaceToBatchNdDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.html" title="A SpaceToBatchNdDescriptor for the SpaceToBatchNdLayer.">SpaceToBatchNdDescriptor</a> for the <a class="el" href="classarmnn_1_1_space_to_batch_nd_layer.html" title="This layer represents a SpaceToBatchNd operation.">SpaceToBatchNdLayer</a>. <a href="structarmnn_1_1_space_to_batch_nd_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_space_to_batch_nd_layer.html">SpaceToBatchNdLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a SpaceToBatchNd operation. <a href="classarmnn_1_1_space_to_batch_nd_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_space_to_batch_nd_queue_descriptor.html">SpaceToBatchNdQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_space_to_depth_descriptor.html">SpaceToDepthDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.html" title="A SpaceToDepthDescriptor for the SpaceToDepthLayer.">SpaceToDepthDescriptor</a> for the <a class="el" href="classarmnn_1_1_space_to_depth_layer.html" title="This layer represents a SpaceToDepth operation.">SpaceToDepthLayer</a>. <a href="structarmnn_1_1_space_to_depth_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_space_to_depth_layer.html">SpaceToDepthLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a SpaceToDepth operation. <a href="classarmnn_1_1_space_to_depth_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_space_to_depth_queue_descriptor.html">SpaceToDepthQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_splitter_layer.html">SplitterLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a split operation. <a href="classarmnn_1_1_splitter_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_splitter_queue_descriptor.html">SplitterQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1sqrt.html">sqrt</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1squared_difference.html">squaredDifference</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stack_descriptor.html">StackDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_stack_descriptor.html" title="A StackDescriptor for the StackLayer.">StackDescriptor</a> for the <a class="el" href="classarmnn_1_1_stack_layer.html" title="This layer represents a stack operation.">StackLayer</a>. <a href="structarmnn_1_1_stack_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_stack_layer.html">StackLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a stack operation. <a href="classarmnn_1_1_stack_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stack_queue_descriptor.html">StackQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_standard_output_sink.html">StandardOutputSink</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stand_in_descriptor.html">StandInDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_stand_in_descriptor.html" title="A StandInDescriptor for the StandIn layer.">StandInDescriptor</a> for the StandIn layer. <a href="structarmnn_1_1_stand_in_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_stand_in_layer.html">StandInLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents an unknown operation in the input graph. <a href="classarmnn_1_1_stand_in_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_strategy_base.html">StrategyBase</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Strategy base class with empty implementations. <a href="classarmnn_1_1_strategy_base.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_strategy_factory.html">StrategyFactory</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_strategy_validator.html">StrategyValidator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_strided_slice_descriptor.html">StridedSliceDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_strided_slice_descriptor.html" title="A StridedSliceDescriptor for the StridedSliceLayer.">StridedSliceDescriptor</a> for the <a class="el" href="classarmnn_1_1_strided_slice_layer.html" title="This layer represents a strided slice operation.">StridedSliceLayer</a>. <a href="structarmnn_1_1_strided_slice_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_strided_slice_layer.html">StridedSliceLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a strided slice operation. <a href="classarmnn_1_1_strided_slice_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_strided_slice_queue_descriptor.html">StridedSliceQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters.html">StringifyLayerParameters</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structarmnn_1_1_stringify_layer_parameters.html" title="StringifyLayerParameters allows serializing layer parameters to string.">StringifyLayerParameters</a> allows serializing layer parameters to string. <a href="structarmnn_1_1_stringify_layer_parameters.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_activation_descriptor_01_4.html">StringifyLayerParameters&lt; ActivationDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_batch_mat_mul_descriptor_01_4.html">StringifyLayerParameters&lt; BatchMatMulDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_batch_normalization_descriptor_01_4.html">StringifyLayerParameters&lt; BatchNormalizationDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_batch_to_space_nd_descriptor_01_4.html">StringifyLayerParameters&lt; BatchToSpaceNdDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_channel_shuffle_descriptor_01_4.html">StringifyLayerParameters&lt; ChannelShuffleDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_comparison_descriptor_01_4.html">StringifyLayerParameters&lt; ComparisonDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_convolution2d_descriptor_01_4.html">StringifyLayerParameters&lt; Convolution2dDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_convolution3d_descriptor_01_4.html">StringifyLayerParameters&lt; Convolution3dDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_depthwise_convolution2d_descriptor_01_4.html">StringifyLayerParameters&lt; DepthwiseConvolution2dDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_detection_post_process_descriptor_01_4.html">StringifyLayerParameters&lt; DetectionPostProcessDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_elementwise_binary_descriptor_01_4.html">StringifyLayerParameters&lt; ElementwiseBinaryDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_elementwise_unary_descriptor_01_4.html">StringifyLayerParameters&lt; ElementwiseUnaryDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_fake_quantization_descriptor_01_4.html">StringifyLayerParameters&lt; FakeQuantizationDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_fully_connected_descriptor_01_4.html">StringifyLayerParameters&lt; FullyConnectedDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_fused_descriptor_01_4.html">StringifyLayerParameters&lt; FusedDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_gather_descriptor_01_4.html">StringifyLayerParameters&lt; GatherDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_l2_normalization_descriptor_01_4.html">StringifyLayerParameters&lt; L2NormalizationDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_lstm_descriptor_01_4.html">StringifyLayerParameters&lt; LstmDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_mean_descriptor_01_4.html">StringifyLayerParameters&lt; MeanDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_normalization_descriptor_01_4.html">StringifyLayerParameters&lt; NormalizationDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_origins_descriptor_01_4.html">StringifyLayerParameters&lt; OriginsDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_pad_descriptor_01_4.html">StringifyLayerParameters&lt; PadDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_permute_descriptor_01_4.html">StringifyLayerParameters&lt; PermuteDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_pooling2d_descriptor_01_4.html">StringifyLayerParameters&lt; Pooling2dDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_pooling3d_descriptor_01_4.html">StringifyLayerParameters&lt; Pooling3dDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_pre_compiled_descriptor_01_4.html">StringifyLayerParameters&lt; PreCompiledDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_reduce_descriptor_01_4.html">StringifyLayerParameters&lt; ReduceDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_reshape_descriptor_01_4.html">StringifyLayerParameters&lt; ReshapeDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_resize_descriptor_01_4.html">StringifyLayerParameters&lt; ResizeDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_softmax_descriptor_01_4.html">StringifyLayerParameters&lt; SoftmaxDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_space_to_batch_nd_descriptor_01_4.html">StringifyLayerParameters&lt; SpaceToBatchNdDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_space_to_depth_descriptor_01_4.html">StringifyLayerParameters&lt; SpaceToDepthDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_stack_descriptor_01_4.html">StringifyLayerParameters&lt; StackDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_strided_slice_descriptor_01_4.html">StringifyLayerParameters&lt; StridedSliceDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_tile_descriptor_01_4.html">StringifyLayerParameters&lt; TileDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_transpose_convolution2d_descriptor_01_4.html">StringifyLayerParameters&lt; TransposeConvolution2dDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_transpose_descriptor_01_4.html">StringifyLayerParameters&lt; TransposeDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_views_descriptor_01_4.html">StringifyLayerParameters&lt; ViewsDescriptor &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_string_mapping.html">StringMapping</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structarmnn_1_1_string_mapping.html" 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.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_subgraph_view.html">SubgraphView</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The <a class="el" href="classarmnn_1_1_subgraph_view.html" 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.html">Graph</a>. <a href="classarmnn_1_1_subgraph_view.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_subgraph_view_selector.html">SubgraphViewSelector</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Algorithm that splits a <a class="el" href="classarmnn_1_1_graph.html">Graph</a> into Subgraphs based on a filtering of layers (e.g. <a href="classarmnn_1_1_subgraph_view_selector.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_subtraction_layer.html">SubtractionLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a subtraction operation. <a href="classarmnn_1_1_subtraction_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_subtraction_queue_descriptor.html">SubtractionQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_switch_layer.html">SwitchLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer calculates both true and false outputs for input. <a href="classarmnn_1_1_switch_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_switch_queue_descriptor.html">SwitchQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_sync_mem_generic_workload.html">SyncMemGenericWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tensor.html">Tensor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A tensor defined by a <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> (shape and data type) and a mutable backing store. <a href="classarmnn_1_1_tensor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tensor_buffer_array_view.html">TensorBufferArrayView</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tensor_handle.html">TensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.html">TensorHandleFactoryRegistry</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_tensor_memory.html">TensorMemory</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_tensor_num_dimensions_are_correct.html">TensorNumDimensionsAreCorrect</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_tensor_num_dimensions_are_greater_or_equal_to.html">TensorNumDimensionsAreGreaterOrEqualTo</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_throwing_strategy.html">ThrowingStrategy</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_tile_descriptor.html">TileDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tile_layer.html">TileLayer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_tile_queue_descriptor.html">TileQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_timeout_exception.html">TimeoutException</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tosa_ref_backend.html">TosaRefBackend</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tosa_ref_base_workload.html">TosaRefBaseWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tosa_ref_layer_support.html">TosaRefLayerSupport</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tosa_ref_memory_manager.html">TosaRefMemoryManager</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tosa_ref_pre_compiled_workload.html">TosaRefPreCompiledWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tosa_ref_tensor_handle.html">TosaRefTensorHandle</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tosa_ref_tensor_handle_factory.html">TosaRefTensorHandleFactory</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tosa_ref_workload_factory.html">TosaRefWorkloadFactory</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_transform_iterator.html">TransformIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.html">TransposeConvolution2dDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.html" title="A TransposeConvolution2dDescriptor for the TransposeConvolution2dLayer.">TransposeConvolution2dDescriptor</a> for the <a class="el" href="classarmnn_1_1_transpose_convolution2d_layer.html" title="This layer represents a 2D transpose convolution operation.">TransposeConvolution2dLayer</a>. <a href="structarmnn_1_1_transpose_convolution2d_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_transpose_convolution2d_layer.html">TransposeConvolution2dLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a 2D transpose convolution operation. <a href="classarmnn_1_1_transpose_convolution2d_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_transpose_convolution2d_queue_descriptor.html">TransposeConvolution2dQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_transpose_descriptor.html">TransposeDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_transpose_descriptor.html" title="A TransposeDescriptor for the TransposeLayer.">TransposeDescriptor</a> for the <a class="el" href="classarmnn_1_1_transpose_layer.html" title="This layer represents a transpose operation.">TransposeLayer</a>. <a href="structarmnn_1_1_transpose_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_transpose_layer.html">TransposeLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a transpose operation. <a href="classarmnn_1_1_transpose_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_transpose_queue_descriptor.html">TransposeQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_type_any_of.html">TypeAnyOf</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_typed_iterator.html">TypedIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_typed_workload.html">TypedWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_type_is.html">TypeIs</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_type_not_per_axis_quantized.html">TypeNotPerAxisQuantized</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_types_are_equal.html">TypesAreEqual</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_unidirectional_sequence_lstm_layer.html">UnidirectionalSequenceLstmLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a LSTM operation. <a href="classarmnn_1_1_unidirectional_sequence_lstm_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_unidirectional_sequence_lstm_queue_descriptor.html">UnidirectionalSequenceLstmQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_unimplemented_exception.html">UnimplementedException</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_unmap_layer.html">UnmapLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a memory copy operation. <a href="classarmnn_1_1_unmap_layer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_unmap_queue_descriptor.html">UnmapQueueDescriptor</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_unmap_workload.html">UnmapWorkload</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_views_descriptor.html">ViewsDescriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_views_descriptor.html" title="A ViewsDescriptor for the SplitterLayer.">ViewsDescriptor</a> for the <a class="el" href="classarmnn_1_1_splitter_layer.html" title="This layer represents a split operation.">SplitterLayer</a>. <a href="structarmnn_1_1_views_descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_wall_clock_timer.html">WallClockTimer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_workload_data_collector.html">WorkloadDataCollector</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_workload_factory_base.html">WorkloadFactoryBase</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Contains information about TensorInfos of a layer. <a href="structarmnn_1_1_workload_info.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ac858d91eedb7b4dba1bcd0aa760ab510"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac858d91eedb7b4dba1bcd0aa760ab510">BackendIdVector</a> = std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt;</td></tr>
<tr class="separator:ac858d91eedb7b4dba1bcd0aa760ab510"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1854d9cda81304325664363c1fd0fb27"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> = std::unordered_set&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt;</td></tr>
<tr class="separator:a1854d9cda81304325664363c1fd0fb27"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4de71c3661093e5c4ae7775114f43413"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4de71c3661093e5c4ae7775114f43413">NetworkOptions</a> = std::vector&lt; <a class="el" href="structarmnn_1_1_backend_options.html">BackendOptions</a> &gt;</td></tr>
<tr class="separator:a4de71c3661093e5c4ae7775114f43413"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b6893cda5b69359a4244c06054da18f"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> = std::vector&lt; <a class="el" href="structarmnn_1_1_backend_options.html">BackendOptions</a> &gt;</td></tr>
<tr class="separator:a5b6893cda5b69359a4244c06054da18f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa9c506b558b8aa33a228b15164f40dc3"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> = <a class="el" href="structarmnn_1_1_backend_options.html">BackendOptions</a></td></tr>
<tr class="separator:aa9c506b558b8aa33a228b15164f40dc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ade0af9dacaa52cafdd701bef2e901c77"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ade0af9dacaa52cafdd701bef2e901c77">IBackendInternalUniquePtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_backend_internal.html">IBackendInternal</a> &gt;</td></tr>
<tr class="separator:ade0af9dacaa52cafdd701bef2e901c77"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abb25db39e8d7f30b3736701b65ce514b"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abb25db39e8d7f30b3736701b65ce514b">MemoryOptimizerStrategiesMapRef</a> = std::unordered_map&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a>, std::shared_ptr&lt; <a class="el" href="classarmnn_1_1_i_memory_optimizer_strategy.html">IMemoryOptimizerStrategy</a> &gt; &gt;</td></tr>
<tr class="separator:abb25db39e8d7f30b3736701b65ce514b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a754d43dc24a0fe36ecb3044d8f13a413"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a754d43dc24a0fe36ecb3044d8f13a413">DynamicBackendPtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_dynamic_backend.html">DynamicBackend</a> &gt;</td></tr>
<tr class="separator:a754d43dc24a0fe36ecb3044d8f13a413"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a65a0ad0a7b807e70295481a7b9cb93ac"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a65a0ad0a7b807e70295481a7b9cb93ac">IBackendContextUniquePtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_backend_context.html">IBackendContext</a> &gt;</td></tr>
<tr class="separator:a65a0ad0a7b807e70295481a7b9cb93ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a11fa919c11fe46aad613b2e960fcfe90"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a11fa919c11fe46aad613b2e960fcfe90">ILayerSupportSharedPtr</a> = std::shared_ptr&lt; <a class="el" href="classarmnn_1_1_i_layer_support.html">ILayerSupport</a> &gt;</td></tr>
<tr class="separator:a11fa919c11fe46aad613b2e960fcfe90"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a12bff6d51d63dac1375c89bc8415dc46"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a12bff6d51d63dac1375c89bc8415dc46">IMemoryManagerUniquePtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_memory_manager.html">IMemoryManager</a> &gt;</td></tr>
<tr class="separator:a12bff6d51d63dac1375c89bc8415dc46"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abaedcfd0ae08790c03bfe8ba7586dd84"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
<tr class="memitem:abaedcfd0ae08790c03bfe8ba7586dd84"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abaedcfd0ae08790c03bfe8ba7586dd84">FloatWorkload</a> = <a class="el" href="classarmnn_1_1_typed_workload.html">TypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a> &gt;</td></tr>
<tr class="separator:abaedcfd0ae08790c03bfe8ba7586dd84"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0493144f15b35804a133c9aa0b63fcc9"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
<tr class="memitem:a0493144f15b35804a133c9aa0b63fcc9"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0493144f15b35804a133c9aa0b63fcc9">Float32Workload</a> = <a class="el" href="classarmnn_1_1_typed_workload.html">TypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a> &gt;</td></tr>
<tr class="separator:a0493144f15b35804a133c9aa0b63fcc9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad4d53881107428c301d43b5aad16bfe0"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
<tr class="memitem:ad4d53881107428c301d43b5aad16bfe0"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad4d53881107428c301d43b5aad16bfe0">Uint8Workload</a> = <a class="el" href="classarmnn_1_1_typed_workload.html">TypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a> &gt;</td></tr>
<tr class="separator:ad4d53881107428c301d43b5aad16bfe0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3e4b88b993c90b274e0bd268c35d798e"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
<tr class="memitem:a3e4b88b993c90b274e0bd268c35d798e"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3e4b88b993c90b274e0bd268c35d798e">Int32Workload</a> = <a class="el" href="classarmnn_1_1_typed_workload.html">TypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a> &gt;</td></tr>
<tr class="separator:a3e4b88b993c90b274e0bd268c35d798e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab539ef5a0c152536da71c8fcc065efb5"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
<tr class="memitem:ab539ef5a0c152536da71c8fcc065efb5"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab539ef5a0c152536da71c8fcc065efb5">BooleanWorkload</a> = <a class="el" href="classarmnn_1_1_typed_workload.html">TypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a> &gt;</td></tr>
<tr class="separator:ab539ef5a0c152536da71c8fcc065efb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a20d2055c37fedf3f39db9facf2c8c697"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
<tr class="memitem:a20d2055c37fedf3f39db9facf2c8c697"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a20d2055c37fedf3f39db9facf2c8c697">BaseFloat32ComparisonWorkload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.html">MultiTypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a> &gt;</td></tr>
<tr class="separator:a20d2055c37fedf3f39db9facf2c8c697"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9cbc0957cf0637cc3fd9702086117cc0"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
<tr class="memitem:a9cbc0957cf0637cc3fd9702086117cc0"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9cbc0957cf0637cc3fd9702086117cc0">BaseUint8ComparisonWorkload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.html">MultiTypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a> &gt;</td></tr>
<tr class="separator:a9cbc0957cf0637cc3fd9702086117cc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a96b023ab3b395df841cc706f77c236cc"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
<tr class="memitem:a96b023ab3b395df841cc706f77c236cc"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a96b023ab3b395df841cc706f77c236cc">BFloat16ToFloat32Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.html">MultiTypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a> &gt;</td></tr>
<tr class="separator:a96b023ab3b395df841cc706f77c236cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ef601b454db749320636d9425b1f4c2"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
<tr class="memitem:a6ef601b454db749320636d9425b1f4c2"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6ef601b454db749320636d9425b1f4c2">Float32ToBFloat16Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.html">MultiTypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a> &gt;</td></tr>
<tr class="separator:a6ef601b454db749320636d9425b1f4c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a827d59b5a779a8089017802172817f3c"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
<tr class="memitem:a827d59b5a779a8089017802172817f3c"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a827d59b5a779a8089017802172817f3c">Float16ToFloat32Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.html">MultiTypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a> &gt;</td></tr>
<tr class="separator:a827d59b5a779a8089017802172817f3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6486138451112140f98516c0bee18615"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
<tr class="memitem:a6486138451112140f98516c0bee18615"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6486138451112140f98516c0bee18615">Float32ToFloat16Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.html">MultiTypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a> &gt;</td></tr>
<tr class="separator:a6486138451112140f98516c0bee18615"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6d4fbf927a9d8e68cab1d7965c7dbc44"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
<tr class="memitem:a6d4fbf927a9d8e68cab1d7965c7dbc44"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6d4fbf927a9d8e68cab1d7965c7dbc44">Uint8ToFloat32Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.html">MultiTypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a> &gt;</td></tr>
<tr class="separator:a6d4fbf927a9d8e68cab1d7965c7dbc44"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2231ac018fe2c465f2d42fef597d67e7"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2231ac018fe2c465f2d42fef597d67e7">InputQueueDescriptor</a> = <a class="el" href="structarmnn_1_1_mem_copy_queue_descriptor.html">MemCopyQueueDescriptor</a></td></tr>
<tr class="separator:a2231ac018fe2c465f2d42fef597d67e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a37a1a6b381ccc76df203fee023234996"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a37a1a6b381ccc76df203fee023234996">OutputQueueDescriptor</a> = <a class="el" href="structarmnn_1_1_mem_copy_queue_descriptor.html">MemCopyQueueDescriptor</a></td></tr>
<tr class="separator:a37a1a6b381ccc76df203fee023234996"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a308ba160745ba35e1de8d698d0139eb4"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a308ba160745ba35e1de8d698d0139eb4">MergerQueueDescriptor</a> = <a class="el" href="structarmnn_1_1_concat_queue_descriptor.html">ConcatQueueDescriptor</a></td></tr>
<tr class="separator:a308ba160745ba35e1de8d698d0139eb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac14705405cbcdd580df613de6766fe65"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac14705405cbcdd580df613de6766fe65">LogSoftmaxDescriptor</a> = <a class="el" href="structarmnn_1_1_softmax_descriptor.html">SoftmaxDescriptor</a></td></tr>
<tr class="memdesc:ac14705405cbcdd580df613de6766fe65"><td class="mdescLeft">&#160;</td><td class="mdescRight">A LogSoftmaxDescriptor for the <a class="el" href="classarmnn_1_1_log_softmax_layer.html" title="This layer represents a log softmax operation.">LogSoftmaxLayer</a>. <a href="namespacearmnn.html#ac14705405cbcdd580df613de6766fe65">More...</a><br /></td></tr>
<tr class="separator:ac14705405cbcdd580df613de6766fe65"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3647f60510bc8ddaced01c51b0ee8714"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a> = <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.html">SpaceToDepthDescriptor</a></td></tr>
<tr class="memdesc:a3647f60510bc8ddaced01c51b0ee8714"><td class="mdescLeft">&#160;</td><td class="mdescRight">A DepthToSpaceDescriptor for the <a class="el" href="classarmnn_1_1_depth_to_space_layer.html" title="This layer represents a DepthToSpace operation.">DepthToSpaceLayer</a>. <a href="namespacearmnn.html#a3647f60510bc8ddaced01c51b0ee8714">More...</a><br /></td></tr>
<tr class="separator:a3647f60510bc8ddaced01c51b0ee8714"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae6c5f1b51bd32133c4dcc632045d6b58"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae6c5f1b51bd32133c4dcc632045d6b58">UnidirectionalSequenceLstmDescriptor</a> = <a class="el" href="structarmnn_1_1_lstm_descriptor.html">LstmDescriptor</a></td></tr>
<tr class="separator:ae6c5f1b51bd32133c4dcc632045d6b58"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7863c179ff92feec660c48ab7b95ae55"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7863c179ff92feec660c48ab7b95ae55">ConcatDescriptor</a> = <a class="el" href="structarmnn_1_1_origins_descriptor.html">OriginsDescriptor</a></td></tr>
<tr class="separator:a7863c179ff92feec660c48ab7b95ae55"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a003d213dd28b0b8c0f26fbf268ccb975"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a003d213dd28b0b8c0f26fbf268ccb975">MergerDescriptor</a> = <a class="el" href="structarmnn_1_1_origins_descriptor.html">OriginsDescriptor</a></td></tr>
<tr class="memdesc:a003d213dd28b0b8c0f26fbf268ccb975"><td class="mdescLeft">&#160;</td><td class="mdescRight">MergerDescriptor is deprecated, use ConcatDescriptor instead. <a href="namespacearmnn.html#a003d213dd28b0b8c0f26fbf268ccb975">More...</a><br /></td></tr>
<tr class="separator:a003d213dd28b0b8c0f26fbf268ccb975"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a60291543fe872b795e71e05bcd835fd1"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a60291543fe872b795e71e05bcd835fd1">SplitterDescriptor</a> = <a class="el" href="structarmnn_1_1_views_descriptor.html">ViewsDescriptor</a></td></tr>
<tr class="separator:a60291543fe872b795e71e05bcd835fd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ace74f6f9feb95a964a49d79458232703"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ace74f6f9feb95a964a49d79458232703">INetworkPtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_network.html">INetwork</a>, void(*)(<a class="el" href="classarmnn_1_1_i_network.html">INetwork</a> *network)&gt;</td></tr>
<tr class="separator:ace74f6f9feb95a964a49d79458232703"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a674efcf6cbdb9e831d653ff0e821fb38"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a>, void(*)(<a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> *network)&gt;</td></tr>
<tr class="separator:a674efcf6cbdb9e831d653ff0e821fb38"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af244057f8225833d8e9dc03949a6f0a2"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af244057f8225833d8e9dc03949a6f0a2">CompiledBlobDeleter</a> = std::function&lt; void(const void *)&gt;</td></tr>
<tr class="separator:af244057f8225833d8e9dc03949a6f0a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af362583b7b4c471c434cb0fdb86c2ae2"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af362583b7b4c471c434cb0fdb86c2ae2">CompiledBlobPtr</a> = std::unique_ptr&lt; void, <a class="el" href="namespacearmnn.html#af244057f8225833d8e9dc03949a6f0a2">CompiledBlobDeleter</a> &gt;</td></tr>
<tr class="separator:af362583b7b4c471c434cb0fdb86c2ae2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0d8160388a127c1a23b37bc88dc6e2ec"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0d8160388a127c1a23b37bc88dc6e2ec">NetworkId</a> = int</td></tr>
<tr class="separator:a0d8160388a127c1a23b37bc88dc6e2ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a150468a02bd7b2d2d061c4aaaee939f0"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a150468a02bd7b2d2d061c4aaaee939f0">IRuntimePtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_runtime.html">IRuntime</a>, void(*)(<a class="el" href="classarmnn_1_1_i_runtime.html">IRuntime</a> *runtime)&gt;</td></tr>
<tr class="separator:a150468a02bd7b2d2d061c4aaaee939f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2d3a708a26ac6d77bf8f15506e89a25a"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2d3a708a26ac6d77bf8f15506e89a25a">IGpuAccTunedParametersPtr</a> = std::shared_ptr&lt; <a class="el" href="classarmnn_1_1_i_gpu_acc_tuned_parameters.html">IGpuAccTunedParameters</a> &gt;</td></tr>
<tr class="memdesc:a2d3a708a26ac6d77bf8f15506e89a25a"><td class="mdescLeft">&#160;</td><td class="mdescRight">The following API is replaced by the backend options API. <a href="namespacearmnn.html#a2d3a708a26ac6d77bf8f15506e89a25a">More...</a><br /></td></tr>
<tr class="separator:a2d3a708a26ac6d77bf8f15506e89a25a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b05f3b7208ec7cea3338e30057c0bac"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a> = unsigned int</td></tr>
<tr class="separator:a5b05f3b7208ec7cea3338e30057c0bac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a280670a263dc4fd40491f6d0a2737f44"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a280670a263dc4fd40491f6d0a2737f44">BindingPointInfo</a> = std::pair&lt; <a class="el" href="namespacearmnn.html#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a>, <a class="el" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> &gt;</td></tr>
<tr class="separator:a280670a263dc4fd40491f6d0a2737f44"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa01bce88f89975a5a031db4cc8861527"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa01bce88f89975a5a031db4cc8861527">InputTensors</a> = std::vector&lt; std::pair&lt; <a class="el" href="namespacearmnn.html#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a>, class <a class="el" href="classarmnn_1_1_const_tensor.html">ConstTensor</a> &gt; &gt;</td></tr>
<tr class="separator:aa01bce88f89975a5a031db4cc8861527"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8f091a512915d1cb29a4ebf13dfc53ea"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8f091a512915d1cb29a4ebf13dfc53ea">OutputTensors</a> = std::vector&lt; std::pair&lt; <a class="el" href="namespacearmnn.html#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a>, class <a class="el" href="classarmnn_1_1_tensor.html">Tensor</a> &gt; &gt;</td></tr>
<tr class="separator:a8f091a512915d1cb29a4ebf13dfc53ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae18caa7ee6287aa7f8c2a5ce6bc92382"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae18caa7ee6287aa7f8c2a5ce6bc92382">IBackendSharedPtr</a> = std::shared_ptr&lt; <a class="el" href="classarmnn_1_1_i_backend.html">IBackend</a> &gt;</td></tr>
<tr class="separator:ae18caa7ee6287aa7f8c2a5ce6bc92382"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5a665483e56a688e9f8180accdf72d80"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5a665483e56a688e9f8180accdf72d80">IBackendUniquePtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_backend.html">IBackend</a>, void(*)(<a class="el" href="classarmnn_1_1_i_backend.html">IBackend</a> *backend)&gt;</td></tr>
<tr class="separator:a5a665483e56a688e9f8180accdf72d80"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab8cf8f9fb6792e654c2d8d8382f6f01b"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> = int</td></tr>
<tr class="memdesc:ab8cf8f9fb6792e654c2d8d8382f6f01b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Type of identifiers for bindable layers (inputs, outputs). <a href="namespacearmnn.html#ab8cf8f9fb6792e654c2d8d8382f6f01b">More...</a><br /></td></tr>
<tr class="separator:ab8cf8f9fb6792e654c2d8d8382f6f01b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1c5ec805688cb558465a82a8d9f56a90"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1c5ec805688cb558465a82a8d9f56a90">ImportedInputId</a> = unsigned int</td></tr>
<tr class="separator:a1c5ec805688cb558465a82a8d9f56a90"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac68a434f0e78e33726bfb22a39ec813f"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac68a434f0e78e33726bfb22a39ec813f">ImportedOutputId</a> = unsigned int</td></tr>
<tr class="separator:ac68a434f0e78e33726bfb22a39ec813f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15f3ad9b5e4e3d46b0a6dda246a7bc28"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a15f3ad9b5e4e3d46b0a6dda246a7bc28">DebugCallbackFunction</a> = std::function&lt; void(<a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a> guid, unsigned int slotIndex, <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *tensorHandle)&gt;</td></tr>
<tr class="memdesc:a15f3ad9b5e4e3d46b0a6dda246a7bc28"><td class="mdescLeft">&#160;</td><td class="mdescRight">Define the type of callback for the Debug layer to call. <a href="namespacearmnn.html#a15f3ad9b5e4e3d46b0a6dda246a7bc28">More...</a><br /></td></tr>
<tr class="separator:a15f3ad9b5e4e3d46b0a6dda246a7bc28"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4b3cb628c15e1eea1b09ec848e9ae8c4"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4b3cb628c15e1eea1b09ec848e9ae8c4">HighResolutionClock</a> = std::chrono::high_resolution_clock::time_point</td></tr>
<tr class="memdesc:a4b3cb628c15e1eea1b09ec848e9ae8c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Define a timer and associated inference ID for recording execution times. <a href="namespacearmnn.html#a4b3cb628c15e1eea1b09ec848e9ae8c4">More...</a><br /></td></tr>
<tr class="separator:a4b3cb628c15e1eea1b09ec848e9ae8c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a51611ed886390df47733157d0c105453"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a51611ed886390df47733157d0c105453">InferenceTimingPair</a> = std::pair&lt; <a class="el" href="namespacearmnn.html#a4b3cb628c15e1eea1b09ec848e9ae8c4">HighResolutionClock</a>, <a class="el" href="namespacearmnn.html#a4b3cb628c15e1eea1b09ec848e9ae8c4">HighResolutionClock</a> &gt;</td></tr>
<tr class="separator:a51611ed886390df47733157d0c105453"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14275495042ea02d0348dd70eeaf3d68"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a14275495042ea02d0348dd70eeaf3d68">TensorInfos</a> = std::vector&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt;</td></tr>
<tr class="separator:a14275495042ea02d0348dd70eeaf3d68"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15f53f26b8495b51d0bba3d1bc4efc80"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a15f53f26b8495b51d0bba3d1bc4efc80">WorkloadQueue</a> = std::vector&lt; std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_workload.html">IWorkload</a> &gt; &gt;</td></tr>
<tr class="separator:a15f53f26b8495b51d0bba3d1bc4efc80"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac6e86c1def7f674d3c4cb7f577874aa6"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">Coordinates</a> = std::array&lt; unsigned int, <a class="el" href="namespacearmnn.html#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a> &gt;</td></tr>
<tr class="separator:ac6e86c1def7f674d3c4cb7f577874aa6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a293695a94110c1a0eb77e29c22dce79a"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a293695a94110c1a0eb77e29c22dce79a">Dimensions</a> = std::array&lt; unsigned int, <a class="el" href="namespacearmnn.html#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a> &gt;</td></tr>
<tr class="separator:a293695a94110c1a0eb77e29c22dce79a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a419086ecb4dc9d0f9e5d8933c87e2ea2"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a419086ecb4dc9d0f9e5d8933c87e2ea2">LayerPriority</a> = unsigned int</td></tr>
<tr class="separator:a419086ecb4dc9d0f9e5d8933c87e2ea2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2a5caf3721af872f43c7642fec9449bc"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2a5caf3721af872f43c7642fec9449bc">AdditionalInfoObjectPtr</a> = std::shared_ptr&lt; void &gt;</td></tr>
<tr class="separator:a2a5caf3721af872f43c7642fec9449bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae73bf7cb78cc552c5511431b0d583f14"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae73bf7cb78cc552c5511431b0d583f14">PreCompiledObjectDeleter</a> = std::function&lt; void(const void *)&gt;</td></tr>
<tr class="separator:ae73bf7cb78cc552c5511431b0d583f14"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae3bff3986cb5a50637c9b3238d821f54"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae3bff3986cb5a50637c9b3238d821f54">PreCompiledObjectPtr</a> = std::unique_ptr&lt; void, <a class="el" href="namespacearmnn.html#ae73bf7cb78cc552c5511431b0d583f14">PreCompiledObjectDeleter</a> &gt;</td></tr>
<tr class="separator:ae3bff3986cb5a50637c9b3238d821f54"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6b5db6cc9aad8ec0ac7b14f859aacdab"><td class="memTemplParams" colspan="2">template&lt;LayerType Type&gt; </td></tr>
<tr class="memitem:a6b5db6cc9aad8ec0ac7b14f859aacdab"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6b5db6cc9aad8ec0ac7b14f859aacdab">LayerTypeOf</a> = typename <a class="el" href="structarmnn_1_1_layer_type_of_impl.html">LayerTypeOfImpl</a>&lt; Type &gt;::Type</td></tr>
<tr class="separator:a6b5db6cc9aad8ec0ac7b14f859aacdab"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a08eb5e20e6b0ce43c5729e8f88b6a910"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a08eb5e20e6b0ce43c5729e8f88b6a910">NetworkImplPtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_network_impl.html">NetworkImpl</a>, void(*)(<a class="el" href="classarmnn_1_1_network_impl.html">NetworkImpl</a> *network)&gt;</td></tr>
<tr class="separator:a08eb5e20e6b0ce43c5729e8f88b6a910"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9173495a61a0092b5f38b855f02c3585"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> = std::map&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a>, std::unique_ptr&lt; class <a class="el" href="classarmnn_1_1_i_backend_internal.html">IBackendInternal</a> &gt; &gt;</td></tr>
<tr class="separator:a9173495a61a0092b5f38b855f02c3585"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0743ed5e860c316a20b68ca96301b411"><td class="memTemplParams" colspan="2">template&lt;DataType DT&gt; </td></tr>
<tr class="memitem:a0743ed5e860c316a20b68ca96301b411"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0743ed5e860c316a20b68ca96301b411">ResolveType</a> = typename <a class="el" href="structarmnn_1_1_resolve_type_impl.html">ResolveTypeImpl</a>&lt; DT &gt;::Type</td></tr>
<tr class="separator:a0743ed5e860c316a20b68ca96301b411"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a12f6b97ee3f1060ecb6240e022678a8b"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a12f6b97ee3f1060ecb6240e022678a8b">LoadedNetworks</a> = std::unordered_map&lt; <a class="el" href="namespacearmnn.html#a0d8160388a127c1a23b37bc88dc6e2ec">NetworkId</a>, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_loaded_network.html">LoadedNetwork</a> &gt; &gt;</td></tr>
<tr class="separator:a12f6b97ee3f1060ecb6240e022678a8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8f7d7a1df79013aed46ae67d31c239b5"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8f7d7a1df79013aed46ae67d31c239b5">IReportStructure</a> = arm::pipe::IReportStructure</td></tr>
<tr class="separator:a8f7d7a1df79013aed46ae67d31c239b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac77c71a352f1e7f9fa4d9e4ceafa81d9"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac77c71a352f1e7f9fa4d9e4ceafa81d9">IInitialiseProfilingService</a> = arm::pipe::IInitialiseProfilingService</td></tr>
<tr class="separator:ac77c71a352f1e7f9fa4d9e4ceafa81d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8c42c6647e31ebe525aeba878d133e45"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8c42c6647e31ebe525aeba878d133e45">ParameterStringifyFunction</a> = std::function&lt; void(const std::string &amp;name, const std::string &amp;value)&gt;</td></tr>
<tr class="separator:a8c42c6647e31ebe525aeba878d133e45"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a947e07902b1b5d98b57eeae34053146b"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a947e07902b1b5d98b57eeae34053146b">FactoryId</a> = <a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a></td></tr>
<tr class="separator:a947e07902b1b5d98b57eeae34053146b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0b49aa352b84d572942185ce72cef751"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">Half</a> = half_float::half</td></tr>
<tr class="separator:a0b49aa352b84d572942185ce72cef751"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afda19bd482bb55233fe27b4c2e044a3d"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#afda19bd482bb55233fe27b4c2e044a3d">CopyAndImportFactoryPairs</a> = std::map&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a> &gt;</td></tr>
<tr class="separator:afda19bd482bb55233fe27b4c2e044a3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af206e37bc077be6083853fd8365b999a"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af206e37bc077be6083853fd8365b999a">ACLMemManagerOnDemand</a> = std::shared_ptr&lt; arm_compute::MemoryManagerOnDemand &gt;</td></tr>
<tr class="separator:af206e37bc077be6083853fd8365b999a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab51075960a6cf82a8bb6ee81c9efa97d"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab51075960a6cf82a8bb6ee81c9efa97d">RefDebugBFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a> &gt;</td></tr>
<tr class="separator:ab51075960a6cf82a8bb6ee81c9efa97d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac8d7aa6e66fb59a839833b160f619228"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac8d7aa6e66fb59a839833b160f619228">RefDebugFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a> &gt;</td></tr>
<tr class="separator:ac8d7aa6e66fb59a839833b160f619228"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad194629946077375dcce05b2449334c8"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad194629946077375dcce05b2449334c8">RefDebugFloat32Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a> &gt;</td></tr>
<tr class="separator:ad194629946077375dcce05b2449334c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0c1df21c99a094d2f078ca90047a73ff"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0c1df21c99a094d2f078ca90047a73ff">RefDebugQAsymmU8Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a> &gt;</td></tr>
<tr class="separator:a0c1df21c99a094d2f078ca90047a73ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a44ab486f2a7728d75bbf52ffa1025ab5"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a44ab486f2a7728d75bbf52ffa1025ab5">RefDebugQAsymmS8Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a> &gt;</td></tr>
<tr class="separator:a44ab486f2a7728d75bbf52ffa1025ab5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae6d1d064ec7d33b2cc5bcc8afafbe193"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae6d1d064ec7d33b2cc5bcc8afafbe193">RefDebugQSymmS16Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a> &gt;</td></tr>
<tr class="separator:ae6d1d064ec7d33b2cc5bcc8afafbe193"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad607a96fafba334ba5bde946947dd0af"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad607a96fafba334ba5bde946947dd0af">RefDebugQSymmS8Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">DataType::QSymmS8</a> &gt;</td></tr>
<tr class="separator:ad607a96fafba334ba5bde946947dd0af"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2b2b0a60cbb51bf3eb9bd2899aee2c86"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2b2b0a60cbb51bf3eb9bd2899aee2c86">RefDebugSigned32Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a> &gt;</td></tr>
<tr class="separator:a2b2b0a60cbb51bf3eb9bd2899aee2c86"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa334d5e73d8b967640041307137e2d02"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa334d5e73d8b967640041307137e2d02">RefDebugSigned64Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">DataType::Signed64</a> &gt;</td></tr>
<tr class="separator:aa334d5e73d8b967640041307137e2d02"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1a8e2ef0c7bbdbf7466ebe81c979040c"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1a8e2ef0c7bbdbf7466ebe81c979040c">RefDebugBooleanWorkload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">DataType::Boolean</a> &gt;</td></tr>
<tr class="separator:a1a8e2ef0c7bbdbf7466ebe81c979040c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad6f30c5f3c1297502d240068d97a25b9"><td class="memTemplParams" colspan="2">template&lt;typename DataType = float&gt; </td></tr>
<tr class="memitem:ad6f30c5f3c1297502d240068d97a25b9"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad6f30c5f3c1297502d240068d97a25b9">RefAdditionWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.html">RefElementwiseWorkload</a>&lt; std::plus&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> &gt;, <a class="el" href="structarmnn_1_1_addition_queue_descriptor.html">AdditionQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.html#a4e7b349a05a558fa6792c71c11a6bf11a5b84f797c82a1ad494549330af517ad5">StringMapping::RefAdditionWorkload_Execute</a> &gt;</td></tr>
<tr class="separator:ad6f30c5f3c1297502d240068d97a25b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7d4bff547e5c8ac994932e281ddebda7"><td class="memTemplParams" colspan="2">template&lt;typename DataType = float&gt; </td></tr>
<tr class="memitem:a7d4bff547e5c8ac994932e281ddebda7"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7d4bff547e5c8ac994932e281ddebda7">RefSubtractionWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.html">RefElementwiseWorkload</a>&lt; std::minus&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> &gt;, <a class="el" href="structarmnn_1_1_subtraction_queue_descriptor.html">SubtractionQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.html#a4e7b349a05a558fa6792c71c11a6bf11a3694ad0341ebb1fe50b78efe13672519">StringMapping::RefSubtractionWorkload_Execute</a> &gt;</td></tr>
<tr class="separator:a7d4bff547e5c8ac994932e281ddebda7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeff4433507789642f698fe6873ec4619"><td class="memTemplParams" colspan="2">template&lt;typename DataType = float&gt; </td></tr>
<tr class="memitem:aeff4433507789642f698fe6873ec4619"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aeff4433507789642f698fe6873ec4619">RefMultiplicationWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.html">RefElementwiseWorkload</a>&lt; std::multiplies&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> &gt;, <a class="el" href="structarmnn_1_1_multiplication_queue_descriptor.html">MultiplicationQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.html#a4e7b349a05a558fa6792c71c11a6bf11ab3eb648f0f29bf56db68d80624b9bb6c">StringMapping::RefMultiplicationWorkload_Execute</a> &gt;</td></tr>
<tr class="separator:aeff4433507789642f698fe6873ec4619"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49ef5a7147c0b8a89436f1ad110ad2d9"><td class="memTemplParams" colspan="2">template&lt;typename DataType = float&gt; </td></tr>
<tr class="memitem:a49ef5a7147c0b8a89436f1ad110ad2d9"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a49ef5a7147c0b8a89436f1ad110ad2d9">RefDivisionWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.html">RefElementwiseWorkload</a>&lt; std::divides&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> &gt;, <a class="el" href="structarmnn_1_1_division_queue_descriptor.html">DivisionQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.html#a4e7b349a05a558fa6792c71c11a6bf11a69485fd6282ca5ed7d50589f8f759645">StringMapping::RefDivisionWorkload_Execute</a> &gt;</td></tr>
<tr class="separator:a49ef5a7147c0b8a89436f1ad110ad2d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a44b17670359a5c896114952e09fcef8d"><td class="memTemplParams" colspan="2">template&lt;typename DataType = float&gt; </td></tr>
<tr class="memitem:a44b17670359a5c896114952e09fcef8d"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a44b17670359a5c896114952e09fcef8d">RefMaximumWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.html">RefElementwiseWorkload</a>&lt; <a class="el" href="structarmnn_1_1maximum.html">armnn::maximum</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> &gt;, <a class="el" href="structarmnn_1_1_maximum_queue_descriptor.html">MaximumQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.html#a4e7b349a05a558fa6792c71c11a6bf11aea93564675347f60a80cf699c177a80e">StringMapping::RefMaximumWorkload_Execute</a> &gt;</td></tr>
<tr class="separator:a44b17670359a5c896114952e09fcef8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9df214231409eff795bf8ebd3f5e65ca"><td class="memTemplParams" colspan="2">template&lt;typename DataType = float&gt; </td></tr>
<tr class="memitem:a9df214231409eff795bf8ebd3f5e65ca"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9df214231409eff795bf8ebd3f5e65ca">RefMinimumWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.html">RefElementwiseWorkload</a>&lt; <a class="el" href="structarmnn_1_1minimum.html">armnn::minimum</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> &gt;, <a class="el" href="structarmnn_1_1_minimum_queue_descriptor.html">MinimumQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.html#a4e7b349a05a558fa6792c71c11a6bf11a9bddcf9777d5ca3ab5e40b3a93559625">StringMapping::RefMinimumWorkload_Execute</a> &gt;</td></tr>
<tr class="separator:a9df214231409eff795bf8ebd3f5e65ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aed5e6ff8fdf785380ed4c8ca21702da3"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aed5e6ff8fdf785380ed4c8ca21702da3">RefPermuteBFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.html">RefPermuteWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a> &gt;</td></tr>
<tr class="separator:aed5e6ff8fdf785380ed4c8ca21702da3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad1c0fb6bfa580b04574ab56971b6cbc6"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad1c0fb6bfa580b04574ab56971b6cbc6">RefPermuteFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.html">RefPermuteWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a> &gt;</td></tr>
<tr class="separator:ad1c0fb6bfa580b04574ab56971b6cbc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a54c3f7c7b9909e828a084f68dc78a031"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a54c3f7c7b9909e828a084f68dc78a031">RefPermuteFloat32Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.html">RefPermuteWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a> &gt;</td></tr>
<tr class="separator:a54c3f7c7b9909e828a084f68dc78a031"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac89a05afd86920754ef682af60ef9d0d"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac89a05afd86920754ef682af60ef9d0d">RefPermuteQAsymmS8Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.html">RefPermuteWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a> &gt;</td></tr>
<tr class="separator:ac89a05afd86920754ef682af60ef9d0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a50ffe5068ecb2fbf7f73b30ef0d753f8"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a50ffe5068ecb2fbf7f73b30ef0d753f8">RefPermuteQAsymm8Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.html">RefPermuteWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a> &gt;</td></tr>
<tr class="separator:a50ffe5068ecb2fbf7f73b30ef0d753f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ffed93fad525ce1d534cec2cdaee6bd"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6ffed93fad525ce1d534cec2cdaee6bd">RefPermuteQSymm16Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.html">RefPermuteWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a> &gt;</td></tr>
<tr class="separator:a6ffed93fad525ce1d534cec2cdaee6bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a031a365fb37880a7f015dab159877a72"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a031a365fb37880a7f015dab159877a72">RefTransposeBFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.html">RefTransposeWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a> &gt;</td></tr>
<tr class="separator:a031a365fb37880a7f015dab159877a72"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aefcfe4efab61267262d1e02cb8af739d"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aefcfe4efab61267262d1e02cb8af739d">RefTransposeFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.html">RefTransposeWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a> &gt;</td></tr>
<tr class="separator:aefcfe4efab61267262d1e02cb8af739d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad67165b4639bd5e50e5bc4538d226b35"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad67165b4639bd5e50e5bc4538d226b35">RefTransposeFloat32Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.html">RefTransposeWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a> &gt;</td></tr>
<tr class="separator:ad67165b4639bd5e50e5bc4538d226b35"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0b590ea0ad58072eec6e30fc4369d98"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae0b590ea0ad58072eec6e30fc4369d98">RefTransposeQAsymmS8Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.html">RefTransposeWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a> &gt;</td></tr>
<tr class="separator:ae0b590ea0ad58072eec6e30fc4369d98"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1d13693cba12d3e406454b852527fb37"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1d13693cba12d3e406454b852527fb37">RefTransposeQAsymm8Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.html">RefTransposeWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a> &gt;</td></tr>
<tr class="separator:a1d13693cba12d3e406454b852527fb37"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4d9e736b0f2d5f6d66ea0a798366935c"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4d9e736b0f2d5f6d66ea0a798366935c">RefTransposeQSymm16Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.html">RefTransposeWorkload</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a> &gt;</td></tr>
<tr class="separator:a4d9e736b0f2d5f6d66ea0a798366935c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ae2f04a162585c0a5222a537efd5456ae"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456ae">Compute</a> { <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,
<a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">CpuRef</a> = 1,
<a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">CpuAcc</a> = 2,
<a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">GpuAcc</a> = 3
}</td></tr>
<tr class="memdesc:ae2f04a162585c0a5222a537efd5456ae"><td class="mdescLeft">&#160;</td><td class="mdescRight">The Compute enum is now deprecated and it is now being replaced by BackendId. <a href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456ae">More...</a><br /></td></tr>
<tr class="separator:ae2f04a162585c0a5222a537efd5456ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a10c50bc964cc8cc559eebcd7df5a8af3"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a10c50bc964cc8cc559eebcd7df5a8af3">CapabilityClass</a> { <a class="el" href="namespacearmnn.html#a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389">PaddingRequired</a> = 1,
<a class="el" href="namespacearmnn.html#a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d">FallbackImportDisabled</a> = 2,
<a class="el" href="namespacearmnn.html#a10c50bc964cc8cc559eebcd7df5a8af3a280957607e14bb2ccc1155ae6569aee1">CapabilityClassMax</a> = 254
}</td></tr>
<tr class="memdesc:a10c50bc964cc8cc559eebcd7df5a8af3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Capability class to calculate in the GetCapabilities function so that only the capability in the scope can be choose to calculate. <a href="namespacearmnn.html#a10c50bc964cc8cc559eebcd7df5a8af3">More...</a><br /></td></tr>
<tr class="separator:a10c50bc964cc8cc559eebcd7df5a8af3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aff209afc1dc598da399e3e78617ce016"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016">EdgeStrategy</a> { <a class="el" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016aec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>,
<a class="el" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650">DirectCompatibility</a>,
<a class="el" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189">ExportToTarget</a>,
<a class="el" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852">CopyToTarget</a>
}</td></tr>
<tr class="separator:aff209afc1dc598da399e3e78617ce016"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4dc0adc6737b5944e7671bee71788407"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407">BoostLogSeverityMapping</a> { <br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407a04a75036e9d520bb983c5ed03b8d0182">trace</a>,
<a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d">debug</a>,
<a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>,
<a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>,
<a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4">fatal</a>
<br />
}</td></tr>
<tr class="separator:a4dc0adc6737b5944e7671bee71788407"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a67a0db04d321a74b7e7fcfd3f1a3f70b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a> { <a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Success</a> = 0,
<a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">Failure</a> = 1
}</td></tr>
<tr class="separator:a67a0db04d321a74b7e7fcfd3f1a3f70b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad8ed01ff3ff33333d8e19db4d2818bb6"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> { <br />
&#160;&#160;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a> = 0,
<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a> = 1,
<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a> = 2,
<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a> = 3,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a> = 4,
<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a> = 5,
<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a> = 6,
<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a> = 7,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a> = 8,
<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">Signed64</a> = 9
<br />
}</td></tr>
<tr class="separator:ad8ed01ff3ff33333d8e19db4d2818bb6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad1d5cce2d9e9a5d61c243e5c989112e0"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> { <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a> = 1,
<a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a> = 2,
<a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">NDHWC</a> = 3,
<a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">NCDHW</a> = 4
}</td></tr>
<tr class="separator:ad1d5cce2d9e9a5d61c243e5c989112e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae060224135f57f926cbda9d2732a2b1f"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae060224135f57f926cbda9d2732a2b1f">ProfilingDetailsMethod</a> { <a class="el" href="namespacearmnn.html#ae060224135f57f926cbda9d2732a2b1faec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,
<a class="el" href="namespacearmnn.html#ae060224135f57f926cbda9d2732a2b1fa497ab261a562e316736c2cb59b839d32">DetailsWithEvents</a> = 1,
<a class="el" href="namespacearmnn.html#ae060224135f57f926cbda9d2732a2b1fa566666dfc3a9a82da0d7b0816b19f278">DetailsOnly</a> = 2
}</td></tr>
<tr class="memdesc:ae060224135f57f926cbda9d2732a2b1f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Define the behaviour of the internal profiler when outputting network details. <a href="namespacearmnn.html#ae060224135f57f926cbda9d2732a2b1f">More...</a><br /></td></tr>
<tr class="separator:ae060224135f57f926cbda9d2732a2b1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e72227ebe5ac505cf44790f2e6eb488"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8e72227ebe5ac505cf44790f2e6eb488">QosExecPriority</a> { <a class="el" href="namespacearmnn.html#a8e72227ebe5ac505cf44790f2e6eb488a28d0edd045e05cf5af64e35ae0c4c6ef">Low</a> = 0,
<a class="el" href="namespacearmnn.html#a8e72227ebe5ac505cf44790f2e6eb488a87f8a6ab85c9ced3702b4ea641ad4bb5">Medium</a> = 1,
<a class="el" href="namespacearmnn.html#a8e72227ebe5ac505cf44790f2e6eb488a655d20c1ca69519ca647684edbb2db35">High</a> = 2
}</td></tr>
<tr class="separator:a8e72227ebe5ac505cf44790f2e6eb488"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a56297e0f7b215eea46c818cb7528d9ea"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a> { <br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">Sigmoid</a> = 0,
<a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e">TanH</a> = 1,
<a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b">Linear</a> = 2,
<a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">ReLu</a> = 3,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">BoundedReLu</a> = 4,
<a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef">SoftReLu</a> = 5,
<a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735">LeakyReLu</a> = 6,
<a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a> = 7,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a> = 8,
<a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304">Square</a> = 9,
<a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d">Elu</a> = 10,
<a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186">HardSwish</a> = 11,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaf48cca1c6deaa6a1c34e4ee46954cf0b">Gelu</a> = 12
<br />
}</td></tr>
<tr class="separator:a56297e0f7b215eea46c818cb7528d9ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae7e8cbf71db6a490789ca6dcaa8deeae"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a> { <a class="el" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a> = 0,
<a class="el" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 1
}</td></tr>
<tr class="separator:ae7e8cbf71db6a490789ca6dcaa8deeae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2d299363c9fc33334c571fa29ca4f58c"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58c">ComparisonOperation</a> { <br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5">Equal</a> = 0,
<a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a">Greater</a> = 1,
<a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937">GreaterOrEqual</a> = 2,
<a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b">Less</a> = 3,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14">LessOrEqual</a> = 4,
<a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96">NotEqual</a> = 5
<br />
}</td></tr>
<tr class="separator:a2d299363c9fc33334c571fa29ca4f58c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2da4db0140d1a6dc69c9c82e9ef5379e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2da4db0140d1a6dc69c9c82e9ef5379e">LogicalBinaryOperation</a> { <a class="el" href="namespacearmnn.html#a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55">LogicalAnd</a> = 0,
<a class="el" href="namespacearmnn.html#a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247">LogicalOr</a> = 1
}</td></tr>
<tr class="separator:a2da4db0140d1a6dc69c9c82e9ef5379e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1cfaa710db2a54673b21d2ea2da757c8"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8">UnaryOperation</a> { <br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8a1e34af023adeb7d5f484f8eb4b9826b6">Abs</a> = 0,
<a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0">Exp</a> = 1,
<a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8aae77f3ad25595e35b327334d89410054">Sqrt</a> = 2,
<a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4">Rsqrt</a> = 3,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd">Neg</a> = 4,
<a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc">LogicalNot</a> = 5,
<a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b">Log</a> = 6,
<a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd">Sin</a> = 7,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8ab95a01ffffa8fcdd2a9af961937c097c">Ceil</a> = 8
<br />
}</td></tr>
<tr class="separator:a1cfaa710db2a54673b21d2ea2da757c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac4f8557279754ed7b3f749d55b0e3047"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047">BinaryOperation</a> { <br />
&#160;&#160;<a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047aec211f7c20af43e742bf2570c3cb84f9">Add</a> = 0,
<a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a43d11850893d2fe84a1e618121c1cc0a">Div</a> = 1,
<a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a8321e79c278ec510f63675c040594892">Maximum</a> = 2,
<a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047aa1d0ec6d56f8833a078b5a7ac4caf2d4">Minimum</a> = 3,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a62b6d55816cf737bfc6f42e60df1a3f2">Mul</a> = 4,
<a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047ae80155eceb940c89e2de63ad05868db2">Sub</a> = 5,
<a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a2d17ea57d7f86acde5c60cef8e123a53">SqDiff</a> = 6,
<a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047add4fe0cc913f704600b97d1f5dd285de">Power</a> = 7
<br />
}</td></tr>
<tr class="separator:ac4f8557279754ed7b3f749d55b0e3047"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a961bbfe1db71a848eff5a1f0ab775718"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718">PoolingAlgorithm</a> { <a class="el" href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718a6a061313d22e51e0f25b7cd4dc065233">Max</a> = 0,
<a class="el" href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">Average</a> = 1,
<a class="el" href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76">L2</a> = 2
}</td></tr>
<tr class="separator:a961bbfe1db71a848eff5a1f0ab775718"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abc05539fc6e7907f32ef0fb242e3b3b0"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0">ReduceOperation</a> { <br />
&#160;&#160;<a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">Sum</a> = 0,
<a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a6a061313d22e51e0f25b7cd4dc065233">Max</a> = 1,
<a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">Mean</a> = 2,
<a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a78d811e98514cd165dda532286610fd2">Min</a> = 3,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">Prod</a> = 4
<br />
}</td></tr>
<tr class="separator:abc05539fc6e7907f32ef0fb242e3b3b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9a2af2f8c4af4f9efa8e79417d505ac4"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4">ResizeMethod</a> { <a class="el" href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">Bilinear</a> = 0,
<a class="el" href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">NearestNeighbor</a> = 1
}</td></tr>
<tr class="separator:a9a2af2f8c4af4f9efa8e79417d505ac4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e1f31031ad31cd8cc22d7c9daa32681"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8e1f31031ad31cd8cc22d7c9daa32681">Dimensionality</a> { <a class="el" href="namespacearmnn.html#a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc">NotSpecified</a> = 0,
<a class="el" href="namespacearmnn.html#a8e1f31031ad31cd8cc22d7c9daa32681ab4b379bf7ded74c07595ccb85bc6fdc3">Specified</a> = 1,
<a class="el" href="namespacearmnn.html#a8e1f31031ad31cd8cc22d7c9daa32681af60357a8d17e45793298323f1b372a74">Scalar</a> = 2
}</td></tr>
<tr class="separator:a8e1f31031ad31cd8cc22d7c9daa32681"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3888429b6ebc79f9a7df549e5e4d9a2f"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3888429b6ebc79f9a7df549e5e4d9a2f">PaddingMethod</a> { <a class="el" href="namespacearmnn.html#a3888429b6ebc79f9a7df549e5e4d9a2faad301514192636ad34210adce598a45a">IgnoreValue</a> = 0,
<a class="el" href="namespacearmnn.html#a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6">Exclude</a> = 1
}</td></tr>
<tr class="memdesc:a3888429b6ebc79f9a7df549e5e4d9a2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">The padding method modifies the output of pooling layers. <a href="namespacearmnn.html#a3888429b6ebc79f9a7df549e5e4d9a2f">More...</a><br /></td></tr>
<tr class="separator:a3888429b6ebc79f9a7df549e5e4d9a2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14d24d90ab4ba2956e92e27890ba4c91"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91">PaddingMode</a> { <a class="el" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</a> = 0,
<a class="el" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00">Reflect</a> = 1,
<a class="el" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626">Symmetric</a> = 2
}</td></tr>
<tr class="memdesc:a14d24d90ab4ba2956e92e27890ba4c91"><td class="mdescLeft">&#160;</td><td class="mdescRight">The padding mode controls whether the padding should be filled with constant values (Constant), or reflect the input, either including the border values (Symmetric) or not (Reflect). <a href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91">More...</a><br /></td></tr>
<tr class="separator:a14d24d90ab4ba2956e92e27890ba4c91"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abe18a5033f2ab9c0de82c676b48f5437"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abe18a5033f2ab9c0de82c676b48f5437">NormalizationAlgorithmChannel</a> { <a class="el" href="namespacearmnn.html#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">Across</a> = 0,
<a class="el" href="namespacearmnn.html#abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b">Within</a> = 1
}</td></tr>
<tr class="separator:abe18a5033f2ab9c0de82c676b48f5437"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad605d1661fa0d8c7fea651d82fbe11c9"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad605d1661fa0d8c7fea651d82fbe11c9">NormalizationAlgorithmMethod</a> { <a class="el" href="namespacearmnn.html#ad605d1661fa0d8c7fea651d82fbe11c9ac65d2e51c610dd3853a3c777aa8bfe9d">LocalBrightness</a> = 0,
<a class="el" href="namespacearmnn.html#ad605d1661fa0d8c7fea651d82fbe11c9aa94d2fcabc6b001015aeddfa19266e6f">LocalContrast</a> = 1
}</td></tr>
<tr class="separator:ad605d1661fa0d8c7fea651d82fbe11c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adf2e5515c4c36a3e7e46bb8b83c6754e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#adf2e5515c4c36a3e7e46bb8b83c6754e">OutputShapeRounding</a> { <a class="el" href="namespacearmnn.html#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">Floor</a> = 0,
<a class="el" href="namespacearmnn.html#adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb">Ceiling</a> = 1
}</td></tr>
<tr class="separator:adf2e5515c4c36a3e7e46bb8b83c6754e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adf57837d00e8352d9b5cc5ab1fb5fee9"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9">ShapeInferenceMethod</a> { <a class="el" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">ValidateOnly</a> = 0,
<a class="el" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">InferAndValidate</a> = 1
}</td></tr>
<tr class="memdesc:adf57837d00e8352d9b5cc5ab1fb5fee9"><td class="mdescLeft">&#160;</td><td class="mdescRight">The ShapeInferenceMethod modify how the output shapes are treated. <a href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9">More...</a><br /></td></tr>
<tr class="separator:adf57837d00e8352d9b5cc5ab1fb5fee9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14fcd7f88d11cea0a018269dca5f9277"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277">MemorySource</a> : uint32_t { <br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277aec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,
<a class="el" href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523">Malloc</a> = 1,
<a class="el" href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277a966e13d8aabbff3966a5cd28d67b4846">DmaBuf</a> = 2,
<a class="el" href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277a7f9067c59dd34aca0ad09a7f283ed1f8">DmaBufProtected</a> = 4,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e">Gralloc</a> = 8
<br />
}</td></tr>
<tr class="memdesc:a14fcd7f88d11cea0a018269dca5f9277"><td class="mdescLeft">&#160;</td><td class="mdescRight">Define the Memory Source to reduce copies. <a href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277">More...</a><br /></td></tr>
<tr class="separator:a14fcd7f88d11cea0a018269dca5f9277"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7100de49939c3e393101f78d425a98c6"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7100de49939c3e393101f78d425a98c6">MemBlockStrategyType</a> { <a class="el" href="namespacearmnn.html#a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7">SingleAxisPacking</a> = 0,
<a class="el" href="namespacearmnn.html#a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f">MultiAxisPacking</a> = 1
}</td></tr>
<tr class="separator:a7100de49939c3e393101f78d425a98c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a52d63dc326ef2e2d373217b84ac4a402"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a52d63dc326ef2e2d373217b84ac4a402">FusedKernelType</a> { <a class="el" href="namespacearmnn.html#a52d63dc326ef2e2d373217b84ac4a402a6708d958187e663fd689cdad2b55b818">AddMulAdd</a> = 0
}</td></tr>
<tr class="separator:a52d63dc326ef2e2d373217b84ac4a402"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab24d74259a053475f6040dd701a01952"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab24d74259a053475f6040dd701a01952">BackendCapability</a> : uint32_t { <a class="el" href="namespacearmnn.html#ab24d74259a053475f6040dd701a01952a0be89c9a624a5de3925150e3cd476245">NonConstWeights</a>,
<a class="el" href="namespacearmnn.html#ab24d74259a053475f6040dd701a01952ac7fdc1b70472b8558fdba30db193d58f">AsyncExecution</a>
}</td></tr>
<tr class="memdesc:ab24d74259a053475f6040dd701a01952"><td class="mdescLeft">&#160;</td><td class="mdescRight">BackendCapability class. <a href="namespacearmnn.html#ab24d74259a053475f6040dd701a01952">More...</a><br /></td></tr>
<tr class="separator:ab24d74259a053475f6040dd701a01952"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a56943a0946e5f15e5e58054b8e7a04a4"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> { <br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a9dce5fd6b5c1ec5baca837bbd273b33c">X</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aa9a62e70841c4d06dd16306a85700d36">Activation</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f">Addition</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a2139684546b147c106b329f41547640c">ArgMinMax</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4ae4743c3ec15d1d84169b17264634692e">BatchNormalization</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a6ee06c6045d0c5b6565a247955ef0fc2">BatchToSpaceNd</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4af6c0e3a1c3cfabd32ae8d3ae741fcf0a">Comparison</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4ae20f0f2826a6549809f050b86274567f">Concat</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">Constant</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a912a4b4d73726c282e3f79aa2c390d6c">ConvertFp16ToFp32</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4addf4f83b056acd5549949fc0350e9aad">ConvertFp32ToFp16</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a">Convolution2d</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aa603905470e2a5b8c13e96b579ef0dba">Debug</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a731729ad1b2c0eb9399b62c770b3482d">DepthToSpace</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4af97adbfc88b7012a0243215b1076e7e7">DepthwiseConvolution2d</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a9bc35e069257a508e14ed82965a8661d">Dequantize</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a1db19222ac424bd7162142ddf929fd2a">DetectionPostProcess</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a3025cdaab2deb0bb2cd642449e570833">Division</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4abcd30d7ea97ad20c2cddc0f47e6b70c7">ElementwiseUnary</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a3489c7b05e180496cb2ce8ac73887f48">FakeQuantization</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4adb3e3f51c9107e26c9bccf9a188ce2ed">Fill</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4af3f6d0343d56ce88ce7958170ed05cb3">Floor</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acab78faff25393e9defd1911cb58133e">FullyConnected</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aad22c799930d644e8468fe44c0312d53">Gather</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a21baa4498161d195f5bb2e3627344ba4">InstanceNormalization</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a1189467870bc421ae59277e750263eb2">L2Normalization</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4af4f53c8297dc1cb53d4e6f8151070a30">LogicalBinary</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4ac21dbda57d88c21ec9857f5d1522c488">LogSoftmax</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a06b091bc9aea697ba473c71f0bb55925">Lstm</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a91880b71ea6d007439b7bc7c320b5c25">QLstm</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a8321e79c278ec510f63675c040594892">Maximum</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a3d6c9ac08ada31c184094bbc67afe00d">Mean</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b">MemCopy</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a115bfc5d633eae55c67f9588acdd2bf9">MemImport</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a68be4837f6c739877233e527a996dd00">Merge</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aa1d0ec6d56f8833a078b5a7ac4caf2d4">Minimum</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a27d1a1f7b7c2180e5b20ce9e3d00e2dd">Multiplication</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aac61f2e17250a818dee4d12b112aa88f">Normalization</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4ade43468adaf6acb2c38ebc0c1176f82f">Pad</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7">Permute</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4ad662867a41bfb30b9f75dda2b5849001">Pooling2d</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a1ba143ebe524d46181a4b53470693278">PreCompiled</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a0c5967f09e0669c840ebb1ed0da85e32">Prelu</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aca39930e22f40d10155a57dba32240bb">Quantize</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a890a37ff3bfe123414ba7e6f052b49f3">QuantizedLstm</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aa7c59ccedc6a3bd90c17f3b990afefad">Reshape</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a021da1b20f73dc252361a54d80497ef3">Rank</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a9d723d04c40bfd81835c0766a698cf63">Resize</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aec4875f03ff0bb0b26cf76ac7f41e3c8">Reduce</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4ad140d37ad98c12ccd8e1c432f548bcdb">Slice</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0">Softmax</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a337c392144dca0d18290c6b4711a2279">SpaceToBatchNd</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a5e7ff12da912dc79e7e547281823fa4a">SpaceToDepth</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a41cb9b797ebc6f6f6314e3ded935f4cf">Splitter</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a2187e1021a911b3807cc1bea2eb1a9ca">Stack</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a93bca63ecbb003649425dd0e4ba79a99">StandIn</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aa31904f2b3479b5a00137fd985974b4d">StridedSlice</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a6eb8b8b560161603402c0238b3a7d8b0">Subtraction</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4abbc155fb2b111bf61c4f5ff892915e6b">Switch</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aaf70b1ac863830a4e1ce6268c8399f54">Transpose</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a71b23d26c0f5d20416d6c77754f9806a">TransposeConvolution2d</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a48180ddd584de21589006d56a86d3410">Unmap</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a4cd9f3996d60790cd11c04f842ebc43c">Cast</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a880c1273b27d27cfc82004c3a4b205c9">Shape</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a300124b2433e0376ec4b19251ac3a9e5">UnidirectionalSequenceLstm</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a0ca5f33c1d35fd4105d3a26a2823f9dd">ChannelShuffle</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a583550d0f265fd3756f7de0e42c51953">Convolution3d</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a2b3140dc366b9fcd25ed786a79d1817c">Pooling3d</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a3028cc42e40f9a1f4f8b35556d9715a4">GatherNd</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a9882ff3cfed27d6161c20a305e7a3484">BatchMatMul</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a699bcffd93aff3022014b9efc9eaefd1">ElementwiseBinary</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4af9a0b6ef62dc10097826358e28b19295">ReverseV2</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4ac5457c5f3cfb4da8638ce7190f8e5152">Tile</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4af617f46b788e11a564cb16c9f5d59fea">Fused</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4af6f7ce1d0822dea293ac2edc111e54ed">BroadcastTo</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a7401e8c502f3f7c3544e3f16bf3f488b">ScatterNd</a>,
<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4ae66a93a31fb93839c8369265cd44695c">FirstLayer</a> = Activation,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a33cae35d37c1b558ecd35dd5e37dd80f">LastLayer</a> = ScatterNd
<br />
}</td></tr>
<tr class="memdesc:a56943a0946e5f15e5e58054b8e7a04a4"><td class="mdescLeft">&#160;</td><td class="mdescRight">When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below. <a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">More...</a><br /></td></tr>
<tr class="separator:a56943a0946e5f15e5e58054b8e7a04a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a75ca90884e15396a70b0cb722a877b4a"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4a">ScatterNdFunction</a> { <br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4aa06933067aafd48425d67bcb01bba5cb6">Update</a> = 0,
<a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4aaec211f7c20af43e742bf2570c3cb84f9">Add</a> = 1,
<a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4aae80155eceb940c89e2de63ad05868db2">Sub</a> = 2,
<a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4aa6a061313d22e51e0f25b7cd4dc065233">Max</a> = 3,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4aa78d811e98514cd165dda532286610fd2">Min</a> = 4,
<a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4aa62b6d55816cf737bfc6f42e60df1a3f2">Mul</a> = 5
<br />
}</td></tr>
<tr class="separator:a75ca90884e15396a70b0cb722a877b4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a93a3ba385cad27c4774e5fe64c025d3d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a> { <br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">Trace</a>,
<a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3daa603905470e2a5b8c13e96b579ef0dba">Debug</a>,
<a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">Info</a>,
<a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">Warning</a>,
<br />
&#160;&#160;<a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">Error</a>,
<a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4">Fatal</a>
<br />
}</td></tr>
<tr class="separator:a93a3ba385cad27c4774e5fe64c025d3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a34eaed09302a4d7bfe930c13a7673e0b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0b">GraphEvent</a> { <a class="el" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">LayerAdded</a>,
<a class="el" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528">LayerErased</a>
}</td></tr>
<tr class="separator:a34eaed09302a4d7bfe930c13a7673e0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4e2dd387ba6f0dc5164b4cdf8de3262a"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4e2dd387ba6f0dc5164b4cdf8de3262a">JsonObjectType</a> { <a class="el" href="namespacearmnn.html#a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975">Measurement</a>,
<a class="el" href="namespacearmnn.html#a4e2dd387ba6f0dc5164b4cdf8de3262aaa4ecfc70574394990cf17bd83df499f7">Event</a>,
<a class="el" href="namespacearmnn.html#a4e2dd387ba6f0dc5164b4cdf8de3262aaf7a45ae663528701f33ee482ce67af62">ExecObjectDesc</a>
}</td></tr>
<tr class="separator:a4e2dd387ba6f0dc5164b4cdf8de3262a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a707090747256af276c389e0cf1cb0a9a"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a> { <a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754">None</a>,
<a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68">Rapid</a>,
<a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0">Normal</a>,
<a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f">Exhaustive</a>
}</td></tr>
<tr class="separator:a707090747256af276c389e0cf1cb0a9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a6d9d90e2ace1cd49789835b0073196a3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_layer_support_handle.html">LayerSupportHandle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6d9d90e2ace1cd49789835b0073196a3">GetILayerSupportByBackendId</a> (const <a class="el" href="classarmnn_1_1_backend_id.html">armnn::BackendId</a> &amp;backend)</td></tr>
<tr class="memdesc:a6d9d90e2ace1cd49789835b0073196a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience function to retrieve the ILayerSupportHandle for a backend. <a href="namespacearmnn.html#a6d9d90e2ace1cd49789835b0073196a3">More...</a><br /></td></tr>
<tr class="separator:a6d9d90e2ace1cd49789835b0073196a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abd839f0f103c1ae19a4b38d59b869108"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abd839f0f103c1ae19a4b38d59b869108">HasCapability</a> (const std::string &amp;name, const <a class="el" href="namespacearmnn.html#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &amp;capabilities)</td></tr>
<tr class="memdesc:abd839f0f103c1ae19a4b38d59b869108"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience function to check if a capability exists in a BackendCapabilites struct. <a href="namespacearmnn.html#abd839f0f103c1ae19a4b38d59b869108">More...</a><br /></td></tr>
<tr class="separator:abd839f0f103c1ae19a4b38d59b869108"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8439e8b224a1fb7abdf449c8e6775469"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8439e8b224a1fb7abdf449c8e6775469">HasCapability</a> (const std::string &amp;name, const <a class="el" href="classarmnn_1_1_backend_id.html">armnn::BackendId</a> &amp;backend)</td></tr>
<tr class="memdesc:a8439e8b224a1fb7abdf449c8e6775469"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience function to check if a capability exists in a backend. <a href="namespacearmnn.html#a8439e8b224a1fb7abdf449c8e6775469">More...</a><br /></td></tr>
<tr class="separator:a8439e8b224a1fb7abdf449c8e6775469"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae702febbc6139e20b2b8c4f03ff89b01"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae702febbc6139e20b2b8c4f03ff89b01">HasCapability</a> (const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.html">BackendOptions::BackendOption</a> &amp;capability, const <a class="el" href="namespacearmnn.html#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &amp;capabilities)</td></tr>
<tr class="memdesc:ae702febbc6139e20b2b8c4f03ff89b01"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience function to check if a given capability matches a capability in a BackendCapabilities struct. <a href="namespacearmnn.html#ae702febbc6139e20b2b8c4f03ff89b01">More...</a><br /></td></tr>
<tr class="separator:ae702febbc6139e20b2b8c4f03ff89b01"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a78fe085e22e9822075ad791aa5cc34d5"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a78fe085e22e9822075ad791aa5cc34d5">HasCapability</a> (const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.html">BackendOptions::BackendOption</a> &amp;backendOption, const <a class="el" href="classarmnn_1_1_backend_id.html">armnn::BackendId</a> &amp;backend)</td></tr>
<tr class="memdesc:a78fe085e22e9822075ad791aa5cc34d5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience function to check if a given capability matches a capability in a backend. <a href="namespacearmnn.html#a78fe085e22e9822075ad791aa5cc34d5">More...</a><br /></td></tr>
<tr class="separator:a78fe085e22e9822075ad791aa5cc34d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a406399d2a16ead98e4e93cdd57adead4"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a406399d2a16ead98e4e93cdd57adead4">HasMatchingCapability</a> (const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.html">BackendOptions::BackendOption</a> &amp;capability, const <a class="el" href="namespacearmnn.html#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &amp;capabilities)</td></tr>
<tr class="memdesc:a406399d2a16ead98e4e93cdd57adead4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience function to check if a given capability matches a capability in a BackendCapabilities struct. <a href="namespacearmnn.html#a406399d2a16ead98e4e93cdd57adead4">More...</a><br /></td></tr>
<tr class="separator:a406399d2a16ead98e4e93cdd57adead4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab627d99aaab05ad358c60fb931cee241"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab627d99aaab05ad358c60fb931cee241">HasMatchingCapability</a> (const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.html">BackendOptions::BackendOption</a> &amp;backendOption, const <a class="el" href="classarmnn_1_1_backend_id.html">armnn::BackendId</a> &amp;backend)</td></tr>
<tr class="memdesc:ab627d99aaab05ad358c60fb931cee241"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience function to check if a given capability matches a capability in a backend. <a href="namespacearmnn.html#ab627d99aaab05ad358c60fb931cee241">More...</a><br /></td></tr>
<tr class="separator:ab627d99aaab05ad358c60fb931cee241"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a71c3bdadfe1c69aba2cbf054bff47744"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.html">BackendOptions::BackendOption</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a71c3bdadfe1c69aba2cbf054bff47744">GetCapability</a> (const std::string &amp;backendCapabilityName, const <a class="el" href="namespacearmnn.html#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &amp;capabilities)</td></tr>
<tr class="memdesc:a71c3bdadfe1c69aba2cbf054bff47744"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a BackendCapability if the backend lists the capability The BackendCapability must then be inspected to check whether or not that BackendCapability is supported Otherwise returns an <a class="el" href="structarmnn_1_1_empty_optional.html" 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.html#a71c3bdadfe1c69aba2cbf054bff47744">More...</a><br /></td></tr>
<tr class="separator:a71c3bdadfe1c69aba2cbf054bff47744"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8d70f94d3f0ffb06067a66c49b2f8689"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.html">BackendOptions::BackendOption</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8d70f94d3f0ffb06067a66c49b2f8689">GetCapability</a> (const std::string &amp;backendCapabilityName, const <a class="el" href="classarmnn_1_1_backend_id.html">armnn::BackendId</a> &amp;backend)</td></tr>
<tr class="memdesc:a8d70f94d3f0ffb06067a66c49b2f8689"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a BackendCapability if the backend lists the capability The BackendCapability must then be inspected to check whether or not that BackendCapability is supported Otherwise returns an <a class="el" href="structarmnn_1_1_empty_optional.html" 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.html#a8d70f94d3f0ffb06067a66c49b2f8689">More...</a><br /></td></tr>
<tr class="separator:a8d70f94d3f0ffb06067a66c49b2f8689"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae266ee8bf362cbf8a88ab6e6b389791a"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae266ee8bf362cbf8a88ab6e6b389791a">GetNumberOfCacheFiles</a> (const <a class="el" href="classarmnn_1_1_backend_id.html">armnn::BackendId</a> &amp;backend)</td></tr>
<tr class="memdesc:ae266ee8bf362cbf8a88ab6e6b389791a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of cached files if backend supports caching. <a href="namespacearmnn.html#ae266ee8bf362cbf8a88ab6e6b389791a">More...</a><br /></td></tr>
<tr class="separator:ae266ee8bf362cbf8a88ab6e6b389791a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6bab17bfd45c2fa4592c431bc25ad10e"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6bab17bfd45c2fa4592c431bc25ad10e">GetComputeDeviceAsCString</a> (<a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456ae">Compute</a> compute)</td></tr>
<tr class="memdesc:a6bab17bfd45c2fa4592c431bc25ad10e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated function that will be removed together with the Compute enum. <a href="namespacearmnn.html#a6bab17bfd45c2fa4592c431bc25ad10e">More...</a><br /></td></tr>
<tr class="separator:a6bab17bfd45c2fa4592c431bc25ad10e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b0313cb554380d6e4dfb24c31f9e605"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5b0313cb554380d6e4dfb24c31f9e605">operator&lt;&lt;</a> (std::ostream &amp;os, const std::vector&lt; <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456ae">Compute</a> &gt; &amp;compute)</td></tr>
<tr class="memdesc:a5b0313cb554380d6e4dfb24c31f9e605"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated function that will be removed together with the Compute enum. <a href="namespacearmnn.html#a5b0313cb554380d6e4dfb24c31f9e605">More...</a><br /></td></tr>
<tr class="separator:a5b0313cb554380d6e4dfb24c31f9e605"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a127a59fdf5e6d2fa74f87f9265de958b"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a127a59fdf5e6d2fa74f87f9265de958b">operator&lt;&lt;</a> (std::ostream &amp;os, const std::set&lt; <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456ae">Compute</a> &gt; &amp;compute)</td></tr>
<tr class="memdesc:a127a59fdf5e6d2fa74f87f9265de958b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated function that will be removed together with the Compute enum. <a href="namespacearmnn.html#a127a59fdf5e6d2fa74f87f9265de958b">More...</a><br /></td></tr>
<tr class="separator:a127a59fdf5e6d2fa74f87f9265de958b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a345acf4e0dc087eee3f9688029ee6328"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a345acf4e0dc087eee3f9688029ee6328">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456ae">Compute</a> &amp;compute)</td></tr>
<tr class="memdesc:a345acf4e0dc087eee3f9688029ee6328"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated function that will be removed together with the Compute enum. <a href="namespacearmnn.html#a345acf4e0dc087eee3f9688029ee6328">More...</a><br /></td></tr>
<tr class="separator:a345acf4e0dc087eee3f9688029ee6328"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afc46634e26857d037ee80bb5a74ef28a"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#afc46634e26857d037ee80bb5a74ef28a">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &amp;id)</td></tr>
<tr class="separator:afc46634e26857d037ee80bb5a74ef28a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a62a9e8c87b9b9f504726746ba4a000a6"><td class="memTemplParams" colspan="2">template&lt;template&lt; typename... &gt; class TContainer, typename... TContainerTemplateArgs&gt; </td></tr>
<tr class="memitem:a62a9e8c87b9b9f504726746ba4a000a6"><td class="memTemplItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a62a9e8c87b9b9f504726746ba4a000a6">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="namespacearmnn_utils.html#ac7bd4ea667375c07718086368507ed44">TContainer</a>&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a>, TContainerTemplateArgs... &gt; &amp;ids)</td></tr>
<tr class="separator:a62a9e8c87b9b9f504726746ba4a000a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af457790132251cde6545072d879c7684"><td class="memTemplParams" colspan="2">template&lt;typename F &gt; </td></tr>
<tr class="memitem:af457790132251cde6545072d879c7684"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af457790132251cde6545072d879c7684">ParseOptions</a> (const std::vector&lt; <a class="el" href="structarmnn_1_1_backend_options.html">BackendOptions</a> &gt; &amp;options, <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> backend, F f)</td></tr>
<tr class="separator:af457790132251cde6545072d879c7684"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abe4073b0af144421b53828ef752e4ee3"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abe4073b0af144421b53828ef752e4ee3">ParseBooleanBackendOption</a> (const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.html">armnn::BackendOptions::Var</a> &amp;value, bool defaultValue)</td></tr>
<tr class="separator:abe4073b0af144421b53828ef752e4ee3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79a7e943477406c7211f8800e24e5074"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a79a7e943477406c7211f8800e24e5074">ParseStringBackendOption</a> (const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.html">armnn::BackendOptions::Var</a> &amp;value, std::string defaultValue)</td></tr>
<tr class="separator:a79a7e943477406c7211f8800e24e5074"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a884361aad1fe11d630c8588cba16c6f1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a884361aad1fe11d630c8588cba16c6f1">ParseIntBackendOption</a> (const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.html">armnn::BackendOptions::Var</a> &amp;value, int defaultValue)</td></tr>
<tr class="separator:a884361aad1fe11d630c8588cba16c6f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac2807505b850738bc8a1991ce669dd47"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_backend_registry.html">BackendRegistry</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac2807505b850738bc8a1991ce669dd47">BackendRegistryInstance</a> ()</td></tr>
<tr class="separator:ac2807505b850738bc8a1991ce669dd47"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14de37f4c695ac066f999aa75b7cb136"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a14de37f4c695ac066f999aa75b7cb136">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="structarmnn_1_1_backend_version.html">BackendVersion</a> &amp;backendVersion)</td></tr>
<tr class="separator:a14de37f4c695ac066f999aa75b7cb136"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a36e8f52330a21eeab3cc7c4e030f3583"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a36e8f52330a21eeab3cc7c4e030f3583">GetUnpaddedTensorStrides</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;tensorInfo)</td></tr>
<tr class="separator:a36e8f52330a21eeab3cc7c4e030f3583"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a872803f5667392efc3c8e5607bd453ad"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a> (<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> inputDataType)</td></tr>
<tr class="separator:a872803f5667392efc3c8e5607bd453ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a733ae6b70d0bfa43433c3e7606992328"><td class="memTemplParams" colspan="2">template&lt;typename TensorShapeIt &gt; </td></tr>
<tr class="memitem:a733ae6b70d0bfa43433c3e7606992328"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_origins_descriptor.html">OriginsDescriptor</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a733ae6b70d0bfa43433c3e7606992328">CreateDescriptorForConcatenation</a> (TensorShapeIt first, TensorShapeIt last, unsigned int concatenationDimension)</td></tr>
<tr class="memdesc:a733ae6b70d0bfa43433c3e7606992328"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience template to create an <a class="el" href="structarmnn_1_1_origins_descriptor.html" title="An OriginsDescriptor for the ConcatLayer.">OriginsDescriptor</a> to use when creating a <a class="el" href="classarmnn_1_1_concat_layer.html" title="This layer represents a merge operation.">ConcatLayer</a> for performing concatenation of a number of input tensors. <a href="namespacearmnn.html#a733ae6b70d0bfa43433c3e7606992328">More...</a><br /></td></tr>
<tr class="separator:a733ae6b70d0bfa43433c3e7606992328"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae4ab3bf0697ad13316a6bcba0a8fade5"><td class="memTemplParams" colspan="2">template&lt;typename ExceptionType &gt; </td></tr>
<tr class="memitem:ae4ab3bf0697ad13316a6bcba0a8fade5"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae4ab3bf0697ad13316a6bcba0a8fade5">ConditionalThrow</a> (bool condition, const std::string &amp;message)</td></tr>
<tr class="separator:ae4ab3bf0697ad13316a6bcba0a8fade5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ed414c05eb6d4c89e0e4a475a0479c0"><td class="memTemplParams" colspan="2">template&lt;typename ExceptionType &gt; </td></tr>
<tr class="memitem:a6ed414c05eb6d4c89e0e4a475a0479c0"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6ed414c05eb6d4c89e0e4a475a0479c0">ConditionalThrow</a> (bool condition)</td></tr>
<tr class="separator:a6ed414c05eb6d4c89e0e4a475a0479c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae57b7f9e2cb7080bf10b28d1f72b558e"><td class="memTemplParams" colspan="2">template&lt;typename ExceptionType , typename ComparedType &gt; </td></tr>
<tr class="memitem:ae57b7f9e2cb7080bf10b28d1f72b558e"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae57b7f9e2cb7080bf10b28d1f72b558e">ConditionalThrowIfNotEqual</a> (const std::string &amp;message, const ComparedType &amp;leftHandSide, const ComparedType &amp;rightHandSide)</td></tr>
<tr class="memdesc:ae57b7f9e2cb7080bf10b28d1f72b558e"><td class="mdescLeft">&#160;</td><td class="mdescRight">ComparedType must support: operator==(const ComparedType&amp;) operator&lt;&lt;(ostream&amp;, const ComparedType&amp;) <a href="namespacearmnn.html#ae57b7f9e2cb7080bf10b28d1f72b558e">More...</a><br /></td></tr>
<tr class="separator:ae57b7f9e2cb7080bf10b28d1f72b558e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa42e128b41f4e966fc901f9bf42c5a1c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa42e128b41f4e966fc901f9bf42c5a1c">Optimize</a> (const <a class="el" href="classarmnn_1_1_i_network.html">INetwork</a> &amp;network, const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;backendPreferences, const <a class="el" href="classarmnn_1_1_i_device_spec.html">IDeviceSpec</a> &amp;deviceSpec, const <a class="el" href="classarmnn_1_1_optimizer_options_opaque.html">OptimizerOptionsOpaque</a> &amp;options=<a class="el" href="classarmnn_1_1_optimizer_options_opaque.html">OptimizerOptionsOpaque</a>(), <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt; messages=<a class="el" href="structarmnn_1_1_empty_optional.html">EmptyOptional</a>())</td></tr>
<tr class="memdesc:aa42e128b41f4e966fc901f9bf42c5a1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create an optimized version of the network. <a href="namespacearmnn.html#aa42e128b41f4e966fc901f9bf42c5a1c">More...</a><br /></td></tr>
<tr class="separator:aa42e128b41f4e966fc901f9bf42c5a1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a31b06d0ee0a2eb5879f9af482913a0fe"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a31b06d0ee0a2eb5879f9af482913a0fe">Optimize</a> (const <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;inGraph, const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;backendPreferences, const <a class="el" href="classarmnn_1_1_i_device_spec.html">IDeviceSpec</a> &amp;deviceSpec, const <a class="el" href="classarmnn_1_1_optimizer_options_opaque.html">OptimizerOptionsOpaque</a> &amp;options, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt; messages=<a class="el" href="structarmnn_1_1_empty_optional.html">EmptyOptional</a>())</td></tr>
<tr class="memdesc:a31b06d0ee0a2eb5879f9af482913a0fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create an optimized version of the network. <a href="namespacearmnn.html#a31b06d0ee0a2eb5879f9af482913a0fe">More...</a><br /></td></tr>
<tr class="separator:a31b06d0ee0a2eb5879f9af482913a0fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4c79e02d43c1fac7d2f073663ef9ca5d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4c79e02d43c1fac7d2f073663ef9ca5d">Optimize</a> (const <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;inGraph, const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;backendPreferences, const <a class="el" href="classarmnn_1_1_i_device_spec.html">IDeviceSpec</a> &amp;deviceSpec, const <a class="el" href="structarmnn_1_1_optimizer_options.html">OptimizerOptions</a> &amp;options, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt; messages=<a class="el" href="structarmnn_1_1_empty_optional.html">EmptyOptional</a>())</td></tr>
<tr class="memdesc:a4c79e02d43c1fac7d2f073663ef9ca5d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Accept legacy <a class="el" href="structarmnn_1_1_optimizer_options.html">OptimizerOptions</a>. <a href="namespacearmnn.html#a4c79e02d43c1fac7d2f073663ef9ca5d">More...</a><br /></td></tr>
<tr class="separator:a4c79e02d43c1fac7d2f073663ef9ca5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab7116c24a003e722c09c86a2f5cf1a37"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab7116c24a003e722c09c86a2f5cf1a37">Optimize</a> (const <a class="el" href="classarmnn_1_1_i_network.html">INetwork</a> &amp;network, const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;backendPreferences, const <a class="el" href="classarmnn_1_1_i_device_spec.html">IDeviceSpec</a> &amp;deviceSpec, const <a class="el" href="structarmnn_1_1_optimizer_options.html">OptimizerOptions</a> &amp;options, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt; messages=<a class="el" href="structarmnn_1_1_empty_optional.html">EmptyOptional</a>())</td></tr>
<tr class="memdesc:ab7116c24a003e722c09c86a2f5cf1a37"><td class="mdescLeft">&#160;</td><td class="mdescRight">Accept legacy <a class="el" href="structarmnn_1_1_optimizer_options.html">OptimizerOptions</a>. <a href="namespacearmnn.html#ab7116c24a003e722c09c86a2f5cf1a37">More...</a><br /></td></tr>
<tr class="separator:ab7116c24a003e722c09c86a2f5cf1a37"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a71f2cc06b097cb5c4f0a1f48130a823b"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a71f2cc06b097cb5c4f0a1f48130a823b">LevelToString</a> (<a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a> level)</td></tr>
<tr class="separator:a71f2cc06b097cb5c4f0a1f48130a823b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaaddf7d8f68eae6c1bf90e4ec3cb5490"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aaaddf7d8f68eae6c1bf90e4ec3cb5490">StringToLogLevel</a> (std::string level)</td></tr>
<tr class="separator:aaaddf7d8f68eae6c1bf90e4ec3cb5490"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac9aad76a34137b6359a867b282ea7cfb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac9aad76a34137b6359a867b282ea7cfb">SetLogFilter</a> (<a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a> level)</td></tr>
<tr class="separator:ac9aad76a34137b6359a867b282ea7cfb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7f8325a4bc02f2f687ba1968b595ec0a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7f8325a4bc02f2f687ba1968b595ec0a">SetAllLoggingSinks</a> (bool standardOut, bool debugOut, bool coloured)</td></tr>
<tr class="separator:a7f8325a4bc02f2f687ba1968b595ec0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9cdee30c21f3dd630b4e460527105b74"><td class="memItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9cdee30c21f3dd630b4e460527105b74">ConvertLogSeverity</a> (<a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407">BoostLogSeverityMapping</a> severity)</td></tr>
<tr class="separator:a9cdee30c21f3dd630b4e460527105b74"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5d94c2125c725df5b619d16db9d4a8e9"><td class="memTemplParams" colspan="2">template&lt;typename Arg , typename std::enable_if&lt; IsMemorySource&lt; Arg &gt;::value &gt;::type * = nullptr&gt; </td></tr>
<tr class="memitem:a5d94c2125c725df5b619d16db9d4a8e9"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5d94c2125c725df5b619d16db9d4a8e9">Combine</a> (Arg sourceA, Arg sourceB)</td></tr>
<tr class="separator:a5d94c2125c725df5b619d16db9d4a8e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae91e1849e95350c8e50912a217999eac"><td class="memTemplParams" colspan="2">template&lt;typename Arg , typename ... Args, typename std::enable_if&lt; IsMemorySource&lt; Arg &gt;::value &gt;::type * = nullptr&gt; </td></tr>
<tr class="memitem:ae91e1849e95350c8e50912a217999eac"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae91e1849e95350c8e50912a217999eac">Combine</a> (Arg source, Args... rest)</td></tr>
<tr class="separator:ae91e1849e95350c8e50912a217999eac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a84f86b4de5adf0b164e811c87051a0ee"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a84f86b4de5adf0b164e811c87051a0ee">CheckFlag</a> (<a class="el" href="namespacearmnn.html#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a> flags, <a class="el" href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277">MemorySource</a> source)</td></tr>
<tr class="separator:a84f86b4de5adf0b164e811c87051a0ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a77780137c47f528921f6537447060f05"><td class="memTemplParams" colspan="2">template&lt;typename T , class... Args&gt; </td></tr>
<tr class="memitem:a77780137c47f528921f6537447060f05"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; T &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a77780137c47f528921f6537447060f05">MakeOptional</a> (Args &amp;&amp;... args)</td></tr>
<tr class="memdesc:a77780137c47f528921f6537447060f05"><td class="mdescLeft">&#160;</td><td class="mdescRight">Utility template that constructs an object of type T in-place and wraps it inside an Optional&lt;T&gt; object. <a href="namespacearmnn.html#a77780137c47f528921f6537447060f05">More...</a><br /></td></tr>
<tr class="separator:a77780137c47f528921f6537447060f05"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:addb6b14dd1b632263ffe77430259a7c4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a> (<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> type)</td></tr>
<tr class="separator:addb6b14dd1b632263ffe77430259a7c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a19a90c41ca2f46ab29918fef1a6ad72e"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a19a90c41ca2f46ab29918fef1a6ad72e">GetStatusAsCString</a> (<a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a> status)</td></tr>
<tr class="separator:a19a90c41ca2f46ab29918fef1a6ad72e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa093207ea7c4e7a9c9abe40d2f57995b"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa093207ea7c4e7a9c9abe40d2f57995b">GetActivationFunctionAsCString</a> (<a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a> activation)</td></tr>
<tr class="separator:aa093207ea7c4e7a9c9abe40d2f57995b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5cda3502382f06a64c3cbeb1829bd850"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5cda3502382f06a64c3cbeb1829bd850">GetArgMinMaxFunctionAsCString</a> (<a class="el" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a> function)</td></tr>
<tr class="separator:a5cda3502382f06a64c3cbeb1829bd850"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aabb76a77e95921785f576bb29b495cd8"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aabb76a77e95921785f576bb29b495cd8">GetComparisonOperationAsCString</a> (<a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58c">ComparisonOperation</a> operation)</td></tr>
<tr class="separator:aabb76a77e95921785f576bb29b495cd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aed346b74795fd613f727ca8369778704"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aed346b74795fd613f727ca8369778704">GetBinaryOperationAsCString</a> (<a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047">BinaryOperation</a> operation)</td></tr>
<tr class="separator:aed346b74795fd613f727ca8369778704"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6dac966f265381903c8ef4f392becced"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6dac966f265381903c8ef4f392becced">GetUnaryOperationAsCString</a> (<a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8">UnaryOperation</a> operation)</td></tr>
<tr class="separator:a6dac966f265381903c8ef4f392becced"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0ad431ff1600c845fda078ac58a47809"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0ad431ff1600c845fda078ac58a47809">GetLogicalBinaryOperationAsCString</a> (<a class="el" href="namespacearmnn.html#a2da4db0140d1a6dc69c9c82e9ef5379e">LogicalBinaryOperation</a> operation)</td></tr>
<tr class="separator:a0ad431ff1600c845fda078ac58a47809"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a85b4bd588d0986fd48fdcaba72fbc1b7"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a85b4bd588d0986fd48fdcaba72fbc1b7">GetFusedTypeAsCString</a> (<a class="el" href="namespacearmnn.html#a52d63dc326ef2e2d373217b84ac4a402">FusedKernelType</a> type)</td></tr>
<tr class="separator:a85b4bd588d0986fd48fdcaba72fbc1b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a517314c21ac5309b90408da162212f9d"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a517314c21ac5309b90408da162212f9d">GetPoolingAlgorithmAsCString</a> (<a class="el" href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718">PoolingAlgorithm</a> pooling)</td></tr>
<tr class="separator:a517314c21ac5309b90408da162212f9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a67d7ce2e14ebd328f423322db88279c3"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a67d7ce2e14ebd328f423322db88279c3">GetOutputShapeRoundingAsCString</a> (<a class="el" href="namespacearmnn.html#adf2e5515c4c36a3e7e46bb8b83c6754e">OutputShapeRounding</a> rounding)</td></tr>
<tr class="separator:a67d7ce2e14ebd328f423322db88279c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a129bde68152f5892e6abdedcb62aa983"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a129bde68152f5892e6abdedcb62aa983">GetPaddingMethodAsCString</a> (<a class="el" href="namespacearmnn.html#a3888429b6ebc79f9a7df549e5e4d9a2f">PaddingMethod</a> method)</td></tr>
<tr class="separator:a129bde68152f5892e6abdedcb62aa983"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adb4d7f45aaa839541a90821a21d69c82"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#adb4d7f45aaa839541a90821a21d69c82">GetPaddingModeAsCString</a> (<a class="el" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91">PaddingMode</a> mode)</td></tr>
<tr class="separator:adb4d7f45aaa839541a90821a21d69c82"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3c1f8116bfc753b5a72ae00d9f92a595"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3c1f8116bfc753b5a72ae00d9f92a595">GetReduceOperationAsCString</a> (<a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0">ReduceOperation</a> reduce_operation)</td></tr>
<tr class="separator:a3c1f8116bfc753b5a72ae00d9f92a595"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa02b9e06fb20fa3c13da0427e6ee5ab2"><td class="memItemLeft" align="right" valign="top">constexpr unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa02b9e06fb20fa3c13da0427e6ee5ab2">GetDataTypeSize</a> (<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataType)</td></tr>
<tr class="separator:aa02b9e06fb20fa3c13da0427e6ee5ab2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a637fea04314a9870c1dc4355c1bed429"><td class="memTemplParams" colspan="2">template&lt;unsigned N&gt; </td></tr>
<tr class="memitem:a637fea04314a9870c1dc4355c1bed429"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a637fea04314a9870c1dc4355c1bed429">StrEqual</a> (const char *strA, const char(&amp;strB)[N])</td></tr>
<tr class="separator:a637fea04314a9870c1dc4355c1bed429"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a65645fa03bf8cddfb9d8a9f83beeb6e8"><td class="memItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456ae">armnn::Compute</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a65645fa03bf8cddfb9d8a9f83beeb6e8">ParseComputeDevice</a> (const char *str)</td></tr>
<tr class="memdesc:a65645fa03bf8cddfb9d8a9f83beeb6e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated function that will be removed together with the Compute enum. <a href="namespacearmnn.html#a65645fa03bf8cddfb9d8a9f83beeb6e8">More...</a><br /></td></tr>
<tr class="separator:a65645fa03bf8cddfb9d8a9f83beeb6e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a81b5ff8545adad19a1c9d4ca076d552c"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a81b5ff8545adad19a1c9d4ca076d552c">GetDataTypeName</a> (<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataType)</td></tr>
<tr class="separator:a81b5ff8545adad19a1c9d4ca076d552c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeef70b7611ae71e97ab55c75ef72b210"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aeef70b7611ae71e97ab55c75ef72b210">GetDataLayoutName</a> (<a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout)</td></tr>
<tr class="separator:aeef70b7611ae71e97ab55c75ef72b210"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeadd602e128a2be97161345b48533417"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aeadd602e128a2be97161345b48533417">GetNormalizationAlgorithmChannelAsCString</a> (<a class="el" href="namespacearmnn.html#abe18a5033f2ab9c0de82c676b48f5437">NormalizationAlgorithmChannel</a> channel)</td></tr>
<tr class="separator:aeadd602e128a2be97161345b48533417"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad57460ea53cd0b519a3b3547eaf1db7c"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad57460ea53cd0b519a3b3547eaf1db7c">GetNormalizationAlgorithmMethodAsCString</a> (<a class="el" href="namespacearmnn.html#ad605d1661fa0d8c7fea651d82fbe11c9">NormalizationAlgorithmMethod</a> method)</td></tr>
<tr class="separator:ad57460ea53cd0b519a3b3547eaf1db7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aded981a42027bd3302b9c0f09d988659"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aded981a42027bd3302b9c0f09d988659">GetResizeMethodAsCString</a> (<a class="el" href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4">ResizeMethod</a> method)</td></tr>
<tr class="separator:aded981a42027bd3302b9c0f09d988659"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa0a94554d6ef64e32793b3d54b2563f0"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa0a94554d6ef64e32793b3d54b2563f0">GetMemBlockStrategyTypeName</a> (<a class="el" href="namespacearmnn.html#a7100de49939c3e393101f78d425a98c6">MemBlockStrategyType</a> memBlockStrategyType)</td></tr>
<tr class="separator:aa0a94554d6ef64e32793b3d54b2563f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad44c007f21af2d0375e3ef9400a1b275"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:ad44c007f21af2d0375e3ef9400a1b275"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad44c007f21af2d0375e3ef9400a1b275">IsQuantizedType</a> ()</td></tr>
<tr class="separator:ad44c007f21af2d0375e3ef9400a1b275"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad91bc7bfe29186f5d78c28386c6c5309"><td class="memItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad91bc7bfe29186f5d78c28386c6c5309">IsQuantized8BitType</a> (<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataType)</td></tr>
<tr class="separator:ad91bc7bfe29186f5d78c28386c6c5309"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa172264d7075abf828e0b6894996a561"><td class="memItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa172264d7075abf828e0b6894996a561">IsQuantizedType</a> (<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataType)</td></tr>
<tr class="separator:aa172264d7075abf828e0b6894996a561"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaa5b68f3f5bb73b1d3c85d895547a372"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aaa5b68f3f5bb73b1d3c85d895547a372">operator&lt;&lt;</a> (std::ostream &amp;os, <a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a> stat)</td></tr>
<tr class="separator:aaa5b68f3f5bb73b1d3c85d895547a372"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa6d7532e14af97577c054f96d0cf23b3"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa6d7532e14af97577c054f96d0cf23b3">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classarmnn_1_1_tensor_shape.html">armnn::TensorShape</a> &amp;shape)</td></tr>
<tr class="separator:aa6d7532e14af97577c054f96d0cf23b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad773a034fb9983e15f3094b4c5c7c30c"><td class="memTemplParams" colspan="2">template&lt;typename QuantizedType &gt; </td></tr>
<tr class="memitem:ad773a034fb9983e15f3094b4c5c7c30c"><td class="memTemplItemLeft" align="right" valign="top">QuantizedType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad773a034fb9983e15f3094b4c5c7c30c">Quantize</a> (float value, float scale, int32_t offset)</td></tr>
<tr class="memdesc:ad773a034fb9983e15f3094b4c5c7c30c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Quantize a floating point data type into an 8-bit data type. <a href="namespacearmnn.html#ad773a034fb9983e15f3094b4c5c7c30c">More...</a><br /></td></tr>
<tr class="separator:ad773a034fb9983e15f3094b4c5c7c30c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a855293b1be0581fb61ef6a1c5b027d0f"><td class="memTemplParams" colspan="2">template&lt;typename QuantizedType &gt; </td></tr>
<tr class="memitem:a855293b1be0581fb61ef6a1c5b027d0f"><td class="memTemplItemLeft" align="right" valign="top">float&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a855293b1be0581fb61ef6a1c5b027d0f">Dequantize</a> (QuantizedType value, float scale, int32_t offset)</td></tr>
<tr class="memdesc:a855293b1be0581fb61ef6a1c5b027d0f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dequantize an 8-bit data type into a floating point data type. <a href="namespacearmnn.html#a855293b1be0581fb61ef6a1c5b027d0f">More...</a><br /></td></tr>
<tr class="separator:a855293b1be0581fb61ef6a1c5b027d0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9667bea652e3a5ef81fea59b71513ced"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9667bea652e3a5ef81fea59b71513ced">VerifyTensorInfoDataType</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> &amp;info, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> dataType)</td></tr>
<tr class="separator:a9667bea652e3a5ef81fea59b71513ced"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a44affeeb090c3c6a3062830562672e84"><td class="memTemplParams" colspan="2">template&lt;typename ... Ts&gt; </td></tr>
<tr class="memitem:a44affeeb090c3c6a3062830562672e84"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a> (Ts &amp;&amp;...)</td></tr>
<tr class="separator:a44affeeb090c3c6a3062830562672e84"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a375ca3cff9f1b005d1412dc5f3cf5b6e"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
<tr class="memitem:a375ca3cff9f1b005d1412dc5f3cf5b6e"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a375ca3cff9f1b005d1412dc5f3cf5b6e">numeric_cast</a> (Source source)</td></tr>
<tr class="separator:a375ca3cff9f1b005d1412dc5f3cf5b6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a40a708e0ade241da31597eefab4ad8a9"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
<tr class="memitem:a40a708e0ade241da31597eefab4ad8a9"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_signed&lt; Source &gt;::value &amp;&amp;std::is_integral&lt; Source &gt;::value &amp;&amp;std::is_signed&lt; Dest &gt;::value &amp;&amp;std::is_integral&lt; Dest &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a40a708e0ade241da31597eefab4ad8a9">numeric_cast</a> (Source source)</td></tr>
<tr class="separator:a40a708e0ade241da31597eefab4ad8a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec2a3221ba307e3f9f8d6b8cc69774fa"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
<tr class="memitem:aec2a3221ba307e3f9f8d6b8cc69774fa"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_floating_point&lt; Source &gt;::value &amp;&amp;std::is_floating_point&lt; Dest &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aec2a3221ba307e3f9f8d6b8cc69774fa">numeric_cast</a> (Source source)</td></tr>
<tr class="separator:aec2a3221ba307e3f9f8d6b8cc69774fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a320f9416a8c5eda0210f1d0ec71dbe53"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
<tr class="memitem:a320f9416a8c5eda0210f1d0ec71dbe53"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_floating_point&lt; Source &gt;::value &amp;&amp;std::is_signed&lt; Dest &gt;::value &amp;&amp;std::is_integral&lt; Dest &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a320f9416a8c5eda0210f1d0ec71dbe53">numeric_cast</a> (Source source)</td></tr>
<tr class="separator:a320f9416a8c5eda0210f1d0ec71dbe53"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3afc74a78c7a7590fd1c35b0d5eb69db"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
<tr class="memitem:a3afc74a78c7a7590fd1c35b0d5eb69db"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_signed&lt; Source &gt;::value &amp;&amp;std::is_integral&lt; Source &gt;::value &amp;&amp;std::is_floating_point&lt; Dest &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3afc74a78c7a7590fd1c35b0d5eb69db">numeric_cast</a> (Source source)</td></tr>
<tr class="separator:a3afc74a78c7a7590fd1c35b0d5eb69db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa4039ab8f10849c09d08485cf6f113de"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
<tr class="memitem:aa4039ab8f10849c09d08485cf6f113de"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_signed&lt; Dest &gt;::value &amp;&amp;std::is_integral&lt; Dest &gt;::value &amp;&amp;std::is_unsigned&lt; Source &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa4039ab8f10849c09d08485cf6f113de">numeric_cast</a> (Source sValue)</td></tr>
<tr class="separator:aa4039ab8f10849c09d08485cf6f113de"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aab0d3e691c3a26cc5c4aa5c6f12eaea0"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
<tr class="memitem:aab0d3e691c3a26cc5c4aa5c6f12eaea0"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_floating_point&lt; Dest &gt;::value &amp;&amp;std::is_unsigned&lt; Source &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aab0d3e691c3a26cc5c4aa5c6f12eaea0">numeric_cast</a> (Source sValue)</td></tr>
<tr class="separator:aab0d3e691c3a26cc5c4aa5c6f12eaea0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4348c6348d681f6d0c7cc6d229435396"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
<tr class="memitem:a4348c6348d681f6d0c7cc6d229435396"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_unsigned&lt; Dest &gt;::value &amp;&amp;std::is_signed&lt; Source &gt;::value &amp;&amp;std::is_integral&lt; Source &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4348c6348d681f6d0c7cc6d229435396">numeric_cast</a> (Source sValue)</td></tr>
<tr class="separator:a4348c6348d681f6d0c7cc6d229435396"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1b5cfb3269fecb1dda8d0aee3c8212e6"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
<tr class="memitem:a1b5cfb3269fecb1dda8d0aee3c8212e6"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_unsigned&lt; Dest &gt;::value &amp;&amp;std::is_floating_point&lt; Source &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1b5cfb3269fecb1dda8d0aee3c8212e6">numeric_cast</a> (Source sValue)</td></tr>
<tr class="separator:a1b5cfb3269fecb1dda8d0aee3c8212e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa4e89c644c511e255f6a7ecbd5d14686"><td class="memTemplParams" colspan="2">template&lt;typename DestType , typename SourceType &gt; </td></tr>
<tr class="memitem:aa4e89c644c511e255f6a7ecbd5d14686"><td class="memTemplItemLeft" align="right" valign="top">DestType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a> (SourceType *value)</td></tr>
<tr class="memdesc:aa4e89c644c511e255f6a7ecbd5d14686"><td class="mdescLeft">&#160;</td><td class="mdescRight">Polymorphic downcast for build in pointers only. <a href="namespacearmnn.html#aa4e89c644c511e255f6a7ecbd5d14686">More...</a><br /></td></tr>
<tr class="separator:aa4e89c644c511e255f6a7ecbd5d14686"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6baab222db3195a0bd77f488a81fd316"><td class="memTemplParams" colspan="2">template&lt;typename DestType , typename SourceType &gt; </td></tr>
<tr class="memitem:a6baab222db3195a0bd77f488a81fd316"><td class="memTemplItemLeft" align="right" valign="top">auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6baab222db3195a0bd77f488a81fd316">PolymorphicPointerDowncast</a> (const SourceType &amp;value)</td></tr>
<tr class="memdesc:a6baab222db3195a0bd77f488a81fd316"><td class="mdescLeft">&#160;</td><td class="mdescRight">Polymorphic downcast for shared pointers and build in pointers. <a href="namespacearmnn.html#a6baab222db3195a0bd77f488a81fd316">More...</a><br /></td></tr>
<tr class="separator:a6baab222db3195a0bd77f488a81fd316"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac895f6f6897ce335b7b433201bae0b48"><td class="memItemLeft" align="right" valign="top">std::chrono::high_resolution_clock::time_point&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac895f6f6897ce335b7b433201bae0b48">GetTimeNow</a> ()</td></tr>
<tr class="separator:ac895f6f6897ce335b7b433201bae0b48"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a441621f00fd5665898c81a5ae3473c6b"><td class="memItemLeft" align="right" valign="top">std::chrono::duration&lt; double, std::milli &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a441621f00fd5665898c81a5ae3473c6b">GetTimeDuration</a> (std::chrono::high_resolution_clock::time_point start_time)</td></tr>
<tr class="separator:a441621f00fd5665898c81a5ae3473c6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2cf1ea7140f419eba6d60d01dd0a795a"><td class="memTemplParams" colspan="2">template&lt;typename Function , typename Iterator &gt; </td></tr>
<tr class="memitem:a2cf1ea7140f419eba6d60d01dd0a795a"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="classarmnn_1_1_transform_iterator.html">TransformIterator</a>&lt; Function, Iterator &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2cf1ea7140f419eba6d60d01dd0a795a">MakeTransformIterator</a> (Iterator i, Function f)</td></tr>
<tr class="separator:a2cf1ea7140f419eba6d60d01dd0a795a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa59f7a819c3e29d10ffc41e5c0616872"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa59f7a819c3e29d10ffc41e5c0616872">ConfigureLogging</a> (bool printToStandardOutput, bool printToDebugOutput, <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a> severity)</td></tr>
<tr class="memdesc:aa59f7a819c3e29d10ffc41e5c0616872"><td class="mdescLeft">&#160;</td><td class="mdescRight">Configures the logging behaviour of the ARMNN library. <a href="namespacearmnn.html#aa59f7a819c3e29d10ffc41e5c0616872">More...</a><br /></td></tr>
<tr class="separator:aa59f7a819c3e29d10ffc41e5c0616872"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad734960f7ae60a86b74f6722f6c14332"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad734960f7ae60a86b74f6722f6c14332">NeonDetected</a> ()</td></tr>
<tr class="separator:ad734960f7ae60a86b74f6722f6c14332"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa09a8bb02eed50715082d8b7fccd2f8d"><td class="memItemLeft" align="right" valign="top">const std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa09a8bb02eed50715082d8b7fccd2f8d">GetVersion</a> ()</td></tr>
<tr class="separator:aa09a8bb02eed50715082d8b7fccd2f8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3cf63e1c930f73db7f917203fe15f503"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3cf63e1c930f73db7f917203fe15f503">roundf</a> (float value)</td></tr>
<tr class="separator:a3cf63e1c930f73db7f917203fe15f503"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14d7f180bf51e86850305965c3707e07"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a14d7f180bf51e86850305965c3707e07">swap</a> (<a class="el" href="structarmnn_1_1_origins_descriptor.html">OriginsDescriptor</a> &amp;first, <a class="el" href="structarmnn_1_1_origins_descriptor.html">OriginsDescriptor</a> &amp;second)</td></tr>
<tr class="separator:a14d7f180bf51e86850305965c3707e07"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a686b8288a04b3ffff67d560eea53f6be"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a686b8288a04b3ffff67d560eea53f6be">swap</a> (<a class="el" href="structarmnn_1_1_views_descriptor.html">ViewsDescriptor</a> &amp;first, <a class="el" href="structarmnn_1_1_views_descriptor.html">ViewsDescriptor</a> &amp;second)</td></tr>
<tr class="separator:a686b8288a04b3ffff67d560eea53f6be"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aed508ea8d7b3ef4e171cb6f178acf086"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aed508ea8d7b3ef4e171cb6f178acf086">GetNumInputs</a> (bool biasEnabled)</td></tr>
<tr class="separator:aed508ea8d7b3ef4e171cb6f178acf086"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3854dece5adbc9c94f7e460b58b82be9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3854dece5adbc9c94f7e460b58b82be9">AssertNumberOfInputSlots</a> (<a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;layer)</td></tr>
<tr class="separator:a3854dece5adbc9c94f7e460b58b82be9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac4fb1513cf6f4f3f40ab3d6559ec4067"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:ac4fb1513cf6f4f3f40ab3d6559ec4067"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac4fb1513cf6f4f3f40ab3d6559ec4067">LayerEnumOf</a> (const T *=nullptr)</td></tr>
<tr class="separator:ac4fb1513cf6f4f3f40ab3d6559ec4067"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb1e69829289fb07cc349c0884f27abd"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:afb1e69829289fb07cc349c0884f27abd"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#afb1e69829289fb07cc349c0884f27abd">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *)</td></tr>
<tr class="separator:afb1e69829289fb07cc349c0884f27abd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acc630e11a5baa28ad5723568a7a60109"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:acc630e11a5baa28ad5723568a7a60109"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#acc630e11a5baa28ad5723568a7a60109">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_addition_layer.html">AdditionLayer</a> *)</td></tr>
<tr class="separator:acc630e11a5baa28ad5723568a7a60109"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a324e860c347972fce7a1c07531bed06e"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a324e860c347972fce7a1c07531bed06e"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a324e860c347972fce7a1c07531bed06e">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_arg_min_max_layer.html">ArgMinMaxLayer</a> *)</td></tr>
<tr class="separator:a324e860c347972fce7a1c07531bed06e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a317945cbed8d24f155e43d976a355c14"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a317945cbed8d24f155e43d976a355c14"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a317945cbed8d24f155e43d976a355c14">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_batch_mat_mul_layer.html">BatchMatMulLayer</a> *)</td></tr>
<tr class="separator:a317945cbed8d24f155e43d976a355c14"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae22db3ab5196edbb2e4e5244adc512e3"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:ae22db3ab5196edbb2e4e5244adc512e3"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae22db3ab5196edbb2e4e5244adc512e3">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_batch_normalization_layer.html">BatchNormalizationLayer</a> *)</td></tr>
<tr class="separator:ae22db3ab5196edbb2e4e5244adc512e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a87ffe3fb58ec36989d343e53e23fb0f8"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a87ffe3fb58ec36989d343e53e23fb0f8"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a87ffe3fb58ec36989d343e53e23fb0f8">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_batch_to_space_nd_layer.html">BatchToSpaceNdLayer</a> *)</td></tr>
<tr class="separator:a87ffe3fb58ec36989d343e53e23fb0f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9ba69ec15604eac568e20fb035109f9f"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a9ba69ec15604eac568e20fb035109f9f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9ba69ec15604eac568e20fb035109f9f">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_broadcast_to_layer.html">BroadcastToLayer</a> *)</td></tr>
<tr class="separator:a9ba69ec15604eac568e20fb035109f9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0bce3e1a80419bc6966f60c8f2db9b92"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a0bce3e1a80419bc6966f60c8f2db9b92"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0bce3e1a80419bc6966f60c8f2db9b92">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_cast_layer.html">CastLayer</a> *)</td></tr>
<tr class="separator:a0bce3e1a80419bc6966f60c8f2db9b92"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af99801cff508d065bede5283a0ea1dc9"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:af99801cff508d065bede5283a0ea1dc9"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af99801cff508d065bede5283a0ea1dc9">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_channel_shuffle_layer.html">ChannelShuffleLayer</a> *)</td></tr>
<tr class="separator:af99801cff508d065bede5283a0ea1dc9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a43b8024cb70c07116be132ca28b12a21"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a43b8024cb70c07116be132ca28b12a21"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a43b8024cb70c07116be132ca28b12a21">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_comparison_layer.html">ComparisonLayer</a> *)</td></tr>
<tr class="separator:a43b8024cb70c07116be132ca28b12a21"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a300c356944bb1e9d2dff6191d1c3501c"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a300c356944bb1e9d2dff6191d1c3501c"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a300c356944bb1e9d2dff6191d1c3501c">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_concat_layer.html">ConcatLayer</a> *)</td></tr>
<tr class="separator:a300c356944bb1e9d2dff6191d1c3501c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a307007c2249288fe158bfdfaf9e1c413"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a307007c2249288fe158bfdfaf9e1c413"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a307007c2249288fe158bfdfaf9e1c413">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_constant_layer.html">ConstantLayer</a> *)</td></tr>
<tr class="separator:a307007c2249288fe158bfdfaf9e1c413"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4471d39d8390fc550c1f8688639e66f5"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a4471d39d8390fc550c1f8688639e66f5"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4471d39d8390fc550c1f8688639e66f5">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_convert_fp16_to_fp32_layer.html">ConvertFp16ToFp32Layer</a> *)</td></tr>
<tr class="separator:a4471d39d8390fc550c1f8688639e66f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af8df06bed5f1257864645e45948afa5c"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:af8df06bed5f1257864645e45948afa5c"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af8df06bed5f1257864645e45948afa5c">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_convert_fp32_to_fp16_layer.html">ConvertFp32ToFp16Layer</a> *)</td></tr>
<tr class="separator:af8df06bed5f1257864645e45948afa5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab2f52d0c728933e36f581a07676d9fe9"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:ab2f52d0c728933e36f581a07676d9fe9"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab2f52d0c728933e36f581a07676d9fe9">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_convolution2d_layer.html">Convolution2dLayer</a> *)</td></tr>
<tr class="separator:ab2f52d0c728933e36f581a07676d9fe9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8aa8025b92a7d302536ab63c1f0ea99c"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a8aa8025b92a7d302536ab63c1f0ea99c"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8aa8025b92a7d302536ab63c1f0ea99c">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_convolution3d_layer.html">Convolution3dLayer</a> *)</td></tr>
<tr class="separator:a8aa8025b92a7d302536ab63c1f0ea99c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad596268fcd03c87a4b6fde86f4732546"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:ad596268fcd03c87a4b6fde86f4732546"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad596268fcd03c87a4b6fde86f4732546">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_debug_layer.html">DebugLayer</a> *)</td></tr>
<tr class="separator:ad596268fcd03c87a4b6fde86f4732546"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a939154289f544a02baec0735b27b8894"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a939154289f544a02baec0735b27b8894"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a939154289f544a02baec0735b27b8894">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_depth_to_space_layer.html">DepthToSpaceLayer</a> *)</td></tr>
<tr class="separator:a939154289f544a02baec0735b27b8894"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a26a46c27bca08b5bd26abba341f1d795"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a26a46c27bca08b5bd26abba341f1d795"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a26a46c27bca08b5bd26abba341f1d795">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_depthwise_convolution2d_layer.html">DepthwiseConvolution2dLayer</a> *)</td></tr>
<tr class="separator:a26a46c27bca08b5bd26abba341f1d795"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a95e2d190d7483017b4f4841dd07776e5"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a95e2d190d7483017b4f4841dd07776e5"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a95e2d190d7483017b4f4841dd07776e5">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_dequantize_layer.html">DequantizeLayer</a> *)</td></tr>
<tr class="separator:a95e2d190d7483017b4f4841dd07776e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a22772d461066f995cd72d13066b0f46d"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a22772d461066f995cd72d13066b0f46d"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a22772d461066f995cd72d13066b0f46d">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_detection_post_process_layer.html">DetectionPostProcessLayer</a> *)</td></tr>
<tr class="separator:a22772d461066f995cd72d13066b0f46d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a955b1001b8c57c60ce443a1e31468f20"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a955b1001b8c57c60ce443a1e31468f20"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a955b1001b8c57c60ce443a1e31468f20">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_division_layer.html">DivisionLayer</a> *)</td></tr>
<tr class="separator:a955b1001b8c57c60ce443a1e31468f20"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad7acbd84f697a9838ae5a5e2163ecd5c"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:ad7acbd84f697a9838ae5a5e2163ecd5c"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad7acbd84f697a9838ae5a5e2163ecd5c">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_elementwise_binary_layer.html">ElementwiseBinaryLayer</a> *)</td></tr>
<tr class="separator:ad7acbd84f697a9838ae5a5e2163ecd5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a72f7601d11f32c8d9ccb49a80fcf662a"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a72f7601d11f32c8d9ccb49a80fcf662a"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a72f7601d11f32c8d9ccb49a80fcf662a">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_elementwise_unary_layer.html">ElementwiseUnaryLayer</a> *)</td></tr>
<tr class="separator:a72f7601d11f32c8d9ccb49a80fcf662a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4acae0cdcdfab8e941af5c4e42e58cb3"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a4acae0cdcdfab8e941af5c4e42e58cb3"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4acae0cdcdfab8e941af5c4e42e58cb3">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_fake_quantization_layer.html">FakeQuantizationLayer</a> *)</td></tr>
<tr class="separator:a4acae0cdcdfab8e941af5c4e42e58cb3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a12fdb9a7f3cb197316e3e67e036216dc"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a12fdb9a7f3cb197316e3e67e036216dc"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a12fdb9a7f3cb197316e3e67e036216dc">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_fill_layer.html">FillLayer</a> *)</td></tr>
<tr class="separator:a12fdb9a7f3cb197316e3e67e036216dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a575f5487e62465b6b9edbc447a26f32f"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a575f5487e62465b6b9edbc447a26f32f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a575f5487e62465b6b9edbc447a26f32f">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_floor_layer.html">FloorLayer</a> *)</td></tr>
<tr class="separator:a575f5487e62465b6b9edbc447a26f32f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa689e4a3aa77e9d9e5851f566c5eb8b3"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:aa689e4a3aa77e9d9e5851f566c5eb8b3"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa689e4a3aa77e9d9e5851f566c5eb8b3">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_fully_connected_layer.html">FullyConnectedLayer</a> *)</td></tr>
<tr class="separator:aa689e4a3aa77e9d9e5851f566c5eb8b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab374e7b6a3496df4932c96355ebccc48"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:ab374e7b6a3496df4932c96355ebccc48"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab374e7b6a3496df4932c96355ebccc48">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_fused_layer.html">FusedLayer</a> *)</td></tr>
<tr class="separator:ab374e7b6a3496df4932c96355ebccc48"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a548fb17a9bff172e751ae4bd3add62b5"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a548fb17a9bff172e751ae4bd3add62b5"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a548fb17a9bff172e751ae4bd3add62b5">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_gather_layer.html">GatherLayer</a> *)</td></tr>
<tr class="separator:a548fb17a9bff172e751ae4bd3add62b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af786ed151cee66263c0ce890d11d15c9"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:af786ed151cee66263c0ce890d11d15c9"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af786ed151cee66263c0ce890d11d15c9">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_gather_nd_layer.html">GatherNdLayer</a> *)</td></tr>
<tr class="separator:af786ed151cee66263c0ce890d11d15c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adef1c8c63daa9d348a29e74eac33a054"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:adef1c8c63daa9d348a29e74eac33a054"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#adef1c8c63daa9d348a29e74eac33a054">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_input_layer.html">InputLayer</a> *)</td></tr>
<tr class="separator:adef1c8c63daa9d348a29e74eac33a054"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a57bcf309be7adcc91001834979f87bde"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a57bcf309be7adcc91001834979f87bde"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a57bcf309be7adcc91001834979f87bde">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_instance_normalization_layer.html">InstanceNormalizationLayer</a> *)</td></tr>
<tr class="separator:a57bcf309be7adcc91001834979f87bde"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a36f16b97bcb662caaa4eae24ea16cccf"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a36f16b97bcb662caaa4eae24ea16cccf"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a36f16b97bcb662caaa4eae24ea16cccf">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_l2_normalization_layer.html">L2NormalizationLayer</a> *)</td></tr>
<tr class="separator:a36f16b97bcb662caaa4eae24ea16cccf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a78bb83e7a83c970a54ffe923386a79d0"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a78bb83e7a83c970a54ffe923386a79d0"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a78bb83e7a83c970a54ffe923386a79d0">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_logical_binary_layer.html">LogicalBinaryLayer</a> *)</td></tr>
<tr class="separator:a78bb83e7a83c970a54ffe923386a79d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb6f9bd4f43118749a0336074bed7b35"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:afb6f9bd4f43118749a0336074bed7b35"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#afb6f9bd4f43118749a0336074bed7b35">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_log_softmax_layer.html">LogSoftmaxLayer</a> *)</td></tr>
<tr class="separator:afb6f9bd4f43118749a0336074bed7b35"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0d08fb555c6d1cba705fd73b71797a28"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a0d08fb555c6d1cba705fd73b71797a28"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0d08fb555c6d1cba705fd73b71797a28">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_lstm_layer.html">LstmLayer</a> *)</td></tr>
<tr class="separator:a0d08fb555c6d1cba705fd73b71797a28"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac2bd34e0328cda2e23ccb4c79fa72960"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:ac2bd34e0328cda2e23ccb4c79fa72960"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac2bd34e0328cda2e23ccb4c79fa72960">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_map_layer.html">MapLayer</a> *)</td></tr>
<tr class="separator:ac2bd34e0328cda2e23ccb4c79fa72960"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6b231c8a547d4030d9a4a1618810c20b"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a6b231c8a547d4030d9a4a1618810c20b"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6b231c8a547d4030d9a4a1618810c20b">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_maximum_layer.html">MaximumLayer</a> *)</td></tr>
<tr class="separator:a6b231c8a547d4030d9a4a1618810c20b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af079ba32db74f53aba1ad19193cd2a4b"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:af079ba32db74f53aba1ad19193cd2a4b"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af079ba32db74f53aba1ad19193cd2a4b">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_mean_layer.html">MeanLayer</a> *)</td></tr>
<tr class="separator:af079ba32db74f53aba1ad19193cd2a4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa17969606f64ea581c28431f2395e653"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:aa17969606f64ea581c28431f2395e653"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa17969606f64ea581c28431f2395e653">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_mem_copy_layer.html">MemCopyLayer</a> *)</td></tr>
<tr class="separator:aa17969606f64ea581c28431f2395e653"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a70f3d83f6d1e3918eab895c8083058fa"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a70f3d83f6d1e3918eab895c8083058fa"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a70f3d83f6d1e3918eab895c8083058fa">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_mem_import_layer.html">MemImportLayer</a> *)</td></tr>
<tr class="separator:a70f3d83f6d1e3918eab895c8083058fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9e8199bdc39f928f694591a41d7aa0c0"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a9e8199bdc39f928f694591a41d7aa0c0"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9e8199bdc39f928f694591a41d7aa0c0">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_merge_layer.html">MergeLayer</a> *)</td></tr>
<tr class="separator:a9e8199bdc39f928f694591a41d7aa0c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad32a13408ace1c1fa520ed64a2cbe70f"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:ad32a13408ace1c1fa520ed64a2cbe70f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad32a13408ace1c1fa520ed64a2cbe70f">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_minimum_layer.html">MinimumLayer</a> *)</td></tr>
<tr class="separator:ad32a13408ace1c1fa520ed64a2cbe70f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a40f1546c0fa69f318eeab4b29cc64b70"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a40f1546c0fa69f318eeab4b29cc64b70"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a40f1546c0fa69f318eeab4b29cc64b70">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_multiplication_layer.html">MultiplicationLayer</a> *)</td></tr>
<tr class="separator:a40f1546c0fa69f318eeab4b29cc64b70"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a140713619ee498a149854a5376b8d072"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a140713619ee498a149854a5376b8d072"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a140713619ee498a149854a5376b8d072">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_normalization_layer.html">NormalizationLayer</a> *)</td></tr>
<tr class="separator:a140713619ee498a149854a5376b8d072"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7a6e68f66d1d3819640b0f2d46a55fd1"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a7a6e68f66d1d3819640b0f2d46a55fd1"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7a6e68f66d1d3819640b0f2d46a55fd1">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_output_layer.html">OutputLayer</a> *)</td></tr>
<tr class="separator:a7a6e68f66d1d3819640b0f2d46a55fd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab6f1994db909dcc399cb1f8bc50c2d3d"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:ab6f1994db909dcc399cb1f8bc50c2d3d"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab6f1994db909dcc399cb1f8bc50c2d3d">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_pad_layer.html">PadLayer</a> *)</td></tr>
<tr class="separator:ab6f1994db909dcc399cb1f8bc50c2d3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1e6b17606926b8f69dbeda7f7ff1df95"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a1e6b17606926b8f69dbeda7f7ff1df95"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1e6b17606926b8f69dbeda7f7ff1df95">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_permute_layer.html">PermuteLayer</a> *)</td></tr>
<tr class="separator:a1e6b17606926b8f69dbeda7f7ff1df95"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ade84059b48b38da3a233bed287864c5b"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:ade84059b48b38da3a233bed287864c5b"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ade84059b48b38da3a233bed287864c5b">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_pooling2d_layer.html">Pooling2dLayer</a> *)</td></tr>
<tr class="separator:ade84059b48b38da3a233bed287864c5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5afa84427b91f83f2977382da7a9c62f"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a5afa84427b91f83f2977382da7a9c62f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5afa84427b91f83f2977382da7a9c62f">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_pooling3d_layer.html">Pooling3dLayer</a> *)</td></tr>
<tr class="separator:a5afa84427b91f83f2977382da7a9c62f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6e5eaa19ff232f11daa9a1c6caccf7fe"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a6e5eaa19ff232f11daa9a1c6caccf7fe"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6e5eaa19ff232f11daa9a1c6caccf7fe">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_pre_compiled_layer.html">PreCompiledLayer</a> *)</td></tr>
<tr class="separator:a6e5eaa19ff232f11daa9a1c6caccf7fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a58a5defa35b12773a97760efadffef4f"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a58a5defa35b12773a97760efadffef4f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a58a5defa35b12773a97760efadffef4f">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_prelu_layer.html">PreluLayer</a> *)</td></tr>
<tr class="separator:a58a5defa35b12773a97760efadffef4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaaaf64c0888ab25bfae770bd4c2ec34b"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:aaaaf64c0888ab25bfae770bd4c2ec34b"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aaaaf64c0888ab25bfae770bd4c2ec34b">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_quantize_layer.html">QuantizeLayer</a> *)</td></tr>
<tr class="separator:aaaaf64c0888ab25bfae770bd4c2ec34b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1da1712abdf8eb56a3fd34d09a30f88a"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a1da1712abdf8eb56a3fd34d09a30f88a"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1da1712abdf8eb56a3fd34d09a30f88a">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_q_lstm_layer.html">QLstmLayer</a> *)</td></tr>
<tr class="separator:a1da1712abdf8eb56a3fd34d09a30f88a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a31bcd6f755df954a4d7b020a09499105"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a31bcd6f755df954a4d7b020a09499105"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a31bcd6f755df954a4d7b020a09499105">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_quantized_lstm_layer.html">QuantizedLstmLayer</a> *)</td></tr>
<tr class="separator:a31bcd6f755df954a4d7b020a09499105"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0c5d6fb244a3e38da85257afb91edd80"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a0c5d6fb244a3e38da85257afb91edd80"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0c5d6fb244a3e38da85257afb91edd80">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_rank_layer.html">RankLayer</a> *)</td></tr>
<tr class="separator:a0c5d6fb244a3e38da85257afb91edd80"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2419883b22222c7bad914095ae3a9ad2"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a2419883b22222c7bad914095ae3a9ad2"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2419883b22222c7bad914095ae3a9ad2">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_reduce_layer.html">ReduceLayer</a> *)</td></tr>
<tr class="separator:a2419883b22222c7bad914095ae3a9ad2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6a17f58da2071720e3003a56a092aab3"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a6a17f58da2071720e3003a56a092aab3"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6a17f58da2071720e3003a56a092aab3">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_reshape_layer.html">ReshapeLayer</a> *)</td></tr>
<tr class="separator:a6a17f58da2071720e3003a56a092aab3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aafc370ea363f0565c3a8bced1e37c79e"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:aafc370ea363f0565c3a8bced1e37c79e"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aafc370ea363f0565c3a8bced1e37c79e">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_resize_layer.html">ResizeLayer</a> *)</td></tr>
<tr class="separator:aafc370ea363f0565c3a8bced1e37c79e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1639ecc2e0bff9c12cab2649e638ca8d"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a1639ecc2e0bff9c12cab2649e638ca8d"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1639ecc2e0bff9c12cab2649e638ca8d">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_reverse_v2_layer.html">ReverseV2Layer</a> *)</td></tr>
<tr class="separator:a1639ecc2e0bff9c12cab2649e638ca8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a741fb176bd8e8bb9a8d3e87f35908f1f"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a741fb176bd8e8bb9a8d3e87f35908f1f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a741fb176bd8e8bb9a8d3e87f35908f1f">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_scatter_nd_layer.html">ScatterNdLayer</a> *)</td></tr>
<tr class="separator:a741fb176bd8e8bb9a8d3e87f35908f1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a914ed6d4cdc4525ff0020148d4c4155c"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a914ed6d4cdc4525ff0020148d4c4155c"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a914ed6d4cdc4525ff0020148d4c4155c">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_shape_layer.html">ShapeLayer</a> *)</td></tr>
<tr class="separator:a914ed6d4cdc4525ff0020148d4c4155c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3cbbb4e00618b072ace46751e660a295"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a3cbbb4e00618b072ace46751e660a295"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3cbbb4e00618b072ace46751e660a295">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_slice_layer.html">SliceLayer</a> *)</td></tr>
<tr class="separator:a3cbbb4e00618b072ace46751e660a295"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af6af4b51e08d3e811620811ab5e0cd2d"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:af6af4b51e08d3e811620811ab5e0cd2d"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af6af4b51e08d3e811620811ab5e0cd2d">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_softmax_layer.html">SoftmaxLayer</a> *)</td></tr>
<tr class="separator:af6af4b51e08d3e811620811ab5e0cd2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac2d31ced5505a9d05287f5b71d25e34a"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:ac2d31ced5505a9d05287f5b71d25e34a"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac2d31ced5505a9d05287f5b71d25e34a">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_space_to_batch_nd_layer.html">SpaceToBatchNdLayer</a> *)</td></tr>
<tr class="separator:ac2d31ced5505a9d05287f5b71d25e34a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a81c31de4f532a95ab85ed6d999029332"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a81c31de4f532a95ab85ed6d999029332"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a81c31de4f532a95ab85ed6d999029332">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_space_to_depth_layer.html">SpaceToDepthLayer</a> *)</td></tr>
<tr class="separator:a81c31de4f532a95ab85ed6d999029332"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a24d3abbfc1ed81df673452c7148aa0cc"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a24d3abbfc1ed81df673452c7148aa0cc"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a24d3abbfc1ed81df673452c7148aa0cc">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_splitter_layer.html">SplitterLayer</a> *)</td></tr>
<tr class="separator:a24d3abbfc1ed81df673452c7148aa0cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab676aab9119d1417764849099a099ecf"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:ab676aab9119d1417764849099a099ecf"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab676aab9119d1417764849099a099ecf">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_stack_layer.html">StackLayer</a> *)</td></tr>
<tr class="separator:ab676aab9119d1417764849099a099ecf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1b5ff142f1d4420a8d83d9bcff1bfff4"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a1b5ff142f1d4420a8d83d9bcff1bfff4"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1b5ff142f1d4420a8d83d9bcff1bfff4">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_stand_in_layer.html">StandInLayer</a> *)</td></tr>
<tr class="separator:a1b5ff142f1d4420a8d83d9bcff1bfff4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad640080ff4ea3e4f9ff05823e32ce15f"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:ad640080ff4ea3e4f9ff05823e32ce15f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad640080ff4ea3e4f9ff05823e32ce15f">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_strided_slice_layer.html">StridedSliceLayer</a> *)</td></tr>
<tr class="separator:ad640080ff4ea3e4f9ff05823e32ce15f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9cc235c8c5e2ef3d2788cd558d676b0a"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a9cc235c8c5e2ef3d2788cd558d676b0a"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9cc235c8c5e2ef3d2788cd558d676b0a">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_subtraction_layer.html">SubtractionLayer</a> *)</td></tr>
<tr class="separator:a9cc235c8c5e2ef3d2788cd558d676b0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a110b9fdf7f17a1d065cd59ebc4bb76f7"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a110b9fdf7f17a1d065cd59ebc4bb76f7"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a110b9fdf7f17a1d065cd59ebc4bb76f7">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_switch_layer.html">SwitchLayer</a> *)</td></tr>
<tr class="separator:a110b9fdf7f17a1d065cd59ebc4bb76f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a43f91d371d2f0351b11595f24f81d8bf"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a43f91d371d2f0351b11595f24f81d8bf"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a43f91d371d2f0351b11595f24f81d8bf">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_tile_layer.html">TileLayer</a> *)</td></tr>
<tr class="separator:a43f91d371d2f0351b11595f24f81d8bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af44c8ebb1b55f4c42cc301d0bf030aa5"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:af44c8ebb1b55f4c42cc301d0bf030aa5"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af44c8ebb1b55f4c42cc301d0bf030aa5">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_transpose_layer.html">TransposeLayer</a> *)</td></tr>
<tr class="separator:af44c8ebb1b55f4c42cc301d0bf030aa5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a60af5a86cf0261d0bdf4312736ab4461"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a60af5a86cf0261d0bdf4312736ab4461"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a60af5a86cf0261d0bdf4312736ab4461">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_transpose_convolution2d_layer.html">TransposeConvolution2dLayer</a> *)</td></tr>
<tr class="separator:a60af5a86cf0261d0bdf4312736ab4461"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a598dbe8e8dfddfede22b52ebd0d437cb"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a598dbe8e8dfddfede22b52ebd0d437cb"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a598dbe8e8dfddfede22b52ebd0d437cb">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_unidirectional_sequence_lstm_layer.html">UnidirectionalSequenceLstmLayer</a> *)</td></tr>
<tr class="separator:a598dbe8e8dfddfede22b52ebd0d437cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aac367be4f6169b13d3a8a9250d2283d6"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:aac367be4f6169b13d3a8a9250d2283d6"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aac367be4f6169b13d3a8a9250d2283d6">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_unmap_layer.html">UnmapLayer</a> *)</td></tr>
<tr class="separator:aac367be4f6169b13d3a8a9250d2283d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8c88a8a91827e9ccc3cf3ce6b14fcd17"><td class="memTemplParams" colspan="2">template&lt;typename T , typename V &gt; </td></tr>
<tr class="memitem:a8c88a8a91827e9ccc3cf3ce6b14fcd17"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8c88a8a91827e9ccc3cf3ce6b14fcd17">SetValueChecked</a> (<a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; T &amp; &gt; optionalRef, V &amp;&amp;val)</td></tr>
<tr class="separator:a8c88a8a91827e9ccc3cf3ce6b14fcd17"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a23a5267702f036fe70a34f91e6c07490"><td class="memTemplParams" colspan="2">template&lt;typename Float16Func , typename Float32Func , typename Uint8Func , typename Int32Func , typename BooleanFunc , typename ... Params&gt; </td></tr>
<tr class="memitem:a23a5267702f036fe70a34f91e6c07490"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a23a5267702f036fe70a34f91e6c07490">IsSupportedForDataTypeGeneric</a> (<a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt; reasonIfUnsupported, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataType, Float16Func float16FuncPtr, Float32Func float32FuncPtr, Uint8Func uint8FuncPtr, Int32Func int32FuncPtr, BooleanFunc booleanFuncPtr, Params &amp;&amp;... params)</td></tr>
<tr class="separator:a23a5267702f036fe70a34f91e6c07490"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1c60a2624c7cabd60237bbeec07c70a0"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
<tr class="memitem:a1c60a2624c7cabd60237bbeec07c70a0"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1c60a2624c7cabd60237bbeec07c70a0">TrueFunc</a> (<a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
<tr class="separator:a1c60a2624c7cabd60237bbeec07c70a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a589f726622788501df0463460dac63c1"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
<tr class="memitem:a589f726622788501df0463460dac63c1"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a589f726622788501df0463460dac63c1">FalseFunc</a> (<a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
<tr class="separator:a589f726622788501df0463460dac63c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9b083e0201523891e08a2d86405c4e46"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
<tr class="memitem:a9b083e0201523891e08a2d86405c4e46"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9b083e0201523891e08a2d86405c4e46">FalseFuncF16</a> (<a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
<tr class="separator:a9b083e0201523891e08a2d86405c4e46"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b1231d5607d2dc1909c1cec828ba415"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
<tr class="memitem:a5b1231d5607d2dc1909c1cec828ba415"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5b1231d5607d2dc1909c1cec828ba415">FalseFuncF32</a> (<a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
<tr class="separator:a5b1231d5607d2dc1909c1cec828ba415"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae5039794f89bfaf2ebbe28fd35a815cf"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
<tr class="memitem:ae5039794f89bfaf2ebbe28fd35a815cf"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae5039794f89bfaf2ebbe28fd35a815cf">FalseFuncU8</a> (<a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
<tr class="separator:ae5039794f89bfaf2ebbe28fd35a815cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7560a9e76988007d33039df264aeed3f"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
<tr class="memitem:a7560a9e76988007d33039df264aeed3f"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7560a9e76988007d33039df264aeed3f">FalseFuncI32</a> (<a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
<tr class="separator:a7560a9e76988007d33039df264aeed3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a59aa54d3652ffbef6793f6447314cbd0"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
<tr class="memitem:a59aa54d3652ffbef6793f6447314cbd0"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a59aa54d3652ffbef6793f6447314cbd0">FalseInputFuncF32</a> (<a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
<tr class="separator:a59aa54d3652ffbef6793f6447314cbd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8cd64bd8701401fe3dda7eab78011d8a"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
<tr class="memitem:a8cd64bd8701401fe3dda7eab78011d8a"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8cd64bd8701401fe3dda7eab78011d8a">FalseInputFuncF16</a> (<a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
<tr class="separator:a8cd64bd8701401fe3dda7eab78011d8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a55cbb728001f752173f5d4e34a874e83"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
<tr class="memitem:a55cbb728001f752173f5d4e34a874e83"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a55cbb728001f752173f5d4e34a874e83">FalseOutputFuncF32</a> (<a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
<tr class="separator:a55cbb728001f752173f5d4e34a874e83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abc2b8312f25f2daa3cc277f1307b2067"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
<tr class="memitem:abc2b8312f25f2daa3cc277f1307b2067"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abc2b8312f25f2daa3cc277f1307b2067">FalseOutputFuncF16</a> (<a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
<tr class="separator:abc2b8312f25f2daa3cc277f1307b2067"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a52928589effc0b9cbb170a93ea792d47"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a52928589effc0b9cbb170a93ea792d47">ValidateSourcesMatchOptimizedNetwork</a> (std::vector&lt; <a class="el" href="structarmnn_1_1_backend_options.html">BackendOptions</a> &gt; optimizedOptions, const <a class="el" href="structarmnn_1_1_i_network_properties.html">INetworkProperties</a> &amp;networkProperties)</td></tr>
<tr class="memdesc:a52928589effc0b9cbb170a93ea792d47"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function performs a sanity check to ensure that the combination of input and output memory source matches the values for importEnabled and exportEnabled that were specified during optimization. <a href="namespacearmnn.html#a52928589effc0b9cbb170a93ea792d47">More...</a><br /></td></tr>
<tr class="separator:a52928589effc0b9cbb170a93ea792d47"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5acae80f1d8fd03cdb3878bd356683d7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5acae80f1d8fd03cdb3878bd356683d7">CopyToOutputTensor</a> (const <a class="el" href="classarmnn_1_1_tensor.html">Tensor</a> &amp;outputTensor, <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *outputTensorHandle)</td></tr>
<tr class="separator:a5acae80f1d8fd03cdb3878bd356683d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9ef4b4b6c421b5fd4b62274e63d08f11"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classarmnn_1_1_const_tensor.html">armnn::ConstTensor</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9ef4b4b6c421b5fd4b62274e63d08f11">GetInputTensor</a> (const <a class="el" href="namespacearmnn.html#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> layerId, const <a class="el" href="namespacearmnn.html#aa01bce88f89975a5a031db4cc8861527">InputTensors</a> &amp;inputTensors)</td></tr>
<tr class="separator:a9ef4b4b6c421b5fd4b62274e63d08f11"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac624e40d8096e61c73b246934f18afd0"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classarmnn_1_1_tensor.html">armnn::Tensor</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac624e40d8096e61c73b246934f18afd0">GetOutputTensor</a> (const <a class="el" href="namespacearmnn.html#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> layerId, const <a class="el" href="namespacearmnn.html#a8f091a512915d1cb29a4ebf13dfc53ea">OutputTensors</a> &amp;outputTensors)</td></tr>
<tr class="separator:ac624e40d8096e61c73b246934f18afd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f523aee1752323aeaf899085649320b"><td class="memTemplParams" colspan="2">template&lt;LogSeverity Level&gt; </td></tr>
<tr class="memitem:a5f523aee1752323aeaf899085649320b"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5f523aee1752323aeaf899085649320b">SetLoggingSinks</a> (bool standardOut, bool debugOut, bool coloured)</td></tr>
<tr class="separator:a5f523aee1752323aeaf899085649320b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3cf1cee98e0ed8b54263ec7279f6ec69"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3cf1cee98e0ed8b54263ec7279f6ec69">ReportError</a> (const std::string &amp;errorMessage, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt; errorMessages)</td></tr>
<tr class="separator:a3cf1cee98e0ed8b54263ec7279f6ec69"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a070307e9ee0f7969f7d4320145d1dddb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a070307e9ee0f7969f7d4320145d1dddb">ReportWarning</a> (const std::string &amp;warningMessage, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt; warningMessages)</td></tr>
<tr class="separator:a070307e9ee0f7969f7d4320145d1dddb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeee4e55e6ad4fe12b2168f9fd1e88141"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aeee4e55e6ad4fe12b2168f9fd1e88141">ReturnWithError</a> (<a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a> res, const <a class="el" href="classarmnn_1_1_layer.html">Layer</a> *layer, const <a class="el" href="structarmnn_1_1_backend_settings.html">BackendSettings</a> &amp;backendSettings, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</td></tr>
<tr class="separator:aeee4e55e6ad4fe12b2168f9fd1e88141"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8bf1222ae8931bf663fa076b3e3b6f0e"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8bf1222ae8931bf663fa076b3e3b6f0e">CheckScaleSetOnQuantizedType</a> (<a class="el" href="classarmnn_1_1_layer.html">Layer</a> *layer, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</td></tr>
<tr class="separator:a8bf1222ae8931bf663fa076b3e3b6f0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abd660675ae5a9df777dcdb30c50224f6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abd660675ae5a9df777dcdb30c50224f6">AttemptBackendAssignment</a> (<a class="el" href="structarmnn_1_1_backend_settings.html">BackendSettings</a> &amp;backendSettings, <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;graph, <a class="el" href="classarmnn_1_1_layer.html">Layer</a> *layer, <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> backend, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataTypeIn, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataTypeOut, const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;availablePreferredBackends, std::string &amp;reasonIfUnsupported, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</td></tr>
<tr class="separator:abd660675ae5a9df777dcdb30c50224f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2b8ec686784330e8f20e4444f1ed7e98"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2b8ec686784330e8f20e4444f1ed7e98">GetLayerInOutDatatype</a> (const <a class="el" href="classarmnn_1_1_layer.html">Layer</a> *layer)</td></tr>
<tr class="separator:a2b8ec686784330e8f20e4444f1ed7e98"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa52ce4f1fab044ad0c73f9613e2ef6ce"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa52ce4f1fab044ad0c73f9613e2ef6ce">CheckFp16Support</a> (<a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;backends, const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;availablePreferredBackends)</td></tr>
<tr class="separator:aa52ce4f1fab044ad0c73f9613e2ef6ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af52a698836d638d0a71263c6c1496a05"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af52a698836d638d0a71263c6c1496a05">AssignBackendsIConnectable</a> (<a class="el" href="classarmnn_1_1_optimized_network_impl.html">OptimizedNetworkImpl</a> *optNetObjPtr, <a class="el" href="classarmnn_1_1_i_connectable_layer.html">IConnectableLayer</a> *it, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages, <a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a> &amp;result, <a class="el" href="structarmnn_1_1_backend_settings.html">BackendSettings</a> &amp;backendSettings, std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;availablePreferredBackends)</td></tr>
<tr class="separator:af52a698836d638d0a71263c6c1496a05"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a839ad76f1f52a70b540805b231f05d9c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a839ad76f1f52a70b540805b231f05d9c">AssignBackends</a> (<a class="el" href="classarmnn_1_1_optimized_network_impl.html">OptimizedNetworkImpl</a> *optNetObjPtr, <a class="el" href="structarmnn_1_1_backend_settings.html">BackendSettings</a> &amp;backendSettings, <a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> &amp;firstLayer, <a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> &amp;lastLayer, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</td></tr>
<tr class="separator:a839ad76f1f52a70b540805b231f05d9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4a0c704ab68e6741579b60b681e5d919"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4a0c704ab68e6741579b60b681e5d919">AssignBackends</a> (<a class="el" href="classarmnn_1_1_optimized_network_impl.html">OptimizedNetworkImpl</a> *optNetObjPtr, <a class="el" href="structarmnn_1_1_backend_settings.html">BackendSettings</a> &amp;backendSettings, <a class="el" href="classarmnn_1_1_subgraph_view.html#a308b86dbdd0a745cef76904674c9850f">SubgraphView::IConnectableLayerIterator</a> &amp;firstLayer, <a class="el" href="classarmnn_1_1_subgraph_view.html#a308b86dbdd0a745cef76904674c9850f">SubgraphView::IConnectableLayerIterator</a> &amp;lastLayer, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</td></tr>
<tr class="separator:a4a0c704ab68e6741579b60b681e5d919"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0ea4ff80d0075ff847e96dc12e734368"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0ea4ff80d0075ff847e96dc12e734368">AssignBackends</a> (<a class="el" href="classarmnn_1_1_optimized_network_impl.html">OptimizedNetworkImpl</a> *optNetObjPtr, <a class="el" href="structarmnn_1_1_backend_settings.html">BackendSettings</a> &amp;backendSettings, <a class="el" href="classarmnn_1_1_subgraph_view.html">SubgraphView</a> &amp;subgraph, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</td></tr>
<tr class="separator:a0ea4ff80d0075ff847e96dc12e734368"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1ec6b4c20ed294a96cf94c33c24caaf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1ec6b4c20ed294a96cf94c33c24caaf5">CreateSupportedBackends</a> (<a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.html">TensorHandleFactoryRegistry</a> &amp;handleFactoryRegistry, <a class="el" href="structarmnn_1_1_backend_settings.html">BackendSettings</a> &amp;backendSettings)</td></tr>
<tr class="separator:a1ec6b4c20ed294a96cf94c33c24caaf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac39f2b15d34d3e2fc74d586fc3e26231"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac39f2b15d34d3e2fc74d586fc3e26231">ApplyBackendOptimizations</a> (<a class="el" href="classarmnn_1_1_optimized_network_impl.html">OptimizedNetworkImpl</a> *optNetObjPtr, <a class="el" href="structarmnn_1_1_backend_settings.html">BackendSettings</a> &amp;backendSettings, <a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;backends, const <a class="el" href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> &amp;modelOptions, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</td></tr>
<tr class="separator:ac39f2b15d34d3e2fc74d586fc3e26231"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ee4a1cca55f69b31e625c786655ed1a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5ee4a1cca55f69b31e625c786655ed1a">RequiresCopy</a> (<a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a> src, <a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a> dst, <a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.html">TensorHandleFactoryRegistry</a> &amp;registry)</td></tr>
<tr class="separator:a5ee4a1cca55f69b31e625c786655ed1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f34318a121e010053655204df94720c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5f34318a121e010053655204df94720c">CalculateSlotOptionForInput</a> (<a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;backends, <a class="el" href="classarmnn_1_1_output_slot.html">OutputSlot</a> &amp;slot, <a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.html">TensorHandleFactoryRegistry</a> &amp;registry, bool importEnabled)</td></tr>
<tr class="separator:a5f34318a121e010053655204df94720c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab46c7f5f4736d550ab0e5e05a0fff4a9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab46c7f5f4736d550ab0e5e05a0fff4a9">CalculateSlotOptionForOutput</a> (<a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;backends, <a class="el" href="classarmnn_1_1_output_slot.html">OutputSlot</a> &amp;slot, <a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.html">TensorHandleFactoryRegistry</a> &amp;registry)</td></tr>
<tr class="separator:ab46c7f5f4736d550ab0e5e05a0fff4a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad52508167694d6d259525b3eec1a4267"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad52508167694d6d259525b3eec1a4267">CalculateSlotOption</a> (<a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;backends, <a class="el" href="classarmnn_1_1_output_slot.html">OutputSlot</a> &amp;outputSlot, <a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.html">TensorHandleFactoryRegistry</a> &amp;registry, bool exportEnabled)</td></tr>
<tr class="separator:ad52508167694d6d259525b3eec1a4267"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a738d3243c1dc564304d78908c6112e4f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016">EdgeStrategy</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a738d3243c1dc564304d78908c6112e4f">CalculateEdgeStrategy</a> (<a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;backends, <a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a> srcFactoryId, const <a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;layer, const <a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;connectedLayer, <a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.html">TensorHandleFactoryRegistry</a> &amp;registry, bool importEnabled)</td></tr>
<tr class="separator:a738d3243c1dc564304d78908c6112e4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acbf7c9a630f03ece800f807d946239ab"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#acbf7c9a630f03ece800f807d946239ab">SelectTensorHandleStrategy</a> (<a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;optGraph, <a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;backends, <a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.html">TensorHandleFactoryRegistry</a> &amp;registry, bool importEnabled, bool exportEnabled, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</td></tr>
<tr class="separator:acbf7c9a630f03ece800f807d946239ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad31c56533e4f9f9f51719599fbfcf7bb"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classarmnn_1_1_convert_fp16_to_fp32_layer.html">ConvertFp16ToFp32Layer</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad31c56533e4f9f9f51719599fbfcf7bb">InsertConvertFp16ToFp32LayersBefore</a> (<a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;graph, <a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;layer, bool expectCorrectInputType)</td></tr>
<tr class="separator:ad31c56533e4f9f9f51719599fbfcf7bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abf625e50a5eaeafce5b39580dc95a9d3"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classarmnn_1_1_convert_fp32_to_fp16_layer.html">ConvertFp32ToFp16Layer</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abf625e50a5eaeafce5b39580dc95a9d3">InsertConvertFp32ToFp16LayersAfter</a> (<a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;graph, <a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;layer)</td></tr>
<tr class="separator:abf625e50a5eaeafce5b39580dc95a9d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a67b1630e1df3a06c51d18eed6134b663"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classarmnn_1_1_debug_layer.html">DebugLayer</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a67b1630e1df3a06c51d18eed6134b663">InsertDebugLayerAfter</a> (<a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;graph, <a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;layer, bool toFile)</td></tr>
<tr class="separator:a67b1630e1df3a06c51d18eed6134b663"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac616eba4fa6ed1911f4b64a189b194fc"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac616eba4fa6ed1911f4b64a189b194fc">RevertConstantWeightsToFP32</a> (<a class="el" href="classarmnn_1_1_layer.html">Layer</a> *layer)</td></tr>
<tr class="separator:ac616eba4fa6ed1911f4b64a189b194fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4907f6b88c3e72be6b8ae876de355e0a"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a4907f6b88c3e72be6b8ae876de355e0a"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4907f6b88c3e72be6b8ae876de355e0a">Append</a> (<a class="el" href="classarmnn_1_1_optimizer.html#ad1794808004025d6e06c176507197b24">Optimizer::Optimizations</a> &amp;optimizations, T &amp;&amp;optimization)</td></tr>
<tr class="separator:a4907f6b88c3e72be6b8ae876de355e0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0c8a28b71e49c04596289ff281e58f1a"><td class="memTemplParams" colspan="2">template&lt;typename Front , typename... Others&gt; </td></tr>
<tr class="memitem:a0c8a28b71e49c04596289ff281e58f1a"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0c8a28b71e49c04596289ff281e58f1a">Append</a> (<a class="el" href="classarmnn_1_1_optimizer.html#ad1794808004025d6e06c176507197b24">Optimizer::Optimizations</a> &amp;optimizations, Front &amp;&amp;front, Others &amp;&amp;... others)</td></tr>
<tr class="separator:a0c8a28b71e49c04596289ff281e58f1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa7427025a851113a492de0b68b23d22a"><td class="memTemplParams" colspan="2">template&lt;typename... Args&gt; </td></tr>
<tr class="memitem:aa7427025a851113a492de0b68b23d22a"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_optimizer.html#ad1794808004025d6e06c176507197b24">Optimizer::Optimizations</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a> (Args &amp;&amp;... args)</td></tr>
<tr class="separator:aa7427025a851113a492de0b68b23d22a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a12d3ffe11b54c0aaa59bdd8415701c36"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_measurement.html">Measurement</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a12d3ffe11b54c0aaa59bdd8415701c36">FindMeasurement</a> (const std::string &amp;name, const <a class="el" href="classarmnn_1_1_event.html">Event</a> *event)</td></tr>
<tr class="separator:a12d3ffe11b54c0aaa59bdd8415701c36"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1b90db39f6a9ebd11591e76fa364b06f"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="structarmnn_1_1_measurement.html">Measurement</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1b90db39f6a9ebd11591e76fa364b06f">FindKernelMeasurements</a> (const <a class="el" href="classarmnn_1_1_event.html">Event</a> *event)</td></tr>
<tr class="separator:a1b90db39f6a9ebd11591e76fa364b06f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab03dcfb3b4019d8f58a67c41681951ae"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classarmnn_1_1_event.html">Event</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab03dcfb3b4019d8f58a67c41681951ae">GetEventPtr</a> (const <a class="el" href="classarmnn_1_1_event.html">Event</a> *ptr)</td></tr>
<tr class="separator:ab03dcfb3b4019d8f58a67c41681951ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4b1e2158af2aedd3f00d2121c45b0f93"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classarmnn_1_1_event.html">Event</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4b1e2158af2aedd3f00d2121c45b0f93">GetEventPtr</a> (const std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_event.html">Event</a> &gt; &amp;ptr)</td></tr>
<tr class="separator:a4b1e2158af2aedd3f00d2121c45b0f93"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a20f74b679d59b52e9fae3bbef8f10ffb"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a20f74b679d59b52e9fae3bbef8f10ffb">CalcLevel</a> (const <a class="el" href="classarmnn_1_1_event.html">Event</a> *eventPtr)</td></tr>
<tr class="separator:a20f74b679d59b52e9fae3bbef8f10ffb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae9034dd6e9c5bed6badf4f7513339f74"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae9034dd6e9c5bed6badf4f7513339f74">ConfigureDetailsObject</a> (<a class="el" href="structarmnn_1_1_json_child_object.html">JsonChildObject</a> &amp;detailsObject, std::string layerDetailsStr)</td></tr>
<tr class="separator:ae9034dd6e9c5bed6badf4f7513339f74"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7d4e24d8e296ccced976d626e08b742a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7d4e24d8e296ccced976d626e08b742a">ExtractJsonObjects</a> (unsigned int inferenceIndex, const <a class="el" href="classarmnn_1_1_event.html">Event</a> *parentEvent, <a class="el" href="structarmnn_1_1_json_child_object.html">JsonChildObject</a> &amp;parentObject, std::map&lt; const <a class="el" href="classarmnn_1_1_event.html">Event</a> *, std::vector&lt; const <a class="el" href="classarmnn_1_1_event.html">Event</a> * &gt;&gt; descendantsMap)</td></tr>
<tr class="separator:a7d4e24d8e296ccced976d626e08b742a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2386397752b62040e3b0647e8bc4dc70"><td class="memTemplParams" colspan="2">template&lt;typename DescriptorType &gt; </td></tr>
<tr class="memitem:a2386397752b62040e3b0647e8bc4dc70"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2386397752b62040e3b0647e8bc4dc70">ProfilingUpdateDescriptions</a> (const std::string &amp;name, const DescriptorType &amp;desc, const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;infos, const arm::pipe::ProfilingGuid guid)</td></tr>
<tr class="separator:a2386397752b62040e3b0647e8bc4dc70"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afce94270d9c4a51cd0c4ac6a58af4e26"><td class="memTemplParams" colspan="2">template&lt;typename Delegate &gt; </td></tr>
<tr class="memitem:afce94270d9c4a51cd0c4ac6a58af4e26"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#afce94270d9c4a51cd0c4ac6a58af4e26">ForEachLayerInput</a> (LayerSelectionInfo::LayerInfoContainer &amp;layerInfos, LayerSelectionInfo &amp;layerInfo, Delegate function)</td></tr>
<tr class="separator:afce94270d9c4a51cd0c4ac6a58af4e26"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49538fa883b70c944e437d65d6628eec"><td class="memTemplParams" colspan="2">template&lt;typename Delegate &gt; </td></tr>
<tr class="memitem:a49538fa883b70c944e437d65d6628eec"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a49538fa883b70c944e437d65d6628eec">ForEachLayerOutput</a> (LayerSelectionInfo::LayerInfoContainer &amp;layerInfos, LayerSelectionInfo &amp;layerInfo, Delegate function)</td></tr>
<tr class="separator:a49538fa883b70c944e437d65d6628eec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a09ff1f6670d27d3b41e5b5d35a6c9f37"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a09ff1f6670d27d3b41e5b5d35a6c9f37">AssignSplitId</a> (LayerSelectionInfo::LayerInfoContainer &amp;layerInfos, LayerSelectionInfo &amp;layerInfo)</td></tr>
<tr class="separator:a09ff1f6670d27d3b41e5b5d35a6c9f37"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6b10dc0d12c7f4a52ad01b9975dbe908"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6b10dc0d12c7f4a52ad01b9975dbe908">IsReadyForSplitAssignment</a> (LayerSelectionInfo::LayerInfoContainer &amp;layerInfos, LayerSelectionInfo &amp;layerInfo)</td></tr>
<tr class="separator:a6b10dc0d12c7f4a52ad01b9975dbe908"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a138ca3929b888fa8d9088c076e9de48c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a138ca3929b888fa8d9088c076e9de48c">IsLayerSupported</a> (const <a class="el" href="classarmnn_1_1_layer.html">armnn::Layer</a> *layer)</td></tr>
<tr class="separator:a138ca3929b888fa8d9088c076e9de48c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0c99a284637e7c8d3547dac8686bed3a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0c99a284637e7c8d3547dac8686bed3a">IsLayerSupported</a> (const <a class="el" href="classarmnn_1_1_layer.html">armnn::Layer</a> &amp;layer)</td></tr>
<tr class="separator:a0c99a284637e7c8d3547dac8686bed3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeb099eb45d76b4ce62d87be11c634538"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aeb099eb45d76b4ce62d87be11c634538">IsLayerOptimizable</a> (const <a class="el" href="classarmnn_1_1_layer.html">armnn::Layer</a> *layer)</td></tr>
<tr class="separator:aeb099eb45d76b4ce62d87be11c634538"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab432cc781460dbb619afabeb88139a15"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab432cc781460dbb619afabeb88139a15">IsLayerOptimizable</a> (const <a class="el" href="classarmnn_1_1_layer.html">armnn::Layer</a> &amp;layer)</td></tr>
<tr class="separator:ab432cc781460dbb619afabeb88139a15"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7e3b0eb2d8e1d5849abfab90f2b49145"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7e3b0eb2d8e1d5849abfab90f2b49145">MockTensorHandleFactoryId</a> ()</td></tr>
<tr class="separator:a7e3b0eb2d8e1d5849abfab90f2b49145"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6a2659750d6161b693d0e51616791959"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6a2659750d6161b693d0e51616791959">GetGraphForTesting</a> (<a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> *optNet)</td></tr>
<tr class="separator:a6a2659750d6161b693d0e51616791959"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac8c5f9574593b4623d4850f5fd26e3cc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac8c5f9574593b4623d4850f5fd26e3cc">GetModelOptionsForTesting</a> (<a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> *optNet)</td></tr>
<tr class="separator:ac8c5f9574593b4623d4850f5fd26e3cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a292c96e5bbde0ca0242b1138bea6195d"><td class="memItemLeft" align="right" valign="top">arm::pipe::IProfilingService &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a292c96e5bbde0ca0242b1138bea6195d">GetProfilingService</a> (<a class="el" href="structarmnn_1_1_runtime_impl.html">armnn::RuntimeImpl</a> *runtime)</td></tr>
<tr class="separator:a292c96e5bbde0ca0242b1138bea6195d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa1166f0056ce60553e825ae3cee4d5f7"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa1166f0056ce60553e825ae3cee4d5f7">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classarmnn_1_1_b_float16.html">BFloat16</a> &amp;b)</td></tr>
<tr class="separator:aa1166f0056ce60553e825ae3cee4d5f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7e4811ef91f499424bca36e98a2fbd96"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
<tr class="memitem:a7e4811ef91f499424bca36e98a2fbd96"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *replacementLayer, <a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;activationDesc)</td></tr>
<tr class="separator:a7e4811ef91f499424bca36e98a2fbd96"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a13f537c12c25c936c152ccca78d902dd"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
<tr class="memitem:a13f537c12c25c936c152ccca78d902dd"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a13f537c12c25c936c152ccca78d902dd">FuseAdditionLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;activationDesc, std::string name)</td></tr>
<tr class="separator:a13f537c12c25c936c152ccca78d902dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeda4132cdab76b98c860690c80fdb7bd"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
<tr class="memitem:aeda4132cdab76b98c860690c80fdb7bd"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aeda4132cdab76b98c860690c80fdb7bd">FuseSubtractionLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;activationDesc, std::string name)</td></tr>
<tr class="separator:aeda4132cdab76b98c860690c80fdb7bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a90f36a629081255b526ac433fcedf8ba"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
<tr class="memitem:a90f36a629081255b526ac433fcedf8ba"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a90f36a629081255b526ac433fcedf8ba">FuseDivisionLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;activationDesc, std::string name)</td></tr>
<tr class="separator:a90f36a629081255b526ac433fcedf8ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af06b26928a460f9fcdef0327f448a34c"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
<tr class="memitem:af06b26928a460f9fcdef0327f448a34c"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af06b26928a460f9fcdef0327f448a34c">FuseMultiplicationLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;activationDesc, std::string name)</td></tr>
<tr class="separator:af06b26928a460f9fcdef0327f448a34c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6a28e34d999aac5a0149d35b02a3cfe5"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
<tr class="memitem:a6a28e34d999aac5a0149d35b02a3cfe5"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6a28e34d999aac5a0149d35b02a3cfe5">FuseElementwiseBinaryLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;activationDesc, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047">BinaryOperation</a> operation, std::string name)</td></tr>
<tr class="separator:a6a28e34d999aac5a0149d35b02a3cfe5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa4a4b141867313cddb82c96800db343e"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
<tr class="memitem:aa4a4b141867313cddb82c96800db343e"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa4a4b141867313cddb82c96800db343e">FuseBatchNormalizationLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;activationDesc, std::string name)</td></tr>
<tr class="separator:aa4a4b141867313cddb82c96800db343e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afdb0a1b1703203354451e78e2fc43f3f"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
<tr class="memitem:afdb0a1b1703203354451e78e2fc43f3f"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#afdb0a1b1703203354451e78e2fc43f3f">FuseConvolution2dLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;activationDesc, std::string name)</td></tr>
<tr class="separator:afdb0a1b1703203354451e78e2fc43f3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae795a54643adfeb37ac95dee68807856"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
<tr class="memitem:ae795a54643adfeb37ac95dee68807856"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae795a54643adfeb37ac95dee68807856">FuseDepthwiseConvolution2dLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;activationDesc, std::string name)</td></tr>
<tr class="separator:ae795a54643adfeb37ac95dee68807856"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad2021f80998e436e27de7b7eeec67d54"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
<tr class="memitem:ad2021f80998e436e27de7b7eeec67d54"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad2021f80998e436e27de7b7eeec67d54">FuseFullyConnectedLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;activationDesc, std::string name)</td></tr>
<tr class="separator:ad2021f80998e436e27de7b7eeec67d54"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a189b5dedbf7a3cbcbe7760ac72c7b07d"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
<tr class="memitem:a189b5dedbf7a3cbcbe7760ac72c7b07d"><td class="memTemplItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classarmnn_1_1_i_connectable_layer.html">IConnectableLayer</a> * &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a189b5dedbf7a3cbcbe7760ac72c7b07d">ChainReduceLayers</a> (<a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="structarmnn_1_1_reduce_descriptor.html">ReduceDescriptor</a> &amp;desc)</td></tr>
<tr class="separator:a189b5dedbf7a3cbcbe7760ac72c7b07d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abecdb9c231b9ced02bec27a1ca54184f"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
<tr class="memitem:abecdb9c231b9ced02bec27a1ca54184f"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abecdb9c231b9ced02bec27a1ca54184f">ReplaceLayers</a> (<a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, std::vector&lt; <a class="el" href="classarmnn_1_1_i_connectable_layer.html">IConnectableLayer</a> * &gt; &amp;layers)</td></tr>
<tr class="separator:abecdb9c231b9ced02bec27a1ca54184f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af8b1723c2ceaf3aca2deddbf9b0e3e44"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
<tr class="memitem:af8b1723c2ceaf3aca2deddbf9b0e3e44"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af8b1723c2ceaf3aca2deddbf9b0e3e44">ReplaceMultipleLayers</a> (<a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;optimizationViews, std::vector&lt; <a class="el" href="classarmnn_1_1_i_connectable_layer.html">IConnectableLayer</a> * &gt; &amp;originalLayers, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, const std::vector&lt; SlotList &gt; inputLayersSlotLists, const std::vector&lt; SlotList &gt; outputLayersSlotLists)</td></tr>
<tr class="separator:af8b1723c2ceaf3aca2deddbf9b0e3e44"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ca05ac77af0a0444ff34c1319094f6d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3ca05ac77af0a0444ff34c1319094f6d">ParseTuningLevel</a> (const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.html">BackendOptions::Var</a> &amp;value, <a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a> defaultValue)</td></tr>
<tr class="separator:a3ca05ac77af0a0444ff34c1319094f6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab562537b5c1ef1e6cde9db9f5fa322bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab562537b5c1ef1e6cde9db9f5fa322bd">ConfigureTuner</a> (arm_compute::CLTuner &amp;tuner, <a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a> level)</td></tr>
<tr class="separator:ab562537b5c1ef1e6cde9db9f5fa322bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5e783a951642781b9e7b55db06a514b7"><td class="memItemLeft" align="right" valign="top">arm_compute::NormalizationLayerInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5e783a951642781b9e7b55db06a514b7">CreateAclNormalizationLayerInfoForL2Normalization</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> &amp;tensorInfo, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> dataLayout)</td></tr>
<tr class="separator:a5e783a951642781b9e7b55db06a514b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afdba36f125621d775d471f0daf613df2"><td class="memItemLeft" align="right" valign="top">arm_compute::ActivationLayerInfo::ActivationFunction&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#afdba36f125621d775d471f0daf613df2">ConvertActivationFunctionToAclActivationFunction</a> (<a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a> armnnFunction)</td></tr>
<tr class="separator:afdba36f125621d775d471f0daf613df2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad701d0d29baa4266ab4d33b090aa661c"><td class="memItemLeft" align="right" valign="top">arm_compute::ActivationLayerInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a> (const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;actDesc)</td></tr>
<tr class="separator:ad701d0d29baa4266ab4d33b090aa661c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af6d517245110f6b1ca702da0cbbf4518"><td class="memItemLeft" align="right" valign="top">arm_compute::ActivationLayerInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a> (const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescPtr)</td></tr>
<tr class="separator:af6d517245110f6b1ca702da0cbbf4518"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abfb0841058a8190d30851f07eca3991f"><td class="memItemLeft" align="right" valign="top">arm_compute::ActivationLayerInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abfb0841058a8190d30851f07eca3991f">ConvertAdditionalInfoToAclActivationLayerInfo</a> (const <a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a> &amp;queueDescriptor)</td></tr>
<tr class="separator:abfb0841058a8190d30851f07eca3991f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa1e93ef5f9ee3dbb5e7faa9578f180ae"><td class="memItemLeft" align="right" valign="top">arm_compute::ActivationLayerInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa1e93ef5f9ee3dbb5e7faa9578f180ae">ConvertLstmActivationFuncToAclLayerInfo</a> (uint32_t activationFunction)</td></tr>
<tr class="separator:aa1e93ef5f9ee3dbb5e7faa9578f180ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac1438a97bbc2aee5cd8470d9d2a3aebc"><td class="memItemLeft" align="right" valign="top">arm_compute::ComparisonOperation&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac1438a97bbc2aee5cd8470d9d2a3aebc">ConvertComparisonOperationToAcl</a> (const <a class="el" href="structarmnn_1_1_comparison_descriptor.html">ComparisonDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:ac1438a97bbc2aee5cd8470d9d2a3aebc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad256fcf8c7f4d5a240fa47f0b56d50af"><td class="memItemLeft" align="right" valign="top">arm_compute::PoolingType&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad256fcf8c7f4d5a240fa47f0b56d50af">ConvertPoolingAlgorithmToAclPoolingType</a> (<a class="el" href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718">PoolingAlgorithm</a> poolingAlgorithm)</td></tr>
<tr class="separator:ad256fcf8c7f4d5a240fa47f0b56d50af"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8f3bfacadfd6d2146d6ccd299dabc7aa"><td class="memItemLeft" align="right" valign="top">arm_compute::DimensionRoundingType&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8f3bfacadfd6d2146d6ccd299dabc7aa">ConvertOutputShapeRoundingToAclDimensionRoundingType</a> (<a class="el" href="namespacearmnn.html#adf2e5515c4c36a3e7e46bb8b83c6754e">OutputShapeRounding</a> rounding)</td></tr>
<tr class="separator:a8f3bfacadfd6d2146d6ccd299dabc7aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa5baabb8e3a4aa6cbdcab419d743e747"><td class="memItemLeft" align="right" valign="top">arm_compute::NormType&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa5baabb8e3a4aa6cbdcab419d743e747">ConvertNormalizationAlgorithmChannelToAclNormType</a> (<a class="el" href="namespacearmnn.html#abe18a5033f2ab9c0de82c676b48f5437">NormalizationAlgorithmChannel</a> channelType)</td></tr>
<tr class="separator:aa5baabb8e3a4aa6cbdcab419d743e747"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae2e0c1d8160fadce44d479379790718e"><td class="memItemLeft" align="right" valign="top">arm_compute::FullyConnectedLayerInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae2e0c1d8160fadce44d479379790718e">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a> (const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.html">FullyConnectedDescriptor</a> &amp;fullyConnectedDesc, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDesc)</td></tr>
<tr class="separator:ae2e0c1d8160fadce44d479379790718e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2f12c1f572fb15978e51cf646d42d4dc"><td class="memItemLeft" align="right" valign="top">arm_compute::FullyConnectedLayerInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2f12c1f572fb15978e51cf646d42d4dc">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a> (const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.html">FullyConnectedDescriptor</a> &amp;fullyConnectedDesc, arm_compute::ActivationLayerInfo activationLayerInfo)</td></tr>
<tr class="separator:a2f12c1f572fb15978e51cf646d42d4dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae9bdcb8ac91731109dc423d6ed476204"><td class="memItemLeft" align="right" valign="top">arm_compute::InterpolationPolicy&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae9bdcb8ac91731109dc423d6ed476204">ConvertResizeMethodToAclInterpolationPolicy</a> (<a class="el" href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4">ResizeMethod</a> resizeMethod)</td></tr>
<tr class="separator:ae9bdcb8ac91731109dc423d6ed476204"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae33fcc729c3eeda77a443a11f13da7ba"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:ae33fcc729c3eeda77a443a11f13da7ba"><td class="memTemplItemLeft" align="right" valign="top">T&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae33fcc729c3eeda77a443a11f13da7ba">ComputeSoftmaxAclAxis</a> (const <a class="el" href="structarmnn_1_1_softmax_descriptor.html">SoftmaxDescriptor</a> &amp;softmaxDesc, const <a class="el" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> &amp;tensor)</td></tr>
<tr class="separator:ae33fcc729c3eeda77a443a11f13da7ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a44a3b98b37a25c995aa9e4dae7d7b456"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a> (const int &amp;armnnAxis, const <a class="el" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> &amp;tensor)</td></tr>
<tr class="memdesc:a44a3b98b37a25c995aa9e4dae7d7b456"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function to convert ArmNN axis (left to right) to ACL axis (right to left) ranging from [-rank, rank) <a href="namespacearmnn.html#a44a3b98b37a25c995aa9e4dae7d7b456">More...</a><br /></td></tr>
<tr class="separator:a44a3b98b37a25c995aa9e4dae7d7b456"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a855760e957668804d33c0691a802496e"><td class="memItemLeft" align="right" valign="top">arm_compute::Conv3dInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a855760e957668804d33c0691a802496e">ComputeConv3DInfo</a> (const <a class="el" href="structarmnn_1_1_convolution3d_descriptor.html">armnn::Convolution3dDescriptor</a> descriptor, bool isFastMathEnabled, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="memdesc:a855760e957668804d33c0691a802496e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Utility function used to setup an arm_compute::Conv3dInfo object from convolution3d descriptor. <a href="namespacearmnn.html#a855760e957668804d33c0691a802496e">More...</a><br /></td></tr>
<tr class="separator:a855760e957668804d33c0691a802496e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3f2c9ea2505a2cac1d05e17e989aff2b"><td class="memItemLeft" align="right" valign="top">arm_compute::Conv3dInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3f2c9ea2505a2cac1d05e17e989aff2b">ComputeConv3DInfo</a> (const <a class="el" href="structarmnn_1_1_convolution3d_queue_descriptor.html">armnn::Convolution3dQueueDescriptor</a> queueDescriptor, bool isFastMathEnabled)</td></tr>
<tr class="separator:a3f2c9ea2505a2cac1d05e17e989aff2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adf5a024ace0dbe2af2d5b1a1b9623771"><td class="memItemLeft" align="right" valign="top">arm_compute::PaddingMode&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#adf5a024ace0dbe2af2d5b1a1b9623771">ConvertPaddingModeToAcl</a> (const <a class="el" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91">PaddingMode</a> &amp;paddingMode)</td></tr>
<tr class="separator:adf5a024ace0dbe2af2d5b1a1b9623771"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a03ab984d93d0f240f31274499b72e6b0"><td class="memItemLeft" align="right" valign="top">arm_compute::ReductionOperation&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a03ab984d93d0f240f31274499b72e6b0">ConvertReductionOperationToAcl</a> (const <a class="el" href="structarmnn_1_1_reduce_descriptor.html">ReduceDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a03ab984d93d0f240f31274499b72e6b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9d43aa01b882d8776ab9403eea3cf779"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9d43aa01b882d8776ab9403eea3cf779">ComputeReductionTensorShape</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> &amp;input, const std::vector&lt; uint32_t &gt; &amp;vAxis, const bool keepDims)</td></tr>
<tr class="memdesc:a9d43aa01b882d8776ab9403eea3cf779"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function to compute the output tensor shape based on the axes and if keepDims is set. <a href="namespacearmnn.html#a9d43aa01b882d8776ab9403eea3cf779">More...</a><br /></td></tr>
<tr class="separator:a9d43aa01b882d8776ab9403eea3cf779"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ada0fb4f79f3673b4ebd94a42175bf78d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_optional.html">armnn::Optional</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ada0fb4f79f3673b4ebd94a42175bf78d">GetBiasTypeFromWeightsType</a> (<a class="el" href="classarmnn_1_1_optional.html">armnn::Optional</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> &gt; weightsType)</td></tr>
<tr class="separator:ada0fb4f79f3673b4ebd94a42175bf78d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa588395c0d3b0074091b497835aaa309"><td class="memTemplParams" colspan="2">template&lt;typename F &gt; </td></tr>
<tr class="memitem:aa588395c0d3b0074091b497835aaa309"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa588395c0d3b0074091b497835aaa309">CheckSupportRule</a> (F rule, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt; reasonIfUnsupported, const char *reason)</td></tr>
<tr class="separator:aa588395c0d3b0074091b497835aaa309"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5980f7b42f4df041efebdc6ae242f686"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a5980f7b42f4df041efebdc6ae242f686"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5980f7b42f4df041efebdc6ae242f686">AllTypesAreEqualImpl</a> (T)</td></tr>
<tr class="separator:a5980f7b42f4df041efebdc6ae242f686"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2a0bcfb4df0a03357b4cbb8d9e89a3da"><td class="memTemplParams" colspan="2">template&lt;typename T , typename... Rest&gt; </td></tr>
<tr class="memitem:a2a0bcfb4df0a03357b4cbb8d9e89a3da"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2a0bcfb4df0a03357b4cbb8d9e89a3da">AllTypesAreEqualImpl</a> (T t1, T t2, Rest... rest)</td></tr>
<tr class="separator:a2a0bcfb4df0a03357b4cbb8d9e89a3da"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7c8192a429fc68220e4fc308062a02ba"><td class="memItemLeft" align="right" valign="top">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_memory_optimizer_strategy.html">IMemoryOptimizerStrategy</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7c8192a429fc68220e4fc308062a02ba">GetMemoryOptimizerStrategy</a> (const std::string &amp;strategyName)</td></tr>
<tr class="separator:a7c8192a429fc68220e4fc308062a02ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aedc54936fd5ebb2d5697c8001532401a"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; std::string &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aedc54936fd5ebb2d5697c8001532401a">GetMemoryOptimizerStrategyNames</a> ()</td></tr>
<tr class="separator:aedc54936fd5ebb2d5697c8001532401a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab6b4f5f3473b0ce4b241d454f8cbdd26"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab6b4f5f3473b0ce4b241d454f8cbdd26">IsNCHW</a> (<a class="el" href="classarmnn_1_1_layer.html">armnn::Layer</a> &amp;layer)</td></tr>
<tr class="separator:ab6b4f5f3473b0ce4b241d454f8cbdd26"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5afd10e5e84ebf5cb8cfc8707492eda7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5afd10e5e84ebf5cb8cfc8707492eda7">ReportUntouchedLayers</a> (<a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;optimizationViews, std::map&lt; <a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>, <a class="el" href="classarmnn_1_1_layer.html">Layer</a> * &gt; untouched)</td></tr>
<tr class="separator:a5afd10e5e84ebf5cb8cfc8707492eda7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae4b69405416c09ee6878e01d27c9450b"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
<tr class="memitem:ae4b69405416c09ee6878e01d27c9450b"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae4b69405416c09ee6878e01d27c9450b">FoldPadLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *replacementLayer, <a class="el" href="classarmnn_1_1_pad_layer.html">PadLayer</a> *padLayer)</td></tr>
<tr class="separator:ae4b69405416c09ee6878e01d27c9450b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac5089a2ee61f22570982e7a56588365a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac5089a2ee61f22570982e7a56588365a">ConnectedToLayerWithNCHW</a> (<a class="el" href="classarmnn_1_1_layer.html">Layer</a> *baseLayer)</td></tr>
<tr class="memdesc:ac5089a2ee61f22570982e7a56588365a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if the <a class="el" href="classarmnn_1_1_layer.html">Layer</a> is connected to any <a class="el" href="classarmnn_1_1_layer.html">Layer</a> that has an NCHW layout. <a href="namespacearmnn.html#ac5089a2ee61f22570982e7a56588365a">More...</a><br /></td></tr>
<tr class="separator:ac5089a2ee61f22570982e7a56588365a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4f89a6ce848b8d9787761cdd1dbb751a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4f89a6ce848b8d9787761cdd1dbb751a">ConnectedToLayerType</a> (<a class="el" href="classarmnn_1_1_layer.html">Layer</a> *baseLayer, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> layerType, unsigned int dimSize=0)</td></tr>
<tr class="memdesc:a4f89a6ce848b8d9787761cdd1dbb751a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks the <a class="el" href="classarmnn_1_1_layer.html">Layer</a>'s Connections to see if it's connected to a <a class="el" href="classarmnn_1_1_layer.html">Layer</a> with the provided layerType. <a href="namespacearmnn.html#a4f89a6ce848b8d9787761cdd1dbb751a">More...</a><br /></td></tr>
<tr class="separator:a4f89a6ce848b8d9787761cdd1dbb751a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae756568a7f2c58778bb6d759d2bd38db"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae756568a7f2c58778bb6d759d2bd38db">RemoveReshapeLayer</a> (<a class="el" href="classarmnn_1_1_reshape_layer.html">ReshapeLayer</a> *baseLayer, std::map&lt; <a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>, <a class="el" href="classarmnn_1_1_layer.html">Layer</a> * &gt; &amp;untouched, <a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;optimizationViews)</td></tr>
<tr class="separator:ae756568a7f2c58778bb6d759d2bd38db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0a49066b56fc3bfe44478601c31e2fc0"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
<tr class="memitem:a0a49066b56fc3bfe44478601c31e2fc0"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0a49066b56fc3bfe44478601c31e2fc0">FoldPadIntoAveragePool2d</a> (<a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="classarmnn_1_1_pooling2d_layer.html">Pooling2dLayer</a> *baseLayer, <a class="el" href="structarmnn_1_1_pooling2d_descriptor.html">Pooling2dDescriptor</a> &amp;poolDescriptor, <a class="el" href="classarmnn_1_1_pad_layer.html">PadLayer</a> *padLayer)</td></tr>
<tr class="separator:a0a49066b56fc3bfe44478601c31e2fc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aefc7bff008047b9f763c2cf82c1a0fcb"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aefc7bff008047b9f763c2cf82c1a0fcb">IsSequenceLayerType</a> (<a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;layer, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> type)</td></tr>
<tr class="separator:aefc7bff008047b9f763c2cf82c1a0fcb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a336dd839b81ad6a1d803c306b40f9af2"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a336dd839b81ad6a1d803c306b40f9af2">IsSequenceLayerType</a> (<a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;layer, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047">BinaryOperation</a> type)</td></tr>
<tr class="separator:a336dd839b81ad6a1d803c306b40f9af2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa4452464859a025825afea5672640186"><td class="memTemplParams" colspan="2">template&lt;typename TYPE &gt; </td></tr>
<tr class="memitem:aa4452464859a025825afea5672640186"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa4452464859a025825afea5672640186">IsLayerSequence</a> (<a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;currentLayer, TYPE first, TYPE second, TYPE third, <a class="el" href="classarmnn_1_1_layer.html">Layer</a> *layerList[4], bool handleValidActivates, const std::vector&lt; <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a> &gt; &amp;validActivates)</td></tr>
<tr class="separator:aa4452464859a025825afea5672640186"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aafe6180ef80d9f334f3a3ba9cc0db35d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_const_tensor.html">armnn::ConstTensor</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aafe6180ef80d9f334f3a3ba9cc0db35d">PermuteTensor</a> (const <a class="el" href="classarmnn_1_1_const_tensor_handle.html">ConstTensorHandle</a> *tensor, const <a class="el" href="classarmnn_1_1_permutation_vector.html">PermutationVector</a> &amp;permutationVector, void *permuteBuffer)</td></tr>
<tr class="separator:aafe6180ef80d9f334f3a3ba9cc0db35d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3170fdd696155a247ecd81d445c0e2e1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3170fdd696155a247ecd81d445c0e2e1">ReshapeWeightsForAcl</a> (<a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;weightInfo, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout)</td></tr>
<tr class="separator:a3170fdd696155a247ecd81d445c0e2e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a52b301fd3adce20b51c4482cb52f1a38"><td class="memTemplParams" colspan="2">template&lt;typename DataType &gt; </td></tr>
<tr class="memitem:a52b301fd3adce20b51c4482cb52f1a38"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_const_tensor.html">ConstTensor</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a52b301fd3adce20b51c4482cb52f1a38">ReorderWeightChannelsForAcl</a> (const <a class="el" href="classarmnn_1_1_const_tensor.html">ConstTensor</a> &amp;weightHandle, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout, void *permuteBuffer)</td></tr>
<tr class="separator:a52b301fd3adce20b51c4482cb52f1a38"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1e8288eac7e909fdb58b6113d816763a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1e8288eac7e909fdb58b6113d816763a">ConvertWeightTensorInfoFromArmnnToAcl</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;weightInfo, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout)</td></tr>
<tr class="separator:a1e8288eac7e909fdb58b6113d816763a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af35f79341ec6c10a8bd4c8caf0585ffb"><td class="memItemLeft" align="right" valign="top">std::tuple&lt; <a class="el" href="classarmnn_1_1_const_tensor.html">ConstTensor</a>, unsigned int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af35f79341ec6c10a8bd4c8caf0585ffb">Convert1HWOTensorToAcl</a> (const <a class="el" href="classarmnn_1_1_const_tensor_handle.html">ConstTensorHandle</a> *weightTensor, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout, void *permuteBuffer)</td></tr>
<tr class="memdesc:af35f79341ec6c10a8bd4c8caf0585ffb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Weights for depthwise have a datalayout of [1,H,W,O] = [1,H,W,I*M] This function coverts a ConstCpuTensorHandle from [1,H,W,I*M] to [1,I*M,H,W] (if NCHW) or keeps it at [1,H,W,I*M] (if NHWC) as required by the compute library. <a href="namespacearmnn.html#af35f79341ec6c10a8bd4c8caf0585ffb">More...</a><br /></td></tr>
<tr class="separator:af35f79341ec6c10a8bd4c8caf0585ffb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac4aa9e41515b354234645f115c49de32"><td class="memItemLeft" align="right" valign="top">std::tuple&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a>, unsigned int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac4aa9e41515b354234645f115c49de32">Convert1HWOTensorInfoToAcl</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;weightInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout)</td></tr>
<tr class="memdesc:ac4aa9e41515b354234645f115c49de32"><td class="mdescLeft">&#160;</td><td class="mdescRight">Weights for depthwise have a datalayout of [1,H,W,O] = [1,H,W,I*M] This function coverts a <a class="el" href="classarmnn_1_1_tensor_info.html">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.html#ac4aa9e41515b354234645f115c49de32">More...</a><br /></td></tr>
<tr class="separator:ac4aa9e41515b354234645f115c49de32"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa22a82f5240a0eb0d61135345080aa2d"><td class="memItemLeft" align="right" valign="top">std::tuple&lt; <a class="el" href="classarmnn_1_1_const_tensor.html">ConstTensor</a>, unsigned int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa22a82f5240a0eb0d61135345080aa2d">Convert1HWOtoMIHW</a> (const <a class="el" href="classarmnn_1_1_const_tensor_handle.html">ConstTensorHandle</a> *weightTensor, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> &amp;dataLayout, void *permuteBuffer)</td></tr>
<tr class="memdesc:aa22a82f5240a0eb0d61135345080aa2d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts a (weights) tensor from [1, H, W, I*M] = [1, H, W, O] to [M, I, H, W]. <a href="namespacearmnn.html#aa22a82f5240a0eb0d61135345080aa2d">More...</a><br /></td></tr>
<tr class="separator:aa22a82f5240a0eb0d61135345080aa2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8ca9f249dc67c111b8234b2c78d672cd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_const_tensor.html">armnn::ConstTensor</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8ca9f249dc67c111b8234b2c78d672cd">ConvertWeightTensorFromArmnnToAcl</a> (const <a class="el" href="classarmnn_1_1_const_tensor_handle.html">ConstTensorHandle</a> *weightTensor, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout, void *permuteBuffer)</td></tr>
<tr class="separator:a8ca9f249dc67c111b8234b2c78d672cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad69ffa576a596b9eb20ab6a41420c541"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad69ffa576a596b9eb20ab6a41420c541">ConvertMaskToACLFormat</a> (int32_t mask, int32_t numDim)</td></tr>
<tr class="separator:ad69ffa576a596b9eb20ab6a41420c541"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac40d3e4035af5fbe68d9e126a8d6367c"><td class="memItemLeft" align="right" valign="top">std::map&lt; std::string, unsigned int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac40d3e4035af5fbe68d9e126a8d6367c">CalculateGatherNdKeyIndices</a> (<a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> inputInfo0, <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> inputInfo1)</td></tr>
<tr class="memdesc:ac40d3e4035af5fbe68d9e126a8d6367c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates the key index values needed for GatherNd: N, ND, K, W, C (N is always 1) <a href="namespacearmnn.html#ac40d3e4035af5fbe68d9e126a8d6367c">More...</a><br /></td></tr>
<tr class="separator:ac40d3e4035af5fbe68d9e126a8d6367c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15e2ba06d2ecd7ff6013118838e5d1be"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_permutation_vector.html">armnn::PermutationVector</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a15e2ba06d2ecd7ff6013118838e5d1be">GeneratePermutationVectorOnLastTwoDimensions</a> (unsigned int rank)</td></tr>
<tr class="memdesc:a15e2ba06d2ecd7ff6013118838e5d1be"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generates a permutation vector of size rank that permutes the 2 most right dimensions. <a href="namespacearmnn.html#a15e2ba06d2ecd7ff6013118838e5d1be">More...</a><br /></td></tr>
<tr class="separator:a15e2ba06d2ecd7ff6013118838e5d1be"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2f68926d52d1aa3590bd467e041def05"><td class="memItemLeft" align="right" valign="top">std::set&lt; unsigned int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2f68926d52d1aa3590bd467e041def05">ComputeSplitAxis</a> (const <a class="el" href="namespacearmnn.html#a60291543fe872b795e71e05bcd835fd1">armnn::SplitterDescriptor</a> &amp;desc, const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;input)</td></tr>
<tr class="memdesc:a2f68926d52d1aa3590bd467e041def05"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates the axis values for split operation. <a href="namespacearmnn.html#a2f68926d52d1aa3590bd467e041def05">More...</a><br /></td></tr>
<tr class="separator:a2f68926d52d1aa3590bd467e041def05"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a92c91193007aa49f4732d6dba5397f8d"><td class="memTemplParams" colspan="2">template&lt;typename CopyFunc &gt; </td></tr>
<tr class="memitem:a92c91193007aa49f4732d6dba5397f8d"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a92c91193007aa49f4732d6dba5397f8d">CopyTensorContentsGeneric</a> (const <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *srcTensor, <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *dstTensor, CopyFunc copy)</td></tr>
<tr class="separator:a92c91193007aa49f4732d6dba5397f8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a844d7fa4dde82e1c6b0606e1c68890bb"><td class="memTemplParams" colspan="2">template&lt;typename SrcTensorHandleType , typename DstTensorHandleType , typename DescriptorType &gt; </td></tr>
<tr class="memitem:a844d7fa4dde82e1c6b0606e1c68890bb"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a844d7fa4dde82e1c6b0606e1c68890bb">GatherTensorHandlePairs</a> (const DescriptorType &amp;descriptor, std::vector&lt; std::pair&lt; SrcTensorHandleType *, DstTensorHandleType * &gt;&gt; &amp;tensorHandlePairs)</td></tr>
<tr class="separator:a844d7fa4dde82e1c6b0606e1c68890bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adfe10e7086e3e3b98927cf84aee03dd0"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#adfe10e7086e3e3b98927cf84aee03dd0">ClBackendId</a> ()</td></tr>
<tr class="separator:adfe10e7086e3e3b98927cf84aee03dd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac845f99ae84c2fcf016b676769da7c51"><td class="memItemLeft" align="right" valign="top">flatbuffers::Offset&lt; ClContext &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac845f99ae84c2fcf016b676769da7c51">CreateClContext</a> (flatbuffers::FlatBufferBuilder &amp;_fbb, flatbuffers::Offset&lt; flatbuffers::Vector&lt; flatbuffers::Offset&lt; armnn::Program &gt;&gt;&gt; programs=0)</td></tr>
<tr class="separator:ac845f99ae84c2fcf016b676769da7c51"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e0f170f651bf2e8d101b923b33efe5e"><td class="memItemLeft" align="right" valign="top">flatbuffers::Offset&lt; ClContext &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8e0f170f651bf2e8d101b923b33efe5e">CreateClContextDirect</a> (flatbuffers::FlatBufferBuilder &amp;_fbb, const std::vector&lt; flatbuffers::Offset&lt; armnn::Program &gt;&gt; *programs=nullptr)</td></tr>
<tr class="separator:a8e0f170f651bf2e8d101b923b33efe5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0f37510801ba4f2500e4e9558c81f93c"><td class="memItemLeft" align="right" valign="top">flatbuffers::Offset&lt; Program &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0f37510801ba4f2500e4e9558c81f93c">CreateProgram</a> (flatbuffers::FlatBufferBuilder &amp;_fbb, flatbuffers::Offset&lt; flatbuffers::String &gt; name=0, flatbuffers::Offset&lt; flatbuffers::Vector&lt; uint8_t &gt;&gt; binary=0)</td></tr>
<tr class="separator:a0f37510801ba4f2500e4e9558c81f93c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6c31acdf17825e7ec0ec0da7e129cb69"><td class="memItemLeft" align="right" valign="top">flatbuffers::Offset&lt; Program &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6c31acdf17825e7ec0ec0da7e129cb69">CreateProgramDirect</a> (flatbuffers::FlatBufferBuilder &amp;_fbb, const char *name=nullptr, const std::vector&lt; uint8_t &gt; *binary=nullptr)</td></tr>
<tr class="separator:a6c31acdf17825e7ec0ec0da7e129cb69"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac3dec65fab0e6a1a6fef52e6321b4993"><td class="memItemLeft" align="right" valign="top">const armnn::ClContext *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac3dec65fab0e6a1a6fef52e6321b4993">GetClContext</a> (const void *buf)</td></tr>
<tr class="separator:ac3dec65fab0e6a1a6fef52e6321b4993"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab4c4804c2b7c7b4b25a8eca3272e12d4"><td class="memItemLeft" align="right" valign="top">const armnn::ClContext *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab4c4804c2b7c7b4b25a8eca3272e12d4">GetSizePrefixedClContext</a> (const void *buf)</td></tr>
<tr class="separator:ab4c4804c2b7c7b4b25a8eca3272e12d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab672391d036102ab6864bb181d4844d5"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a> ()</td></tr>
<tr class="separator:ab672391d036102ab6864bb181d4844d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a744cd226e45f7c948e0533abbd166b1f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a744cd226e45f7c948e0533abbd166b1f">ClContextBufferHasIdentifier</a> (const void *buf)</td></tr>
<tr class="separator:a744cd226e45f7c948e0533abbd166b1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acda1e285d7be5f9b456d98bd29be4591"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#acda1e285d7be5f9b456d98bd29be4591">VerifyClContextBuffer</a> (flatbuffers::Verifier &amp;verifier)</td></tr>
<tr class="separator:acda1e285d7be5f9b456d98bd29be4591"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acc7af054e783ad1bf6dce0111366d64c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#acc7af054e783ad1bf6dce0111366d64c">VerifySizePrefixedClContextBuffer</a> (flatbuffers::Verifier &amp;verifier)</td></tr>
<tr class="separator:acc7af054e783ad1bf6dce0111366d64c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab4e35e40c433e5fb0a0b89ca7c89988d"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab4e35e40c433e5fb0a0b89ca7c89988d">ClContextExtension</a> ()</td></tr>
<tr class="separator:ab4e35e40c433e5fb0a0b89ca7c89988d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a122d3124b7b19958eb053ffb9ace0dac"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a122d3124b7b19958eb053ffb9ace0dac">FinishClContextBuffer</a> (flatbuffers::FlatBufferBuilder &amp;fbb, flatbuffers::Offset&lt; armnn::ClContext &gt; root)</td></tr>
<tr class="separator:a122d3124b7b19958eb053ffb9ace0dac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4761eadb938ae8e1322d60ac319276d2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4761eadb938ae8e1322d60ac319276d2">FinishSizePrefixedClContextBuffer</a> (flatbuffers::FlatBufferBuilder &amp;fbb, flatbuffers::Offset&lt; armnn::ClContext &gt; root)</td></tr>
<tr class="separator:a4761eadb938ae8e1322d60ac319276d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab1545eea543ad790732f0722ce35cc80"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab1545eea543ad790732f0722ce35cc80">ClImportTensorHandleFactoryId</a> ()</td></tr>
<tr class="separator:ab1545eea543ad790732f0722ce35cc80"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac86fc56b9a27576bfe930a7012a402d5"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac86fc56b9a27576bfe930a7012a402d5">ClTensorHandleFactoryId</a> ()</td></tr>
<tr class="separator:ac86fc56b9a27576bfe930a7012a402d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1391582cd6e145b67c98f3410667968e"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1391582cd6e145b67c98f3410667968e">ClAbsWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a1391582cd6e145b67c98f3410667968e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a42ef3cee193102dc7755193579209cca"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a42ef3cee193102dc7755193579209cca">ClActivationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a42ef3cee193102dc7755193579209cca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a24fc3e8e29d3fa56cc6b2d81e48625d1"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a24fc3e8e29d3fa56cc6b2d81e48625d1">ClAdditionValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:a24fc3e8e29d3fa56cc6b2d81e48625d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab80423b306d8e0436b9a316922911d4d"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab80423b306d8e0436b9a316922911d4d">ClArgMinMaxWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_arg_min_max_descriptor.html">ArgMinMaxDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:ab80423b306d8e0436b9a316922911d4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a21911dfddb6d7787c7afcdc5fc25d4a7"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a21911dfddb6d7787c7afcdc5fc25d4a7">ClBatchMatMulValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfoX, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfoY, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo, const <a class="el" href="structarmnn_1_1_batch_mat_mul_descriptor.html">BatchMatMulDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:a21911dfddb6d7787c7afcdc5fc25d4a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a29bd65c1ec4ff9f75b636ec8e7b038be"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a29bd65c1ec4ff9f75b636ec8e7b038be">ClBatchNormalizationValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;mean, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;var, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;beta, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;gamma, const <a class="el" href="structarmnn_1_1_batch_normalization_descriptor.html">BatchNormalizationDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:a29bd65c1ec4ff9f75b636ec8e7b038be"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae87476befb36d9cc4fb926337ba65b5d"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae87476befb36d9cc4fb926337ba65b5d">ClBatchToSpaceNdWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_batch_to_space_nd_descriptor.html">BatchToSpaceNdDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:ae87476befb36d9cc4fb926337ba65b5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7f82264f26183ae3c66390e33be14ec6"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7f82264f26183ae3c66390e33be14ec6">ClCastValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a7f82264f26183ae3c66390e33be14ec6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a02e646180897aca9fcbc02d16efdd784"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a02e646180897aca9fcbc02d16efdd784">ClChannelShuffleValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_channel_shuffle_descriptor.html">ChannelShuffleDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a02e646180897aca9fcbc02d16efdd784"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af6f6476c5d1c4c85153020f5229ebd14"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af6f6476c5d1c4c85153020f5229ebd14">ClComparisonWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_comparison_descriptor.html">ComparisonDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:af6f6476c5d1c4c85153020f5229ebd14"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0784b1fdac2844c5d6f331ab6e9af547"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0784b1fdac2844c5d6f331ab6e9af547">ClConcatWorkloadValidate</a> (const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> * &gt; &amp;inputs, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_origins_descriptor.html">OriginsDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a0784b1fdac2844c5d6f331ab6e9af547"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2f5c2e8794174361f2308f4a0d3f9c73"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2f5c2e8794174361f2308f4a0d3f9c73">ClConstantWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a2f5c2e8794174361f2308f4a0d3f9c73"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a46efae0191388fd33db4e95c5d79e2be"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a46efae0191388fd33db4e95c5d79e2be">ClConvertFp16ToFp32WorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a46efae0191388fd33db4e95c5d79e2be"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a37f6946bfb7a9c7d64881b7a2e13945f"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a37f6946bfb7a9c7d64881b7a2e13945f">ClConvertFp32ToFp16WorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a37f6946bfb7a9c7d64881b7a2e13945f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a61cf0886d4c1a6e24c101a57ccb2ec31"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a61cf0886d4c1a6e24c101a57ccb2ec31">ClConvolution2dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_convolution2d_descriptor.html">Convolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;biases, bool isFastMathEnabled, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:a61cf0886d4c1a6e24c101a57ccb2ec31"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae387b3587bcce82eb33623b300097a8c"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae387b3587bcce82eb33623b300097a8c">ClConvolution3dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_convolution3d_descriptor.html">Convolution3dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;biases, bool isFastMathEnabled, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:ae387b3587bcce82eb33623b300097a8c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab3624c723d9a0ec93722b19060b76115"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab3624c723d9a0ec93722b19060b76115">ClDepthToSpaceWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="namespacearmnn.html#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:ab3624c723d9a0ec93722b19060b76115"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa6670a2fcf9f365da69f3f3092dfa64b"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa6670a2fcf9f365da69f3f3092dfa64b">ClDepthwiseConvolutionWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html">DepthwiseConvolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;biases, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:aa6670a2fcf9f365da69f3f3092dfa64b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a75045734c29d7d6635342c05adbc151b"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a75045734c29d7d6635342c05adbc151b">ClDequantizeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a75045734c29d7d6635342c05adbc151b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0591ff61ac269187164ea23713d33852"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0591ff61ac269187164ea23713d33852">ClDivisionWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:a0591ff61ac269187164ea23713d33852"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a374539d87fe79db6ab505524a0830d1f"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a374539d87fe79db6ab505524a0830d1f">ClElementwiseBinaryValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_elementwise_binary_descriptor.html">ElementwiseBinaryDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:a374539d87fe79db6ab505524a0830d1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9831849c09391e90e50de46e2ee16403"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9831849c09391e90e50de46e2ee16403">ClExpWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a9831849c09391e90e50de46e2ee16403"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8874961260f35da85229554f92e16ca9"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8874961260f35da85229554f92e16ca9">ClFloorWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a8874961260f35da85229554f92e16ca9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a18c7eef8533ca0acbbe081cd1a1fec98"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a18c7eef8533ca0acbbe081cd1a1fec98">ClFullyConnectedWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;biases, const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.html">FullyConnectedDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:a18c7eef8533ca0acbbe081cd1a1fec98"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adc7c6ed4375eb58ea8fa20d6ec704a27"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#adc7c6ed4375eb58ea8fa20d6ec704a27">ClGatherNdWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;paramsInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;indicesInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo)</td></tr>
<tr class="separator:adc7c6ed4375eb58ea8fa20d6ec704a27"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aff9e3b78a938c14a4420ce6365b997fb"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aff9e3b78a938c14a4420ce6365b997fb">ClGatherWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;indices, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_gather_descriptor.html">GatherDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:aff9e3b78a938c14a4420ce6365b997fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79d362f0c6e04d51807e0d81b5b05f3a"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a79d362f0c6e04d51807e0d81b5b05f3a">ClInstanceNormalizationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_instance_normalization_descriptor.html">InstanceNormalizationDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a79d362f0c6e04d51807e0d81b5b05f3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aef334cdb24000c330f4d2e5f1b384784"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aef334cdb24000c330f4d2e5f1b384784">ClL2NormalizationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_l2_normalization_descriptor.html">L2NormalizationDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:aef334cdb24000c330f4d2e5f1b384784"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7900acef495ac8033a08d3ed74f06970"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7900acef495ac8033a08d3ed74f06970">ClLogicalAndWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a7900acef495ac8033a08d3ed74f06970"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ace776a194a715c709136a9966ada1a48"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ace776a194a715c709136a9966ada1a48">ClLogicalNotWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:ace776a194a715c709136a9966ada1a48"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a89391e63f7a679b023e6bd1798186db6"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a89391e63f7a679b023e6bd1798186db6">ClLogicalOrWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a89391e63f7a679b023e6bd1798186db6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7071f5d6693d3014ddcb34c886ffc734"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7071f5d6693d3014ddcb34c886ffc734">ClLogSoftmaxWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="namespacearmnn.html#ac14705405cbcdd580df613de6766fe65">LogSoftmaxDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a7071f5d6693d3014ddcb34c886ffc734"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a64806be3c31d35b75546da7c6b6b46d0"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a64806be3c31d35b75546da7c6b6b46d0">ClLogWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a64806be3c31d35b75546da7c6b6b46d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a90ab88fe4c7aa9466c4653404a6b2213"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a90ab88fe4c7aa9466c4653404a6b2213">ClLstmFloatWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;cellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;scratchBuffer, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_lstm_descriptor.html">LstmDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_lstm_input_params_info.html">LstmInputParamsInfo</a> &amp;paramsInfo)</td></tr>
<tr class="separator:a90ab88fe4c7aa9466c4653404a6b2213"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a553706c6338ffc52b0d916859f642587"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a553706c6338ffc52b0d916859f642587">ClMaximumWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a553706c6338ffc52b0d916859f642587"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a048a8ea8b1b39343a73ca7458024ea54"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a048a8ea8b1b39343a73ca7458024ea54">ClMeanValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_mean_descriptor.html">MeanDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a048a8ea8b1b39343a73ca7458024ea54"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8c04c8e796a4fbec706df42ed9c27e4e"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8c04c8e796a4fbec706df42ed9c27e4e">ClMinimumWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a8c04c8e796a4fbec706df42ed9c27e4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9638165cb6c1baae3b2b5fd9f0f75201"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9638165cb6c1baae3b2b5fd9f0f75201">ClMultiplicationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:a9638165cb6c1baae3b2b5fd9f0f75201"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a66a3a6c05b38e48508bbbb3f32023ab7"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a66a3a6c05b38e48508bbbb3f32023ab7">ClNegWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a66a3a6c05b38e48508bbbb3f32023ab7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a144c2e243a255715f309999077ed1792"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a144c2e243a255715f309999077ed1792">ClNormalizationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_normalization_descriptor.html">NormalizationDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a144c2e243a255715f309999077ed1792"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adcf7b7d939bac1cfaeb333c7b3175bb8"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#adcf7b7d939bac1cfaeb333c7b3175bb8">ClPadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_pad_descriptor.html">PadDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:adcf7b7d939bac1cfaeb333c7b3175bb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a26c25df9e2271333ab4d4ef71db41dca"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a26c25df9e2271333ab4d4ef71db41dca">ClPermuteWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_permute_descriptor.html">PermuteDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a26c25df9e2271333ab4d4ef71db41dca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8a21bb33f7f054ce7b48a8c7df9e6d4a"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8a21bb33f7f054ce7b48a8c7df9e6d4a">ClPooling2dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.html">Pooling2dDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a8a21bb33f7f054ce7b48a8c7df9e6d4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a85776d92e056832a524c6f2cf4741ced"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a85776d92e056832a524c6f2cf4741ced">ClPooling3dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_pooling3d_descriptor.html">Pooling3dDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a85776d92e056832a524c6f2cf4741ced"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae58d1f4437a779274037bc86efac9e26"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae58d1f4437a779274037bc86efac9e26">ClPreluWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;alpha, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:ae58d1f4437a779274037bc86efac9e26"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8cdb508cb0ebc06e39dc1661815d73b0"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8cdb508cb0ebc06e39dc1661815d73b0">ClQLstmWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;cellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_q_lstm_descriptor.html">QLstmDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_lstm_input_params_info.html">LstmInputParamsInfo</a> &amp;paramsInfo)</td></tr>
<tr class="separator:a8cdb508cb0ebc06e39dc1661815d73b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5fb7fe07abfb2373103d842b47a24726"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5fb7fe07abfb2373103d842b47a24726">ClQuantizedLstmWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;previousCellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;previousOutputIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.html">QuantizedLstmInputParamsInfo</a> &amp;paramsInfo)</td></tr>
<tr class="separator:a5fb7fe07abfb2373103d842b47a24726"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9c1b478e30a1e8a4ecac874cf15f13d4"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9c1b478e30a1e8a4ecac874cf15f13d4">ClQuantizeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a9c1b478e30a1e8a4ecac874cf15f13d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4c42dfd9db4a47e470b5800bb11a8374"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4c42dfd9db4a47e470b5800bb11a8374">ClReduceWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_reduce_descriptor.html">ReduceDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a4c42dfd9db4a47e470b5800bb11a8374"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af5bb7a834a74983cbbc249785d0c392b"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af5bb7a834a74983cbbc249785d0c392b">ClReshapeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:af5bb7a834a74983cbbc249785d0c392b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a95b187d3c6b7b46f4fbdc60be69fc02c"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a95b187d3c6b7b46f4fbdc60be69fc02c">ClResizeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_resize_descriptor.html">ResizeDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a95b187d3c6b7b46f4fbdc60be69fc02c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a71d44017e7d06987e1206a26d9ec09ea"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a71d44017e7d06987e1206a26d9ec09ea">ClReverseV2WorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;axis, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a71d44017e7d06987e1206a26d9ec09ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3f6f9f0d3567ae04b49ea88727845900"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3f6f9f0d3567ae04b49ea88727845900">ClRsqrtWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a3f6f9f0d3567ae04b49ea88727845900"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49d6ee4e08176ca6afcc0e53f61e8075"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a49d6ee4e08176ca6afcc0e53f61e8075">ClScatterNdWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;indicesInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;updatesInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo, const <a class="el" href="structarmnn_1_1_scatter_nd_descriptor.html">ScatterNdDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a49d6ee4e08176ca6afcc0e53f61e8075"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac5cd8464c73415025cb8c8f6ada74e15"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac5cd8464c73415025cb8c8f6ada74e15">ClSinWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:ac5cd8464c73415025cb8c8f6ada74e15"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6d85d2806d0a90140832ad8113c1d350"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6d85d2806d0a90140832ad8113c1d350">ClSliceWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_slice_descriptor.html">SliceDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a6d85d2806d0a90140832ad8113c1d350"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abc6f7e5fe77e5aed3f7842755dd34073"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abc6f7e5fe77e5aed3f7842755dd34073">ClSoftmaxWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_softmax_descriptor.html">SoftmaxDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:abc6f7e5fe77e5aed3f7842755dd34073"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a534b28fd4b345bbc938d055ff5b8970f"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a534b28fd4b345bbc938d055ff5b8970f">ClSpaceToBatchNdWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.html">SpaceToBatchNdDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a534b28fd4b345bbc938d055ff5b8970f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4fa3292a277dde3b46be6a44b2de9713"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4fa3292a277dde3b46be6a44b2de9713">ClSpaceToDepthWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.html">SpaceToDepthDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a4fa3292a277dde3b46be6a44b2de9713"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ac8a60f837b19b20987e4fd238ce0cd"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3ac8a60f837b19b20987e4fd238ce0cd">ClSplitterWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const std::vector&lt; std::reference_wrapper&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt;&gt; &amp;outputs, unsigned int splitAxis)</td></tr>
<tr class="separator:a3ac8a60f837b19b20987e4fd238ce0cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a34e66b74a990db4b29ea4f904c69d7d9"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a34e66b74a990db4b29ea4f904c69d7d9">ClSqrtWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a34e66b74a990db4b29ea4f904c69d7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a776783e716aa3dd5975c72696d0b7abb"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a776783e716aa3dd5975c72696d0b7abb">ClStackWorkloadValidate</a> (const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> * &gt; &amp;inputs, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_stack_descriptor.html">StackDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a776783e716aa3dd5975c72696d0b7abb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a157e0508f6d6d08e3ca4cf6c661242e6"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a157e0508f6d6d08e3ca4cf6c661242e6">ClStridedSliceWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.html">StridedSliceDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a157e0508f6d6d08e3ca4cf6c661242e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa9933f1d9de469ffba5ba0fcee769f8"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#afa9933f1d9de469ffba5ba0fcee769f8">ClSubtractionValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:afa9933f1d9de469ffba5ba0fcee769f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a44d0d727df44d696742871b343db5757"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a44d0d727df44d696742871b343db5757">ClTileWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_tile_descriptor.html">TileDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a44d0d727df44d696742871b343db5757"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a719ea81939d6a25f8636b52c59165d66"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a719ea81939d6a25f8636b52c59165d66">ClTransposeConvolution2dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.html">TransposeConvolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;biases)</td></tr>
<tr class="separator:a719ea81939d6a25f8636b52c59165d66"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1c3a39fbecb45be0bb15dd665c9be61d"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1c3a39fbecb45be0bb15dd665c9be61d">ClTransposeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_transpose_descriptor.html">TransposeDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a1c3a39fbecb45be0bb15dd665c9be61d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a096a87912dc4886d0ef6ed192daa5180"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a096a87912dc4886d0ef6ed192daa5180">ClUnidirectionalSequenceLstmFloatWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;cellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="namespacearmnn.html#ae6c5f1b51bd32133c4dcc632045d6b58">UnidirectionalSequenceLstmDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_lstm_input_params_info.html">LstmInputParamsInfo</a> &amp;paramsInfo)</td></tr>
<tr class="separator:a096a87912dc4886d0ef6ed192daa5180"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a63833af8e1986a93f86d15397b9062c2"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a63833af8e1986a93f86d15397b9062c2">GetConvolutionMethodString</a> (arm_compute::ConvolutionMethod &amp;convolutionMethod)</td></tr>
<tr class="separator:a63833af8e1986a93f86d15397b9062c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a80bf40fafb5d10cd4d2a27c515052e2e"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a80bf40fafb5d10cd4d2a27c515052e2e"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a80bf40fafb5d10cd4d2a27c515052e2e">CopyArmComputeClTensorData</a> (arm_compute::CLTensor &amp;dstTensor, const T *srcData)</td></tr>
<tr class="separator:a80bf40fafb5d10cd4d2a27c515052e2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a21850e0777395246bfd30d95f8ffdd31"><td class="memItemLeft" align="right" valign="top">auto&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a21850e0777395246bfd30d95f8ffdd31">SetClStridedSliceData</a> (const std::vector&lt; int &gt; &amp;m_begin, const std::vector&lt; int &gt; &amp;m_end, const std::vector&lt; int &gt; &amp;m_stride)</td></tr>
<tr class="separator:a21850e0777395246bfd30d95f8ffdd31"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae7c459566269bf22b16513d61865272b"><td class="memItemLeft" align="right" valign="top">auto&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae7c459566269bf22b16513d61865272b">SetClSliceData</a> (const std::vector&lt; unsigned int &gt; &amp;m_begin, const std::vector&lt; unsigned int &gt; &amp;m_size)</td></tr>
<tr class="separator:ae7c459566269bf22b16513d61865272b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9a8bd8184644cbdfcefe062087b8f048"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9a8bd8184644cbdfcefe062087b8f048">InitializeArmComputeClTensorData</a> (arm_compute::CLTensor &amp;clTensor, const <a class="el" href="classarmnn_1_1_const_tensor_handle.html">ConstTensorHandle</a> *handle)</td></tr>
<tr class="separator:a9a8bd8184644cbdfcefe062087b8f048"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a562616feb340f23dbad3d86eb8706218"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_runtime_exception.html">RuntimeException</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a562616feb340f23dbad3d86eb8706218">WrapClError</a> (const cl::Error &amp;clError, const <a class="el" href="structarmnn_1_1_check_location.html">CheckLocation</a> &amp;location)</td></tr>
<tr class="separator:a562616feb340f23dbad3d86eb8706218"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a52c299ca6a3884c609583a5a0663db80"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a52c299ca6a3884c609583a5a0663db80">RunClFunction</a> (arm_compute::IFunction &amp;function, const <a class="el" href="structarmnn_1_1_check_location.html">CheckLocation</a> &amp;location)</td></tr>
<tr class="separator:a52c299ca6a3884c609583a5a0663db80"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae9f37e0b5f15afd89a29788a319da9ec"><td class="memTemplParams" colspan="2">template&lt;typename DataType , typename PayloadType &gt; </td></tr>
<tr class="memitem:ae9f37e0b5f15afd89a29788a319da9ec"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae9f37e0b5f15afd89a29788a319da9ec">GetOutputTensorData</a> (unsigned int idx, const PayloadType &amp;data)</td></tr>
<tr class="separator:ae9f37e0b5f15afd89a29788a319da9ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7dacd5f6b52fd93bfd536976d27f8293"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a7dacd5f6b52fd93bfd536976d27f8293"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7dacd5f6b52fd93bfd536976d27f8293">DeleteAsType</a> (const void *const blob)</td></tr>
<tr class="separator:a7dacd5f6b52fd93bfd536976d27f8293"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3f6dfcc7396ea476f96658ae6cb02b54"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_subgraph_view.html#a5cc65e15002dbc33a5c8a7d6680e9a9d">SubgraphView::InputSlots</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3f6dfcc7396ea476f96658ae6cb02b54">CreateInputsFrom</a> (<a class="el" href="classarmnn_1_1_layer.html">Layer</a> *layer)</td></tr>
<tr class="separator:a3f6dfcc7396ea476f96658ae6cb02b54"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a047e95685b63fedaa1d2ebb3b9428ff5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_subgraph_view.html#a78293334750ec5279eb9c96d56deaf08">SubgraphView::OutputSlots</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a047e95685b63fedaa1d2ebb3b9428ff5">CreateOutputsFrom</a> (<a class="el" href="classarmnn_1_1_layer.html">Layer</a> *layer)</td></tr>
<tr class="separator:a047e95685b63fedaa1d2ebb3b9428ff5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ce134e586578a4c448a128f95b4d7af"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_subgraph_view.html#ad5fc1b5213dcb72c0d4ac9dfb46ef677">SubgraphView::SubgraphViewPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5ce134e586578a4c448a128f95b4d7af">CreateSubgraphViewFrom</a> (<a class="el" href="classarmnn_1_1_subgraph_view.html#a5cc65e15002dbc33a5c8a7d6680e9a9d">SubgraphView::InputSlots</a> &amp;&amp;inputs, <a class="el" href="classarmnn_1_1_subgraph_view.html#a78293334750ec5279eb9c96d56deaf08">SubgraphView::OutputSlots</a> &amp;&amp;outputs, <a class="el" href="classarmnn_1_1_subgraph_view.html#a74798938fdaeae75c8adfa4a7439e7f9">SubgraphView::Layers</a> &amp;&amp;layers)</td></tr>
<tr class="separator:a5ce134e586578a4c448a128f95b4d7af"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab912656f08118f8b81f8261b5e0dc3a9"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab912656f08118f8b81f8261b5e0dc3a9">GpuFsaBackendId</a> ()</td></tr>
<tr class="separator:ab912656f08118f8b81f8261b5e0dc3a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a78c4767bc9e09daae610861fd00007db"><td class="memTemplParams" colspan="2">template&lt;typename ... Args&gt; </td></tr>
<tr class="memitem:a78c4767bc9e09daae610861fd00007db"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a78c4767bc9e09daae610861fd00007db">IsGpuFsaBackendSupported</a> (<a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt; reasonIfUnsupported, Args... args)</td></tr>
<tr class="separator:a78c4767bc9e09daae610861fd00007db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a18fff586ab6caa7bc3adc16ccce650a4"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a18fff586ab6caa7bc3adc16ccce650a4">GpuFsaTensorHandleFactoryId</a> ()</td></tr>
<tr class="separator:a18fff586ab6caa7bc3adc16ccce650a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a44a0b2291c5e7a1e5b6c32f613ef52f6"><td class="memTemplParams" colspan="2">template&lt;DataType ArmnnType&gt; </td></tr>
<tr class="memitem:a44a0b2291c5e7a1e5b6c32f613ef52f6"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a44a0b2291c5e7a1e5b6c32f613ef52f6">IsDataType</a> (const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;info)</td></tr>
<tr class="separator:a44a0b2291c5e7a1e5b6c32f613ef52f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa8d17ff94651485b0aa4b58e1d4ef5b5"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa8d17ff94651485b0aa4b58e1d4ef5b5">GpuFsaActivationValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:aa8d17ff94651485b0aa4b58e1d4ef5b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a40f8d250a71183a6cd1b700b287fc32c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a40f8d250a71183a6cd1b700b287fc32c">GpuFsaActivationCreateOp</a> (<a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *blob, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a40f8d250a71183a6cd1b700b287fc32c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a47e56eb9bcbb170dddd202d770ed2cd8"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a47e56eb9bcbb170dddd202d770ed2cd8">GpuFsaBatchMatMulValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="structarmnn_1_1_batch_mat_mul_descriptor.html">BatchMatMulDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a47e56eb9bcbb170dddd202d770ed2cd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1334119d4ee3de23f273ee91aa256cbd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1334119d4ee3de23f273ee91aa256cbd">GpuFsaBatchMatMulCreateOp</a> (<a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *blob, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="structarmnn_1_1_batch_mat_mul_descriptor.html">BatchMatMulDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a1334119d4ee3de23f273ee91aa256cbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a10d20c479436685e213150471a4a395b"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a10d20c479436685e213150471a4a395b">GpuFsaCastValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a10d20c479436685e213150471a4a395b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa2889978c1d194097838a2a0e671da60"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa2889978c1d194097838a2a0e671da60">GpuFsaCastCreateOp</a> (<a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *blob, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:aa2889978c1d194097838a2a0e671da60"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1c42ef784299460fb9db004dd395d5e1"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1c42ef784299460fb9db004dd395d5e1">GpuFsaConvolution2dValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="structarmnn_1_1_convolution2d_descriptor.html">Convolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;biases)</td></tr>
<tr class="separator:a1c42ef784299460fb9db004dd395d5e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab8a797269fd9db3b8832998f10ad9688"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab8a797269fd9db3b8832998f10ad9688">GpuFsaConvolution2dCreateOp</a> (<a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *blob, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="structarmnn_1_1_convolution2d_descriptor.html">Convolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;biases)</td></tr>
<tr class="separator:ab8a797269fd9db3b8832998f10ad9688"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af2016aed3575b7302e79c72830c23025"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af2016aed3575b7302e79c72830c23025">GpuFsaDepthwiseConvolution2dValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html">DepthwiseConvolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;biases)</td></tr>
<tr class="separator:af2016aed3575b7302e79c72830c23025"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5bdf4240a1fbda27b5fc84baba721781"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5bdf4240a1fbda27b5fc84baba721781">GpuFsaDepthwiseConvolution2dCreateOp</a> (<a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *blob, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html">DepthwiseConvolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;biases)</td></tr>
<tr class="separator:a5bdf4240a1fbda27b5fc84baba721781"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abd83d555d05a33057f9e80475522a631"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abd83d555d05a33057f9e80475522a631">GpuFsaElementwiseBinaryValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="structarmnn_1_1_elementwise_binary_descriptor.html">ElementwiseBinaryDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:abd83d555d05a33057f9e80475522a631"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab9fda8f44398cd4c531c9ac136f2a1bf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab9fda8f44398cd4c531c9ac136f2a1bf">GpuFsaElementwiseBinaryCreateOp</a> (<a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *blob, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="structarmnn_1_1_elementwise_binary_descriptor.html">ElementwiseBinaryDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:ab9fda8f44398cd4c531c9ac136f2a1bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7aff81ee45420f659fc30fa239ccc7c8"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7aff81ee45420f659fc30fa239ccc7c8">GpuFsaPooling2dValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.html">Pooling2dDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a7aff81ee45420f659fc30fa239ccc7c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abcce06cfe2568f392b05010579e83ae0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abcce06cfe2568f392b05010579e83ae0">GpuFsaPooling2dCreateOp</a> (<a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *blob, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.html">Pooling2dDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:abcce06cfe2568f392b05010579e83ae0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a75837bce7e31ee2315b702d16833c0ff"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a75837bce7e31ee2315b702d16833c0ff">GpuFsaReshapeValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="structarmnn_1_1_reshape_descriptor.html">ReshapeDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a75837bce7e31ee2315b702d16833c0ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4cc1900a15abbcc19a632e99c7c2120f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4cc1900a15abbcc19a632e99c7c2120f">GpuFsaReshapeCreateOp</a> (<a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *blob, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="structarmnn_1_1_reshape_descriptor.html">ReshapeDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a4cc1900a15abbcc19a632e99c7c2120f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7a26e6ad4d26aa9c32cfbd1d0d9110be"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7a26e6ad4d26aa9c32cfbd1d0d9110be">GpuFsaResizeValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="structarmnn_1_1_resize_descriptor.html">ResizeDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a7a26e6ad4d26aa9c32cfbd1d0d9110be"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a67faae0ae4e9d94069de01964d3fa0a0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a67faae0ae4e9d94069de01964d3fa0a0">GpuFsaResizeCreateOp</a> (<a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *blob, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="structarmnn_1_1_resize_descriptor.html">ResizeDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a67faae0ae4e9d94069de01964d3fa0a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad0672c046428b5b75115d2c91d0162eb"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad0672c046428b5b75115d2c91d0162eb">GpuFsaSoftmaxValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_softmax_descriptor.html">SoftmaxDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:ad0672c046428b5b75115d2c91d0162eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af347e46317f7427d35f87c6fae065bcb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af347e46317f7427d35f87c6fae065bcb">GpuFsaSoftmaxCreateOp</a> (<a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *blob, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_softmax_descriptor.html">SoftmaxDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:af347e46317f7427d35f87c6fae065bcb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5c31c4a0efe105a5f26067c8433968dd"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5c31c4a0efe105a5f26067c8433968dd">GpuFsaConstantWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a5c31c4a0efe105a5f26067c8433968dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a40eb0a9acd5d5111f916bfb29f75599b"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a40eb0a9acd5d5111f916bfb29f75599b">GpuFsaPreCompiledWorkloadValidate</a> (std::string *reasonIfUnsupported)</td></tr>
<tr class="separator:a40eb0a9acd5d5111f916bfb29f75599b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3a34a305e5187f3a3c67030d3bebbdb0"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3a34a305e5187f3a3c67030d3bebbdb0">NeonBackendId</a> ()</td></tr>
<tr class="separator:a3a34a305e5187f3a3c67030d3bebbdb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec9e2fd5ad76777cb83005a5ed7fe3de"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aec9e2fd5ad76777cb83005a5ed7fe3de">CollapseLeadingUnitDimensions</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;in, <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;out)</td></tr>
<tr class="separator:aec9e2fd5ad76777cb83005a5ed7fe3de"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aade64a959eb941bf19339e14d711a4b0"><td class="memTemplParams" colspan="2">template&lt;typename SlotListType &gt; </td></tr>
<tr class="memitem:aade64a959eb941bf19339e14d711a4b0"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aade64a959eb941bf19339e14d711a4b0">BuildAddMulAddSlotLists</a> (bool handleReLu, bool multipleOutputs, std::vector&lt; SlotListType &gt; &amp;inputLayersSlotLists, std::vector&lt; SlotListType &gt; &amp;outputLayersSlotLists)</td></tr>
<tr class="separator:aade64a959eb941bf19339e14d711a4b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a107fb425e884b38b3b8568334ae1ee3c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a107fb425e884b38b3b8568334ae1ee3c">GetFusedName</a> (<a class="el" href="classarmnn_1_1_layer.html">Layer</a> *layerList[4], std::string &amp;fusedName)</td></tr>
<tr class="separator:a107fb425e884b38b3b8568334ae1ee3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad03b7a578035532aa75c183bc708846"><td class="memTemplParams" colspan="2">template&lt;typename Type &gt; </td></tr>
<tr class="memitem:aad03b7a578035532aa75c183bc708846"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aad03b7a578035532aa75c183bc708846">BuildAddMulAddTensorInfoLists</a> (Type *layerList[4], unsigned int &amp;numInputs, unsigned int &amp;numOutputs, std::vector&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;inputInfos, std::vector&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;outputInfos, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&amp;activationDescriptor, bool &amp;fuseReLu)</td></tr>
<tr class="separator:aad03b7a578035532aa75c183bc708846"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8c69ca5000838df92215ca5053141cf6"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8c69ca5000838df92215ca5053141cf6">IsLayerTypeSupported</a> (const <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> &amp;type, const std::vector&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;infos, const <a class="el" href="structarmnn_1_1_base_descriptor.html">BaseDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="structarmnn_1_1_lstm_input_params_info.html">LstmInputParamsInfo</a> &gt; &amp;lstmParamsInfo, const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.html">QuantizedLstmInputParamsInfo</a> &gt; &amp;quantizedLstmParamsInfo, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt; reasonIfUnsupported, const <a class="el" href="classarmnn_1_1_neon_layer_support.html">NeonLayerSupport</a> &amp;support)</td></tr>
<tr class="separator:a8c69ca5000838df92215ca5053141cf6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad5d4888304a57fb22c4608dc5d94dc1"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aad5d4888304a57fb22c4608dc5d94dc1">NeonTensorHandleFactoryId</a> ()</td></tr>
<tr class="separator:aad5d4888304a57fb22c4608dc5d94dc1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afc773aec6f845adc0cc547ce475dfe3f"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#afc773aec6f845adc0cc547ce475dfe3f">NeonAbsWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:afc773aec6f845adc0cc547ce475dfe3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a46495807633a01d826851e1cb498f071"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a46495807633a01d826851e1cb498f071">NeonActivationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a46495807633a01d826851e1cb498f071"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1b03e82a1a53b686aedea3734b2fb957"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1b03e82a1a53b686aedea3734b2fb957">NeonAdditionWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:a1b03e82a1a53b686aedea3734b2fb957"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a61d1f39297fec6e3062e4047dc5f236e"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a61d1f39297fec6e3062e4047dc5f236e">NeonArgMinMaxWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_arg_min_max_descriptor.html">ArgMinMaxDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a61d1f39297fec6e3062e4047dc5f236e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a52cdeda888e3ecf0dbebb533ba0856f1"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a52cdeda888e3ecf0dbebb533ba0856f1">NeonBatchMatMulValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfoX, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfoY, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo, const <a class="el" href="structarmnn_1_1_batch_mat_mul_descriptor.html">BatchMatMulDescriptor</a> &amp;descriptor, const bool isFastMathEnabled, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:a52cdeda888e3ecf0dbebb533ba0856f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac1be1c9a317b23b5684c83af59fb2c96"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac1be1c9a317b23b5684c83af59fb2c96">NeonBatchNormalizationValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;mean, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;var, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;beta, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;gamma, const <a class="el" href="structarmnn_1_1_batch_normalization_descriptor.html">BatchNormalizationDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:ac1be1c9a317b23b5684c83af59fb2c96"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad5f7f0fcd2dbb0aad7016ff984e7cc6"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aad5f7f0fcd2dbb0aad7016ff984e7cc6">NeonBatchToSpaceNdWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_batch_to_space_nd_descriptor.html">BatchToSpaceNdDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:aad5f7f0fcd2dbb0aad7016ff984e7cc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ab69cec1cab301e096a2830f65a36ec"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3ab69cec1cab301e096a2830f65a36ec">NeonCastValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a3ab69cec1cab301e096a2830f65a36ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2ee21869ffad00d6344afffb0a9baba1"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2ee21869ffad00d6344afffb0a9baba1">NeonChannelShuffleValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_channel_shuffle_descriptor.html">ChannelShuffleDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a2ee21869ffad00d6344afffb0a9baba1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae412e8e64d6a6dde3ace908b59c29c06"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae412e8e64d6a6dde3ace908b59c29c06">NeonComparisonWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_comparison_descriptor.html">ComparisonDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:ae412e8e64d6a6dde3ace908b59c29c06"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3653413d74a951674c88db372d217baa"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3653413d74a951674c88db372d217baa">NeonConcatWorkloadValidate</a> (const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> * &gt; &amp;inputs, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_origins_descriptor.html">OriginsDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a3653413d74a951674c88db372d217baa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb681fd9b8afe0b236d51b6c868ae660"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#afb681fd9b8afe0b236d51b6c868ae660">NeonConstantWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:afb681fd9b8afe0b236d51b6c868ae660"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3d5735d5be6c2acce502ba572cd47d7e"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3d5735d5be6c2acce502ba572cd47d7e">NeonConvertFp16ToFp32WorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a3d5735d5be6c2acce502ba572cd47d7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a940d1c3e8ff3949cb5f230637fb8656c"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a940d1c3e8ff3949cb5f230637fb8656c">NeonConvertFp32ToFp16WorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a940d1c3e8ff3949cb5f230637fb8656c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45691b0c4a46c239b4986cfed95de13b"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a45691b0c4a46c239b4986cfed95de13b">NeonConvolution2dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_convolution2d_descriptor.html">Convolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;biases, bool isFastMathEnabled, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:a45691b0c4a46c239b4986cfed95de13b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acbb4d7b86eb01bb437230e1586b9aeb4"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#acbb4d7b86eb01bb437230e1586b9aeb4">NeonConvolution3dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_convolution3d_descriptor.html">Convolution3dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;biases, bool isFastMathEnabled, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:acbb4d7b86eb01bb437230e1586b9aeb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a116d88067bf98ce9858ab73e68f605f9"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a116d88067bf98ce9858ab73e68f605f9">NeonDepthToSpaceWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="namespacearmnn.html#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a116d88067bf98ce9858ab73e68f605f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a63d684b26fb838b22123490d780bce08"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a63d684b26fb838b22123490d780bce08">NeonDepthwiseConvolutionWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html">DepthwiseConvolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;biases, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:a63d684b26fb838b22123490d780bce08"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acefede7cc57c71ea4cfe1c888bb413e0"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#acefede7cc57c71ea4cfe1c888bb413e0">NeonDequantizeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:acefede7cc57c71ea4cfe1c888bb413e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a35d5394615a3062b629db056d414ae4f"><td class="memItemLeft" align="right" valign="top">arm_compute::DetectionPostProcessLayerInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a35d5394615a3062b629db056d414ae4f">MakeInfo</a> (const <a class="el" href="structarmnn_1_1_detection_post_process_descriptor.html">DetectionPostProcessDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a35d5394615a3062b629db056d414ae4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab816c37fc6a6243badf4f7a3d0c88d46"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab816c37fc6a6243badf4f7a3d0c88d46">NeonDetectionPostProcessValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;boxEncodings, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;scores, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;anchors, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;detectionBoxes, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;detectionClasses, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;detectionScores, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;numDetections, const <a class="el" href="structarmnn_1_1_detection_post_process_descriptor.html">DetectionPostProcessDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:ab816c37fc6a6243badf4f7a3d0c88d46"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a65c912bfcf02b3096f36caf21fa175d0"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a65c912bfcf02b3096f36caf21fa175d0">NeonDivisionWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:a65c912bfcf02b3096f36caf21fa175d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa91b61cfa806ac6c8cd326f02dd993d5"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa91b61cfa806ac6c8cd326f02dd993d5">NeonElementwiseBinaryWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_elementwise_binary_descriptor.html">ElementwiseBinaryDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:aa91b61cfa806ac6c8cd326f02dd993d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec5669eb9285cbca1ee6c7e1dd7bcf6a"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aec5669eb9285cbca1ee6c7e1dd7bcf6a">NeonExpWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:aec5669eb9285cbca1ee6c7e1dd7bcf6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae455144d3472c502b636697f4775400c"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae455144d3472c502b636697f4775400c">NeonFullyConnectedWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;biases, const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.html">FullyConnectedDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:ae455144d3472c502b636697f4775400c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abfdd58b11ca2986bb45fc25ba4514347"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abfdd58b11ca2986bb45fc25ba4514347">NeonFusedWorkloadValidate</a> (const std::vector&lt; std::reference_wrapper&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt;&gt; &amp;inputInfos, const std::vector&lt; std::reference_wrapper&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt;&gt; &amp;outputInfos, const <a class="el" href="structarmnn_1_1_fused_descriptor.html">FusedDescriptor</a> &amp;fusedDescriptor, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:abfdd58b11ca2986bb45fc25ba4514347"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec41b8c86e61ce02a07b8215bf8bc073"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aec41b8c86e61ce02a07b8215bf8bc073">NeonGatherNdWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;paramsInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;indicesInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo)</td></tr>
<tr class="separator:aec41b8c86e61ce02a07b8215bf8bc073"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6c354904637149b84767275e6f725741"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6c354904637149b84767275e6f725741">NeonGatherWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;indices, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_gather_descriptor.html">GatherDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a6c354904637149b84767275e6f725741"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aea722abe239545030f4c6fe4e083816f"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aea722abe239545030f4c6fe4e083816f">NeonInstanceNormalizationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_instance_normalization_descriptor.html">InstanceNormalizationDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:aea722abe239545030f4c6fe4e083816f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae838df3960d2b5d18d73ed2a07aee917"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae838df3960d2b5d18d73ed2a07aee917">NeonL2NormalizationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_l2_normalization_descriptor.html">L2NormalizationDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:ae838df3960d2b5d18d73ed2a07aee917"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7832b675e7efeb1315b31067e46ce705"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7832b675e7efeb1315b31067e46ce705">NeonLogicalAndWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a7832b675e7efeb1315b31067e46ce705"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af4f8e11ae5715973420a82d841dfa676"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af4f8e11ae5715973420a82d841dfa676">NeonLogicalNotWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:af4f8e11ae5715973420a82d841dfa676"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2de04fd10d0a2419e0a05f12741017dc"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2de04fd10d0a2419e0a05f12741017dc">NeonLogicalOrWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a2de04fd10d0a2419e0a05f12741017dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac57d1e00cc24022c21aa7ff95eb618ba"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac57d1e00cc24022c21aa7ff95eb618ba">NeonLogSoftmaxWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="namespacearmnn.html#ac14705405cbcdd580df613de6766fe65">LogSoftmaxDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:ac57d1e00cc24022c21aa7ff95eb618ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad1991a3499a991b1fdd71d918f793f13"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad1991a3499a991b1fdd71d918f793f13">NeonLogWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:ad1991a3499a991b1fdd71d918f793f13"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9e06cc2a2ac8b88fc72972695a17910f"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9e06cc2a2ac8b88fc72972695a17910f">NeonLstmFloatWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;cellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;scratchBuffer, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_lstm_descriptor.html">LstmDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_lstm_input_params_info.html">LstmInputParamsInfo</a> &amp;paramsInfo)</td></tr>
<tr class="separator:a9e06cc2a2ac8b88fc72972695a17910f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8d2ea79addd8ef64be2ca0dad3408f00"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8d2ea79addd8ef64be2ca0dad3408f00">NeonMaximumWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a8d2ea79addd8ef64be2ca0dad3408f00"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae74e210a3f716c1f5f32663a8ec66345"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae74e210a3f716c1f5f32663a8ec66345">NeonMeanWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_mean_descriptor.html">MeanDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:ae74e210a3f716c1f5f32663a8ec66345"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab81159ebfa638af1b91fe1e8c5de1955"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab81159ebfa638af1b91fe1e8c5de1955">NeonMinimumWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="memdesc:ab81159ebfa638af1b91fe1e8c5de1955"><td class="mdescLeft">&#160;</td><td class="mdescRight">Validate function for validating the inputs and output. <a href="namespacearmnn.html#ab81159ebfa638af1b91fe1e8c5de1955">More...</a><br /></td></tr>
<tr class="separator:ab81159ebfa638af1b91fe1e8c5de1955"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad512520e809bfed4fbd3db9fbc241263"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad512520e809bfed4fbd3db9fbc241263">NeonMultiplicationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:ad512520e809bfed4fbd3db9fbc241263"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7f955750d00cdcae6038f07cc73686ea"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7f955750d00cdcae6038f07cc73686ea">NeonNegWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a7f955750d00cdcae6038f07cc73686ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2ec6297db90d1d4c258c13d2d72b13d9"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2ec6297db90d1d4c258c13d2d72b13d9">NeonNormalizationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_normalization_descriptor.html">NormalizationDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a2ec6297db90d1d4c258c13d2d72b13d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a39209c0c078e83227222eb885317c2c5"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a39209c0c078e83227222eb885317c2c5">NeonPadWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_pad_descriptor.html">PadDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a39209c0c078e83227222eb885317c2c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a70650f6b1d3b8511fcdb989ca769cdbb"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a70650f6b1d3b8511fcdb989ca769cdbb">NeonPermuteWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_permute_descriptor.html">PermuteDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a70650f6b1d3b8511fcdb989ca769cdbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1f07655db8ad7f2738bb0d3d9e2316cc"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1f07655db8ad7f2738bb0d3d9e2316cc">NeonPooling2dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.html">Pooling2dDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a1f07655db8ad7f2738bb0d3d9e2316cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa2b7034aa064d5ec7a9d07828edc48bc"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa2b7034aa064d5ec7a9d07828edc48bc">NeonPooling3dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_pooling3d_descriptor.html">Pooling3dDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:aa2b7034aa064d5ec7a9d07828edc48bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a188adc104b16db3dc23ed2c5ff06cbb8"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a188adc104b16db3dc23ed2c5ff06cbb8">NeonPreluWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;alpha, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a188adc104b16db3dc23ed2c5ff06cbb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6e6f731864d33c0acd4140c7dfe17b0a"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6e6f731864d33c0acd4140c7dfe17b0a">NeonQLstmWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;cellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_q_lstm_descriptor.html">QLstmDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_lstm_input_params_info.html">LstmInputParamsInfo</a> &amp;paramsInfo)</td></tr>
<tr class="separator:a6e6f731864d33c0acd4140c7dfe17b0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae83632e641892ad2de78f316376f6bd0"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae83632e641892ad2de78f316376f6bd0">NeonQuantizedLstmWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;cellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputStateOut, const <a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.html">QuantizedLstmInputParamsInfo</a> &amp;paramsInfo)</td></tr>
<tr class="separator:ae83632e641892ad2de78f316376f6bd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4d1e35c8bbe48e99dd522ac0f75f77d7"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4d1e35c8bbe48e99dd522ac0f75f77d7">NeonQuantizeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a4d1e35c8bbe48e99dd522ac0f75f77d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aceb6d218204c4e0e7b4c968d6266917c"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aceb6d218204c4e0e7b4c968d6266917c">NeonReduceWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_reduce_descriptor.html">ReduceDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:aceb6d218204c4e0e7b4c968d6266917c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a430021076042c8157a926a3bb3a37152"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a430021076042c8157a926a3bb3a37152">NeonReshapeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a430021076042c8157a926a3bb3a37152"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a552d65f4e0a6c9e7c7796e77590063e9"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a552d65f4e0a6c9e7c7796e77590063e9">NeonResizeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_resize_descriptor.html">ResizeDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a552d65f4e0a6c9e7c7796e77590063e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2d9594d52faca41463535cf67995c64a"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2d9594d52faca41463535cf67995c64a">NeonReverseV2WorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;axis, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a2d9594d52faca41463535cf67995c64a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa7d1b5e38aa8cb731519ff12e2a73350"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa7d1b5e38aa8cb731519ff12e2a73350">NeonRsqrtWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:aa7d1b5e38aa8cb731519ff12e2a73350"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af873a38f5251d348f37f0e94a2adc400"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af873a38f5251d348f37f0e94a2adc400">NeonSinWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:af873a38f5251d348f37f0e94a2adc400"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0a223c0997e3f7faa373ed55f954252b"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0a223c0997e3f7faa373ed55f954252b">NeonSliceWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_slice_descriptor.html">SliceDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a0a223c0997e3f7faa373ed55f954252b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4077a9771ba9c551f4ce61863f65e798"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4077a9771ba9c551f4ce61863f65e798">NeonSoftmaxWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_softmax_descriptor.html">SoftmaxDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a4077a9771ba9c551f4ce61863f65e798"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab29257da888af2c4971db1344d8a526c"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab29257da888af2c4971db1344d8a526c">NeonSpaceToBatchNdWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.html">SpaceToBatchNdDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:ab29257da888af2c4971db1344d8a526c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af6d2d40482240def4614deb694933d1e"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af6d2d40482240def4614deb694933d1e">NeonSpaceToDepthWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.html">SpaceToDepthDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:af6d2d40482240def4614deb694933d1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aab5ea316b3decb05430323d847e3a773"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aab5ea316b3decb05430323d847e3a773">NeonSplitterWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const std::vector&lt; std::reference_wrapper&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt;&gt; &amp;outputs, unsigned int splitAxis)</td></tr>
<tr class="separator:aab5ea316b3decb05430323d847e3a773"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5fadc539a1a3c35c4a6138bf6e970e4c"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5fadc539a1a3c35c4a6138bf6e970e4c">NeonSqrtWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output)</td></tr>
<tr class="separator:a5fadc539a1a3c35c4a6138bf6e970e4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:add549d4deb11580fc32d17fb38b309b4"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#add549d4deb11580fc32d17fb38b309b4">NeonStackWorkloadValidate</a> (const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> * &gt; &amp;inputs, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_stack_descriptor.html">StackDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:add549d4deb11580fc32d17fb38b309b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac71d08bf1257807c112b4d019802acc3"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac71d08bf1257807c112b4d019802acc3">NeonStridedSliceWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.html">StridedSliceDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:ac71d08bf1257807c112b4d019802acc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abc968e1323027f9e42cbc7642800d5ce"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abc968e1323027f9e42cbc7642800d5ce">NeonSubtractionWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *activationDescriptor)</td></tr>
<tr class="separator:abc968e1323027f9e42cbc7642800d5ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a12d32ef8b1e050744b79caff6252503a"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a12d32ef8b1e050744b79caff6252503a">NeonTileWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_tile_descriptor.html">TileDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a12d32ef8b1e050744b79caff6252503a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abc73c3c9a09f91c22c64d7c166e9be4d"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abc73c3c9a09f91c22c64d7c166e9be4d">NeonTransposeConvolution2dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.html">TransposeConvolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;biases)</td></tr>
<tr class="separator:abc73c3c9a09f91c22c64d7c166e9be4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2b8555526752015115fa7fa00d88542b"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2b8555526752015115fa7fa00d88542b">NeonTransposeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_transpose_descriptor.html">TransposeDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:a2b8555526752015115fa7fa00d88542b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a963622d85527f420f0b922ef27de4f6b"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a963622d85527f420f0b922ef27de4f6b">NeonUnidirectionalSequenceLstmFloatWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;cellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="namespacearmnn.html#ae6c5f1b51bd32133c4dcc632045d6b58">UnidirectionalSequenceLstmDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_lstm_input_params_info.html">LstmInputParamsInfo</a> &amp;paramsInfo)</td></tr>
<tr class="separator:a963622d85527f420f0b922ef27de4f6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a42561b8004ee341ac089d5f1657120db"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a42561b8004ee341ac089d5f1657120db">NeonUnidirectionalSequenceLstmWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;cellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;output, const <a class="el" href="namespacearmnn.html#ae6c5f1b51bd32133c4dcc632045d6b58">UnidirectionalSequenceLstmDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_lstm_input_params_info.html">LstmInputParamsInfo</a> &amp;paramsInfo)</td></tr>
<tr class="separator:a42561b8004ee341ac089d5f1657120db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1351e01f9fb983937caf79e353142b41"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a1351e01f9fb983937caf79e353142b41"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a> (arm_compute::Tensor &amp;dstTensor, const T *srcData)</td></tr>
<tr class="separator:a1351e01f9fb983937caf79e353142b41"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a611208865d55ea576cc89ac86d7c19b7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a611208865d55ea576cc89ac86d7c19b7">InitializeArmComputeTensorData</a> (arm_compute::Tensor &amp;tensor, <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> tensorInfo, const <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *handle)</td></tr>
<tr class="separator:a611208865d55ea576cc89ac86d7c19b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acf8e1f43fc13cf7603564cc15743fce2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#acf8e1f43fc13cf7603564cc15743fce2">InitializeArmComputeTensorData</a> (arm_compute::Tensor &amp;tensor, const <a class="el" href="classarmnn_1_1_const_tensor_handle.html">ConstTensorHandle</a> *handle)</td></tr>
<tr class="separator:acf8e1f43fc13cf7603564cc15743fce2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a01d1e745f360ccd0b655214645bcef32"><td class="memItemLeft" align="right" valign="top">auto&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a01d1e745f360ccd0b655214645bcef32">SetNeonStridedSliceData</a> (const std::vector&lt; int &gt; &amp;m_begin, const std::vector&lt; int &gt; &amp;m_end, const std::vector&lt; int &gt; &amp;m_stride)</td></tr>
<tr class="separator:a01d1e745f360ccd0b655214645bcef32"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab40e30cea5a328a3c35aa32f9b7db1c1"><td class="memItemLeft" align="right" valign="top">auto&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab40e30cea5a328a3c35aa32f9b7db1c1">SetNeonSliceData</a> (const std::vector&lt; unsigned int &gt; &amp;m_begin, const std::vector&lt; unsigned int &gt; &amp;m_size)</td></tr>
<tr class="separator:ab40e30cea5a328a3c35aa32f9b7db1c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae7d50846b2769f81521af24d063bc093"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae7d50846b2769f81521af24d063bc093">RefBackendId</a> ()</td></tr>
<tr class="separator:ae7d50846b2769f81521af24d063bc093"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5baedac4819656984488bc1fe5fe1505"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5baedac4819656984488bc1fe5fe1505">RefTensorHandleFactoryId</a> ()</td></tr>
<tr class="separator:a5baedac4819656984488bc1fe5fe1505"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa21ff5349b2240a92b847e670659357f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa21ff5349b2240a92b847e670659357f">IsSigned64</a> (const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;info)</td></tr>
<tr class="separator:aa21ff5349b2240a92b847e670659357f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a87b99791ccf8793961db67ea19eb6fa4"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a87b99791ccf8793961db67ea19eb6fa4">IsSigned32</a> (const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;info)</td></tr>
<tr class="separator:a87b99791ccf8793961db67ea19eb6fa4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3d504240723912bf9c76ff3afeaa25c5"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3d504240723912bf9c76ff3afeaa25c5">IsBFloat16</a> (const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;info)</td></tr>
<tr class="separator:a3d504240723912bf9c76ff3afeaa25c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad78d822be14a8d585cd038cf0e73cd7e"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad78d822be14a8d585cd038cf0e73cd7e">IsFloat16</a> (const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;info)</td></tr>
<tr class="separator:ad78d822be14a8d585cd038cf0e73cd7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abcd0d843d5736b78740ae73249b6b977"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abcd0d843d5736b78740ae73249b6b977">IsQSymmS16</a> (const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;info)</td></tr>
<tr class="separator:abcd0d843d5736b78740ae73249b6b977"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a09a7cd515c3b495e61b2a5116bf6a335"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a09a7cd515c3b495e61b2a5116bf6a335">IsQSymmS8</a> (const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;info)</td></tr>
<tr class="separator:a09a7cd515c3b495e61b2a5116bf6a335"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a47d136a5519331dee24f5e01b206ae7c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a47d136a5519331dee24f5e01b206ae7c">IsQAsymmS8</a> (const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;info)</td></tr>
<tr class="separator:a47d136a5519331dee24f5e01b206ae7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a37c36bbf668cd8a0d7dcd731c9b591d7"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a37c36bbf668cd8a0d7dcd731c9b591d7">IsQAsymmU8</a> (const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;info)</td></tr>
<tr class="separator:a37c36bbf668cd8a0d7dcd731c9b591d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abe95e2847292413f6dc71c21dabce181"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abe95e2847292413f6dc71c21dabce181">IsBoolean</a> (const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;info)</td></tr>
<tr class="separator:abe95e2847292413f6dc71c21dabce181"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad05c0670c947d35d39b3b0217e9975cf"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptorType &gt; </td></tr>
<tr class="memitem:ad05c0670c947d35d39b3b0217e9975cf"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad05c0670c947d35d39b3b0217e9975cf">IsOperationQueueDescriptor</a> (const QueueDescriptorType &amp;)</td></tr>
<tr class="separator:ad05c0670c947d35d39b3b0217e9975cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a93e7b76d19b33076b2a4eae44014d5ea"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a93e7b76d19b33076b2a4eae44014d5ea"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a93e7b76d19b33076b2a4eae44014d5ea">IsOperationQueueDescriptor</a> (const <a class="el" href="structarmnn_1_1_mem_copy_queue_descriptor.html">MemCopyQueueDescriptor</a> &amp;)</td></tr>
<tr class="separator:a93e7b76d19b33076b2a4eae44014d5ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a05323af66b9f762e269a27562a2bbdd0"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a05323af66b9f762e269a27562a2bbdd0"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a05323af66b9f762e269a27562a2bbdd0">IsOperationQueueDescriptor</a> (const <a class="el" href="structarmnn_1_1_constant_queue_descriptor.html">ConstantQueueDescriptor</a> &amp;)</td></tr>
<tr class="separator:a05323af66b9f762e269a27562a2bbdd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a91332212b6a2cc9c0ea32af03c600b4f"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a91332212b6a2cc9c0ea32af03c600b4f"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a91332212b6a2cc9c0ea32af03c600b4f">IsOperationQueueDescriptor</a> (const <a class="el" href="structarmnn_1_1_permute_queue_descriptor.html">PermuteQueueDescriptor</a> &amp;)</td></tr>
<tr class="separator:a91332212b6a2cc9c0ea32af03c600b4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7636fbbc4f8ea2d0cf9f3ac2d12a4c62"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a> (float in, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a> function, float a, float b)</td></tr>
<tr class="separator:a7636fbbc4f8ea2d0cf9f3ac2d12a4c62"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad10d72a6f8859949bbe6134c638ce171"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad10d72a6f8859949bbe6134c638ce171">Activation</a> (<a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;in, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;out, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;tensorInfo, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a> function, float a, float b)</td></tr>
<tr class="separator:ad10d72a6f8859949bbe6134c638ce171"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad441be836a142e8935e0413f4a22c9ec"><td class="memTemplParams" colspan="2">template&lt;typename OUT &gt; </td></tr>
<tr class="memitem:ad441be836a142e8935e0413f4a22c9ec"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad441be836a142e8935e0413f4a22c9ec">ArgMinMax</a> (<a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;in, OUT *out, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputTensorInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputTensorInfo, <a class="el" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a> function, int axis)</td></tr>
<tr class="separator:ad441be836a142e8935e0413f4a22c9ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1687cef9e4d417595f05519f3b67bf0f"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1687cef9e4d417595f05519f3b67bf0f">ArgMinMax</a> (<a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;in, int32_t *out, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputTensorInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputTensorInfo, <a class="el" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a> function, int axis)</td></tr>
<tr class="separator:a1687cef9e4d417595f05519f3b67bf0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4ef59ef40b2161e37f3e5eb990a342ad"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4ef59ef40b2161e37f3e5eb990a342ad">ArgMinMax</a> (<a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;in, int64_t *out, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputTensorInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputTensorInfo, <a class="el" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a> function, int axis)</td></tr>
<tr class="separator:a4ef59ef40b2161e37f3e5eb990a342ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adc251e65d99405496d503811589e9a20"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#adc251e65d99405496d503811589e9a20">BatchNormImpl</a> (const <a class="el" href="structarmnn_1_1_batch_normalization_queue_descriptor.html">BatchNormalizationQueueDescriptor</a> &amp;data, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;meanDecoder, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;varianceDecoder, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;betaDecoder, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;gammaDecoder, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;inputDecoder, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;outputEncoder)</td></tr>
<tr class="separator:adc251e65d99405496d503811589e9a20"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac70a495c61526a0500b33b23db86ca27"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac70a495c61526a0500b33b23db86ca27">Offset</a> (const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;shape, unsigned int batch, unsigned int height, unsigned int width, unsigned int channels, const <a class="el" href="classarmnn_utils_1_1_data_layout_indexed.html">DataLayoutIndexed</a> &amp;dataLayout)</td></tr>
<tr class="separator:ac70a495c61526a0500b33b23db86ca27"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae97f6a405add803682188eecea9b021d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae97f6a405add803682188eecea9b021d">BatchToSpaceNd</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo, const <a class="el" href="structarmnn_1_1_batch_to_space_nd_descriptor.html">BatchToSpaceNdDescriptor</a> &amp;params, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;inputData, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;outputData)</td></tr>
<tr class="separator:ae97f6a405add803682188eecea9b021d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a83b1d61a12c9e1911c2b6d79c35ef551"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a83b1d61a12c9e1911c2b6d79c35ef551">Concatenate</a> (const <a class="el" href="structarmnn_1_1_concat_queue_descriptor.html">ConcatQueueDescriptor</a> &amp;data, std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> * &gt; inputs, std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> * &gt; outputs)</td></tr>
<tr class="separator:a83b1d61a12c9e1911c2b6d79c35ef551"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9750dc088a62ed91b79f636dfaa2d9a1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9750dc088a62ed91b79f636dfaa2d9a1">Convolve3d</a> (const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;rInputShape, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;rInputDecoder, const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;rOutputShape, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;rOutputEncoder, const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;rFilterShape, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;rFilterDecoder, bool biasEnabled, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; *pBiasDecoder, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout, unsigned int paddingTop, unsigned int paddingLeft, unsigned int paddingFront, unsigned int xStride, unsigned int yStride, unsigned int zStride, unsigned int xDilation, unsigned int yDilation, unsigned int zDilation)</td></tr>
<tr class="separator:a9750dc088a62ed91b79f636dfaa2d9a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af98115cd07776d3fa8424434d2a7a897"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af98115cd07776d3fa8424434d2a7a897">Convolve</a> (const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;rInputShape, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;rInputDecoder, const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;rOutputShape, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;rOutputEncoder, const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;rFilterShape, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;rFilterDecoder, bool biasEnabled, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; *pBiasDecoder, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout, unsigned int paddingTop, unsigned int paddingLeft, unsigned int xStride, unsigned int yStride, unsigned int xDilation, unsigned int yDilation, bool depthwise)</td></tr>
<tr class="separator:af98115cd07776d3fa8424434d2a7a897"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2b942b6b36b2f6df709b544e01bbdbb0"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a2b942b6b36b2f6df709b544e01bbdbb0"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2b942b6b36b2f6df709b544e01bbdbb0">PrintOutput</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const T *inputData, <a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex, std::ostream &amp;os)</td></tr>
<tr class="separator:a2b942b6b36b2f6df709b544e01bbdbb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a181ecb133401da6ff2916c192ca04d48"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a181ecb133401da6ff2916c192ca04d48"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a181ecb133401da6ff2916c192ca04d48">Debug</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const T *inputData, <a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex, bool outputsToFile)</td></tr>
<tr class="separator:a181ecb133401da6ff2916c192ca04d48"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acea0491173b09308ca626ea65e70e1d8"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#acea0491173b09308ca626ea65e70e1d8">Debug&lt; BFloat16 &gt;</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_b_float16.html">BFloat16</a> *inputData, <a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex, bool outputsToFile)</td></tr>
<tr class="separator:acea0491173b09308ca626ea65e70e1d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4dbfaabd2d65dc91bc8bd4d0b5e1ed07"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4dbfaabd2d65dc91bc8bd4d0b5e1ed07">Debug&lt; Half &gt;</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">Half</a> *inputData, <a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex, bool outputsToFile)</td></tr>
<tr class="separator:a4dbfaabd2d65dc91bc8bd4d0b5e1ed07"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af34b15ddc0dcee095162820e88d84808"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af34b15ddc0dcee095162820e88d84808">Debug&lt; float &gt;</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const float *inputData, <a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex, bool outputsToFile)</td></tr>
<tr class="separator:af34b15ddc0dcee095162820e88d84808"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af5cd3e7fcb637ffad7644cdd2e19a8ae"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#af5cd3e7fcb637ffad7644cdd2e19a8ae">Debug&lt; uint8_t &gt;</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const uint8_t *inputData, <a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex, bool outputsToFile)</td></tr>
<tr class="separator:af5cd3e7fcb637ffad7644cdd2e19a8ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a31a77914be2a7b9d8c6d22036df869d8"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a31a77914be2a7b9d8c6d22036df869d8">Debug&lt; int8_t &gt;</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const int8_t *inputData, <a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex, bool outputsToFile)</td></tr>
<tr class="separator:a31a77914be2a7b9d8c6d22036df869d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a62669f61a81677f5ca4b1f21bb7d45d8"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a62669f61a81677f5ca4b1f21bb7d45d8">Debug&lt; int16_t &gt;</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const int16_t *inputData, <a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex, bool outputsToFile)</td></tr>
<tr class="separator:a62669f61a81677f5ca4b1f21bb7d45d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a77e5a9b94927bee9c48010efd2dec2b0"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a77e5a9b94927bee9c48010efd2dec2b0">Debug&lt; int32_t &gt;</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const int32_t *inputData, <a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex, bool outputsToFile)</td></tr>
<tr class="separator:a77e5a9b94927bee9c48010efd2dec2b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a43a27d876cf8cab5f5d45163a05908e9"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a43a27d876cf8cab5f5d45163a05908e9">Debug&lt; int64_t &gt;</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const int64_t *inputData, <a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex, bool outputsToFile)</td></tr>
<tr class="separator:a43a27d876cf8cab5f5d45163a05908e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1545cb162c5a64d75d9c0c05e8ea387c"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a1545cb162c5a64d75d9c0c05e8ea387c"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; T &gt; &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1545cb162c5a64d75d9c0c05e8ea387c">MakeDecoder</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;info, const void *data=nullptr)</td></tr>
<tr class="separator:a1545cb162c5a64d75d9c0c05e8ea387c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8cb12db00d6e4ab4ac5ccfa6e7a69374"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a8cb12db00d6e4ab4ac5ccfa6e7a69374"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8cb12db00d6e4ab4ac5ccfa6e7a69374">MakeDecoder</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;info, const void *data)</td></tr>
<tr class="separator:a8cb12db00d6e4ab4ac5ccfa6e7a69374"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab023d9a7687e35c0f108458a094c1f56"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab023d9a7687e35c0f108458a094c1f56">DepthToSpace</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="namespacearmnn.html#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a> &amp;descriptor, const void *inputData, void *outputData, unsigned int dataTypeSize)</td></tr>
<tr class="separator:ab023d9a7687e35c0f108458a094c1f56"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acae7e910f899ae67340c9ce29e406a86"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#acae7e910f899ae67340c9ce29e406a86">Dequantize</a> (<a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;inputDecoder, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;outputEncoder, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo)</td></tr>
<tr class="separator:acae7e910f899ae67340c9ce29e406a86"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae8ed5c640761fb6744aec0ee16388417"><td class="memItemLeft" align="right" valign="top">std::vector&lt; unsigned int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae8ed5c640761fb6744aec0ee16388417">GenerateRangeK</a> (unsigned int k)</td></tr>
<tr class="separator:ae8ed5c640761fb6744aec0ee16388417"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2748f45e58b1c612d473043f711d1434"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2748f45e58b1c612d473043f711d1434">TopKSort</a> (unsigned int k, unsigned int *indices, const float *values, unsigned int numElement)</td></tr>
<tr class="separator:a2748f45e58b1c612d473043f711d1434"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abf6aad7bc221f8ad22b4d99cd020373b"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abf6aad7bc221f8ad22b4d99cd020373b">IntersectionOverUnion</a> (const float *boxI, const float *boxJ)</td></tr>
<tr class="separator:abf6aad7bc221f8ad22b4d99cd020373b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac8c641d4a69c9a85c487cfbc7ea4d73c"><td class="memItemLeft" align="right" valign="top">std::vector&lt; unsigned int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac8c641d4a69c9a85c487cfbc7ea4d73c">NonMaxSuppression</a> (unsigned int numBoxes, const std::vector&lt; float &gt; &amp;boxCorners, const std::vector&lt; float &gt; &amp;scores, float nmsScoreThreshold, unsigned int maxDetection, float nmsIouThreshold)</td></tr>
<tr class="separator:ac8c641d4a69c9a85c487cfbc7ea4d73c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae8dcbb74cf0c855724f12833a55a5684"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae8dcbb74cf0c855724f12833a55a5684">AllocateOutputData</a> (unsigned int numOutput, unsigned int numSelected, const std::vector&lt; float &gt; &amp;boxCorners, const std::vector&lt; unsigned int &gt; &amp;outputIndices, const std::vector&lt; unsigned int &gt; &amp;selectedBoxes, const std::vector&lt; unsigned int &gt; &amp;selectedClasses, const std::vector&lt; float &gt; &amp;selectedScores, float *detectionBoxes, float *detectionScores, float *detectionClasses, float *numDetections)</td></tr>
<tr class="separator:ae8dcbb74cf0c855724f12833a55a5684"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5826c31d9342002f512999ce89841073"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5826c31d9342002f512999ce89841073">DetectionPostProcess</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;boxEncodingsInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;scoresInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;detectionBoxesInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;, const <a class="el" href="structarmnn_1_1_detection_post_process_descriptor.html">DetectionPostProcessDescriptor</a> &amp;desc, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;boxEncodings, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;scores, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;anchors, float *detectionBoxes, float *detectionClasses, float *detectionScores, float *numDetections)</td></tr>
<tr class="separator:a5826c31d9342002f512999ce89841073"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a56867cc5245724ab56953604b1eec9ee"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a56867cc5245724ab56953604b1eec9ee"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; T &gt; &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a56867cc5245724ab56953604b1eec9ee">MakeEncoder</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;info, void *data=nullptr)</td></tr>
<tr class="separator:a56867cc5245724ab56953604b1eec9ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a01cdb4291025316036201d689811255f"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a01cdb4291025316036201d689811255f"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a01cdb4291025316036201d689811255f">MakeEncoder</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;info, void *data)</td></tr>
<tr class="separator:a01cdb4291025316036201d689811255f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a88bebdfe6309aa2cd6831cfa73c296f0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a88bebdfe6309aa2cd6831cfa73c296f0">Fill</a> (<a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;output, const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;desiredOutputShape, const float value)</td></tr>
<tr class="memdesc:a88bebdfe6309aa2cd6831cfa73c296f0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a tensor and fills it with a scalar value. <a href="namespacearmnn.html#a88bebdfe6309aa2cd6831cfa73c296f0">More...</a><br /></td></tr>
<tr class="separator:a88bebdfe6309aa2cd6831cfa73c296f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a435f9350a94adfbb0d5b9abb5f430914"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a435f9350a94adfbb0d5b9abb5f430914">FullyConnected</a> (const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;rInputShape, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;rInputDecoder, const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;rOutputShape, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;rOutputEncoder, const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;rWeightsShape, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;rWeightDecoder, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; *rBiasDecoder, bool biasEnabled, unsigned int K, bool transposeWeights)</td></tr>
<tr class="memdesc:a435f9350a94adfbb0d5b9abb5f430914"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs a matrix multiplication and optionally adds a bias. <a href="namespacearmnn.html#a435f9350a94adfbb0d5b9abb5f430914">More...</a><br /></td></tr>
<tr class="separator:a435f9350a94adfbb0d5b9abb5f430914"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4f1a1b88b01d8dfda3803776e0778a49"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4f1a1b88b01d8dfda3803776e0778a49">Gather</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;paramsInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;indicesInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;params, const int32_t *indices, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;output, const int32_t axis_int)</td></tr>
<tr class="separator:a4f1a1b88b01d8dfda3803776e0778a49"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5ca459a0ad2c2015f137170d9dd1cf8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad5ca459a0ad2c2015f137170d9dd1cf8">InstanceNorm</a> (const <a class="el" href="structarmnn_1_1_instance_normalization_queue_descriptor.html">InstanceNormalizationQueueDescriptor</a> &amp;data, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;inputDecoder, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;outputEncoder)</td></tr>
<tr class="separator:ad5ca459a0ad2c2015f137170d9dd1cf8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac52e04c0e349e25bcdaa72c27395ef8f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac52e04c0e349e25bcdaa72c27395ef8f">LogSoftmax</a> (<a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;input, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;output, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="namespacearmnn.html#ac14705405cbcdd580df613de6766fe65">LogSoftmaxDescriptor</a> &amp;descriptor)</td></tr>
<tr class="separator:ac52e04c0e349e25bcdaa72c27395ef8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a952423703fa6b92f18d19df3995633b4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a952423703fa6b92f18d19df3995633b4">LstmImpl</a> (const <a class="el" href="structarmnn_1_1_lstm_descriptor.html">LstmDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo, const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;inputToOutputWeightsShape, const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;recurrentToOutputWeightsShape, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;inputData, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;outputStateIn, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;cellStateIn, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt;&gt; &amp;outputStateOut, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt;&gt; &amp;cellStateOut, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt;&gt; &amp;output, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;cellStateOutDecoder, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;outputDecoder, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;inputToInputWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;inputToForgetWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;inputToCellWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;inputToOutputWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;recurrentToInputWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;recurrentToForgetWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;recurrentToCellWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;recurrentToOutputWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;cellToInputWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;cellToForgetWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;cellToOutputWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;inputGateBiasTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;forgetGateBiasTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;cellBiasTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;outputGateBiasTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;projectionWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;projectionBiasTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;inputLayerNormWeights, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;forgetLayerNormWeights, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;cellLayerNormWeights, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;outputLayerNormWeights, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt;&gt; &amp;inputGateScratch, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt;&gt; &amp;cellScratch, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt;&gt; &amp;forgetGateScratch, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt;&gt; &amp;outputGateScratch, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;inputGateScratchDecoder, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;cellScratchDecoder, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;forgetGateScratchDecoder, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;outputGateScratchDecoder, float layerNormEpsilon)</td></tr>
<tr class="separator:a952423703fa6b92f18d19df3995633b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4e3efb65a77cf35dc5dc09e4f3646029"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4e3efb65a77cf35dc5dc09e4f3646029">MirrorPad</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo, const <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *inputHandle, <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *outputHandle, const <a class="el" href="structarmnn_1_1_pad_queue_descriptor.html">PadQueueDescriptor</a> &amp;data)</td></tr>
<tr class="separator:a4e3efb65a77cf35dc5dc09e4f3646029"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3c62b52d21e28088f040a4b6c2a06022"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3c62b52d21e28088f040a4b6c2a06022">Pad</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo, const <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *inputHandle, <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *outputHandle, const <a class="el" href="structarmnn_1_1_pad_queue_descriptor.html">PadQueueDescriptor</a> &amp;data)</td></tr>
<tr class="separator:a3c62b52d21e28088f040a4b6c2a06022"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae2e93e304cf516841c521e3eaee025cd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae2e93e304cf516841c521e3eaee025cd">Pooling2d</a> (<a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;rInputDecoder, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;rOutputEncoder, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo, const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.html">Pooling2dDescriptor</a> &amp;params)</td></tr>
<tr class="memdesc:ae2e93e304cf516841c521e3eaee025cd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the Pooling2d operation. <a href="namespacearmnn.html#ae2e93e304cf516841c521e3eaee025cd">More...</a><br /></td></tr>
<tr class="separator:ae2e93e304cf516841c521e3eaee025cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a69acbef24cd1cc572b93fc3e1e6ac030"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a69acbef24cd1cc572b93fc3e1e6ac030">Pooling3d</a> (<a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;rInputDecoder, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;rOutputEncoder, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo, const <a class="el" href="structarmnn_1_1_pooling3d_descriptor.html">Pooling3dDescriptor</a> &amp;params)</td></tr>
<tr class="memdesc:a69acbef24cd1cc572b93fc3e1e6ac030"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the Pooling3d operation. <a href="namespacearmnn.html#a69acbef24cd1cc572b93fc3e1e6ac030">More...</a><br /></td></tr>
<tr class="separator:a69acbef24cd1cc572b93fc3e1e6ac030"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3be2f69aaf56e58a64ce62054c497fbc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3be2f69aaf56e58a64ce62054c497fbc">PreluImpl</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;alphaInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;inputData, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;alphaData, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;outputData)</td></tr>
<tr class="separator:a3be2f69aaf56e58a64ce62054c497fbc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a869f740e9c2fcb8642350c6e3d0b3742"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a869f740e9c2fcb8642350c6e3d0b3742">NextIndex</a> (const unsigned int numDims, const <a class="el" href="classarmnn_1_1_tensor_shape.html">armnn::TensorShape</a> &amp;dims, std::vector&lt; unsigned int &gt; &amp;current)</td></tr>
<tr class="separator:a869f740e9c2fcb8642350c6e3d0b3742"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae86f1ca23eaa764da9e589cc8e39a969"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae86f1ca23eaa764da9e589cc8e39a969">ReducedOutputOffset</a> (const unsigned int numDims, const <a class="el" href="classarmnn_1_1_tensor_shape.html">armnn::TensorShape</a> &amp;dims, std::vector&lt; unsigned int &gt; &amp;index, const unsigned int numAxis, const std::vector&lt; unsigned int &gt; &amp;axis)</td></tr>
<tr class="separator:ae86f1ca23eaa764da9e589cc8e39a969"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad64b7a275169ba1b1ba2d15679f7e8b1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ad64b7a275169ba1b1ba2d15679f7e8b1">Reduce</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;input, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;output, const std::vector&lt; uint32_t &gt; axis, const <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0">ReduceOperation</a> reduceOperation)</td></tr>
<tr class="separator:ad64b7a275169ba1b1ba2d15679f7e8b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0a1229cfc1151ff1324c026aa50bb03"><td class="memTemplParams" colspan="2">template&lt;typename DataType &gt; </td></tr>
<tr class="memitem:ae0a1229cfc1151ff1324c026aa50bb03"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae0a1229cfc1151ff1324c026aa50bb03">ExecuteFunction</a> (std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> * &gt; inputs, std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> * &gt; outputs, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047">BinaryOperation</a> operation)</td></tr>
<tr class="separator:ae0a1229cfc1151ff1324c026aa50bb03"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab3c0b7e1a78b1b98c24934221f36a7c3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab3c0b7e1a78b1b98c24934221f36a7c3">FakeQuantization</a> (const float *inputData, float *outputData, uint32_t numElements, float min, float max)</td></tr>
<tr class="separator:ab3c0b7e1a78b1b98c24934221f36a7c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3f8e72f86ecaf365978a993127ea5957"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3f8e72f86ecaf365978a993127ea5957">GetNumActivations</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo)</td></tr>
<tr class="separator:a3f8e72f86ecaf365978a993127ea5957"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa815fde54f6d8e8aa5b4f0301cf4178b"><td class="memTemplParams" colspan="2">template&lt;typename TensorHandleType = RefTensorHandle&gt; </td></tr>
<tr class="memitem:aa815fde54f6d8e8aa5b4f0301cf4178b"><td class="memTemplItemLeft" align="right" valign="top">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa815fde54f6d8e8aa5b4f0301cf4178b">GetTensorInfo</a> (const <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *tensorHandle)</td></tr>
<tr class="memdesc:aa815fde54f6d8e8aa5b4f0301cf4178b"><td class="mdescLeft">&#160;</td><td class="mdescRight">float32 helpers <a href="namespacearmnn.html#aa815fde54f6d8e8aa5b4f0301cf4178b">More...</a><br /></td></tr>
<tr class="separator:aa815fde54f6d8e8aa5b4f0301cf4178b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2187ea15b1ae8c323a0cc5c211fc43d9"><td class="memTemplParams" colspan="2">template&lt;typename DataType , typename PayloadType &gt; </td></tr>
<tr class="memitem:a2187ea15b1ae8c323a0cc5c211fc43d9"><td class="memTemplItemLeft" align="right" valign="top">const <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2187ea15b1ae8c323a0cc5c211fc43d9">GetInputTensorData</a> (unsigned int idx, const PayloadType &amp;data)</td></tr>
<tr class="separator:a2187ea15b1ae8c323a0cc5c211fc43d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5442d22144b3608bcfc7eea1bc55e35d"><td class="memTemplParams" colspan="2">template&lt;typename DataType &gt; </td></tr>
<tr class="memitem:a5442d22144b3608bcfc7eea1bc55e35d"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5442d22144b3608bcfc7eea1bc55e35d">GetOutputTensorData</a> (<a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *tensorHandle)</td></tr>
<tr class="separator:a5442d22144b3608bcfc7eea1bc55e35d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a691846a9eee59b0cd5b22fb5f674e007"><td class="memTemplParams" colspan="2">template&lt;typename PayloadType &gt; </td></tr>
<tr class="memitem:a691846a9eee59b0cd5b22fb5f674e007"><td class="memTemplItemLeft" align="right" valign="top">const float *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a691846a9eee59b0cd5b22fb5f674e007">GetInputTensorDataFloat</a> (unsigned int idx, const PayloadType &amp;data)</td></tr>
<tr class="separator:a691846a9eee59b0cd5b22fb5f674e007"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab5f0afc1e37fd100843ecd55d8f284c1"><td class="memTemplParams" colspan="2">template&lt;typename PayloadType &gt; </td></tr>
<tr class="memitem:ab5f0afc1e37fd100843ecd55d8f284c1"><td class="memTemplItemLeft" align="right" valign="top">float *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab5f0afc1e37fd100843ecd55d8f284c1">GetOutputTensorDataFloat</a> (unsigned int idx, const PayloadType &amp;data)</td></tr>
<tr class="separator:ab5f0afc1e37fd100843ecd55d8f284c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a084b0ce273bef78aa314bd97fc574b84"><td class="memTemplParams" colspan="2">template&lt;typename PayloadType &gt; </td></tr>
<tr class="memitem:a084b0ce273bef78aa314bd97fc574b84"><td class="memTemplItemLeft" align="right" valign="top">const <a class="el" href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">Half</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a084b0ce273bef78aa314bd97fc574b84">GetInputTensorDataHalf</a> (unsigned int idx, const PayloadType &amp;data)</td></tr>
<tr class="separator:a084b0ce273bef78aa314bd97fc574b84"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab98e77207c3d676b0b9ffa67357dbc6a"><td class="memTemplParams" colspan="2">template&lt;typename PayloadType &gt; </td></tr>
<tr class="memitem:ab98e77207c3d676b0b9ffa67357dbc6a"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">Half</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab98e77207c3d676b0b9ffa67357dbc6a">GetOutputTensorDataHalf</a> (unsigned int idx, const PayloadType &amp;data)</td></tr>
<tr class="separator:ab98e77207c3d676b0b9ffa67357dbc6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac44cb4d413a43342b120b2c4d047d648"><td class="memTemplParams" colspan="2">template&lt;typename PayloadType &gt; </td></tr>
<tr class="memitem:ac44cb4d413a43342b120b2c4d047d648"><td class="memTemplItemLeft" align="right" valign="top">const <a class="el" href="classarmnn_1_1_b_float16.html">BFloat16</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac44cb4d413a43342b120b2c4d047d648">GetInputTensorDataBFloat16</a> (unsigned int idx, const PayloadType &amp;data)</td></tr>
<tr class="separator:ac44cb4d413a43342b120b2c4d047d648"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a85ace5e5f41a093622a8c04150d24c60"><td class="memTemplParams" colspan="2">template&lt;typename PayloadType &gt; </td></tr>
<tr class="memitem:a85ace5e5f41a093622a8c04150d24c60"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_b_float16.html">BFloat16</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a85ace5e5f41a093622a8c04150d24c60">GetOutputTensorDataBFloat16</a> (unsigned int idx, const PayloadType &amp;data)</td></tr>
<tr class="separator:a85ace5e5f41a093622a8c04150d24c60"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4144d7535639c617fca0d095379493f0"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a4144d7535639c617fca0d095379493f0"><td class="memTemplItemLeft" align="right" valign="top">std::vector&lt; float &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4144d7535639c617fca0d095379493f0">Dequantize</a> (const T *quant, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;info)</td></tr>
<tr class="memdesc:a4144d7535639c617fca0d095379493f0"><td class="mdescLeft">&#160;</td><td class="mdescRight">u8 helpers <a href="namespacearmnn.html#a4144d7535639c617fca0d095379493f0">More...</a><br /></td></tr>
<tr class="separator:a4144d7535639c617fca0d095379493f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1204727d8ce3ee1e60daf08079eb892e"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a1204727d8ce3ee1e60daf08079eb892e"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a1204727d8ce3ee1e60daf08079eb892e">Dequantize</a> (const T *inputData, float *outputData, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;info)</td></tr>
<tr class="separator:a1204727d8ce3ee1e60daf08079eb892e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abbbe4a59b72fba606f21e7c24dcbd8c0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abbbe4a59b72fba606f21e7c24dcbd8c0">Quantize</a> (uint8_t *quant, const float *dequant, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;info)</td></tr>
<tr class="separator:abbbe4a59b72fba606f21e7c24dcbd8c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaa168a41b648cda82a2c8b9f2b91ec04"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aaa168a41b648cda82a2c8b9f2b91ec04">Resize</a> (<a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;in, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;out, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo, <a class="el" href="classarmnn_utils_1_1_data_layout_indexed.html">DataLayoutIndexed</a> dataLayout, <a class="el" href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4">ResizeMethod</a> resizeMethod, bool alignCorners, bool halfPixelCenters)</td></tr>
<tr class="separator:aaa168a41b648cda82a2c8b9f2b91ec04"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae9f7ce777fbcab84555a1e80ab03c13a"><td class="memItemLeft" align="right" valign="top">std::vector&lt; unsigned int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae9f7ce777fbcab84555a1e80ab03c13a">ReverseGetMultIdx</a> (const unsigned int idx, unsigned int inputRank, std::vector&lt; unsigned int &gt; &amp;elementNumInner)</td></tr>
<tr class="separator:ae9f7ce777fbcab84555a1e80ab03c13a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8d4ef1958eb8b75e33ff5f9e1682c9a8"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8d4ef1958eb8b75e33ff5f9e1682c9a8">ReverseGetFlatIdx</a> (const std::vector&lt; unsigned int &gt; &amp;idxList, unsigned int inputRank, std::vector&lt; unsigned int &gt; &amp;elementNumInner)</td></tr>
<tr class="separator:a8d4ef1958eb8b75e33ff5f9e1682c9a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8a0d9d6566aa1e098f6988b2ee98bf00"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8a0d9d6566aa1e098f6988b2ee98bf00">ReverseRelocateIdx</a> (unsigned int idx, unsigned int inputRank, std::vector&lt; bool &gt; &amp;axisFlag, std::vector&lt; unsigned int &gt; &amp;dimSize, std::vector&lt; unsigned int &gt; &amp;elementNumInner)</td></tr>
<tr class="separator:a8a0d9d6566aa1e098f6988b2ee98bf00"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8caac207d532c38c3909d40c742d8c3f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8caac207d532c38c3909d40c742d8c3f">ReverseV2</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;axisInfo, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;inputDecoder, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; int &gt; &amp;axisDecoder, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;outputEncoder)</td></tr>
<tr class="separator:a8caac207d532c38c3909d40c742d8c3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41d0463c55ff6a85d84bfd94e5d25805"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a41d0463c55ff6a85d84bfd94e5d25805">ScatterOperation</a> (<a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4a">ScatterNdFunction</a> operation, float input, float update)</td></tr>
<tr class="separator:a41d0463c55ff6a85d84bfd94e5d25805"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2055c78ee5627c32252387746d552ade"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2055c78ee5627c32252387746d552ade">ScatterNd</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;indicesInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;updatesInfo, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;input, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; int &gt; &amp;indices, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;updates, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;output, <a class="el" href="structarmnn_1_1_scatter_nd_descriptor.html">ScatterNdDescriptor</a> descriptor)</td></tr>
<tr class="separator:a2055c78ee5627c32252387746d552ade"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a817820c4d17214f542a1a6dd7cea72d4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a817820c4d17214f542a1a6dd7cea72d4">ScatterNd</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;indicesInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;updatesInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;shapeInfo, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; int &gt; &amp;indices, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;updates, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; int &gt; &amp;shape, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;output, <a class="el" href="structarmnn_1_1_scatter_nd_descriptor.html">ScatterNdDescriptor</a> descriptor)</td></tr>
<tr class="separator:a817820c4d17214f542a1a6dd7cea72d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a044ea0cc993d4d1fbe4ec877b17b8d39"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a044ea0cc993d4d1fbe4ec877b17b8d39">Slice</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="structarmnn_1_1_slice_descriptor.html">SliceDescriptor</a> &amp;descriptor, const void *inputData, void *outputData, unsigned int dataTypeSize)</td></tr>
<tr class="separator:a044ea0cc993d4d1fbe4ec877b17b8d39"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa999ff2585ad75b95954a9323f63c32b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa999ff2585ad75b95954a9323f63c32b">Softmax</a> (<a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;in, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;out, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputTensorInfo, float beta, int axis)</td></tr>
<tr class="memdesc:aa999ff2585ad75b95954a9323f63c32b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the softmax function on some inputs, into outputs, with a shape given by tensorInfo. <a href="namespacearmnn.html#aa999ff2585ad75b95954a9323f63c32b">More...</a><br /></td></tr>
<tr class="separator:aa999ff2585ad75b95954a9323f63c32b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adafb0fd0a3f6435c2bdf41f971761ecf"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#adafb0fd0a3f6435c2bdf41f971761ecf">GetOffset</a> (const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;shape, unsigned int b, unsigned int h, unsigned int w, unsigned int c, const <a class="el" href="classarmnn_utils_1_1_data_layout_indexed.html">DataLayoutIndexed</a> &amp;dataLayout)</td></tr>
<tr class="separator:adafb0fd0a3f6435c2bdf41f971761ecf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4a180e425d4c19b2cdea4ce5760180e1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a4a180e425d4c19b2cdea4ce5760180e1">SpaceToBatchNd</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo, const <a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.html">SpaceToBatchNdDescriptor</a> &amp;params, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;inputData, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;outputData)</td></tr>
<tr class="separator:a4a180e425d4c19b2cdea4ce5760180e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5e1dc69443b64ad16b669388a6023f7a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a5e1dc69443b64ad16b669388a6023f7a">SpaceToDepth</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo, const <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.html">SpaceToDepthDescriptor</a> &amp;params, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;inputData, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;outputData)</td></tr>
<tr class="separator:a5e1dc69443b64ad16b669388a6023f7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3e6cbdbfb81dbcea27d219a6553838dc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a3e6cbdbfb81dbcea27d219a6553838dc">Split</a> (const <a class="el" href="structarmnn_1_1_splitter_queue_descriptor.html">SplitterQueueDescriptor</a> &amp;data, std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> * &gt; inputs, std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> * &gt; outputs)</td></tr>
<tr class="separator:a3e6cbdbfb81dbcea27d219a6553838dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0fdab6fc39d90c5beea97f4ca0a584c4"><td class="memTemplParams" colspan="2">template&lt;typename DataType &gt; </td></tr>
<tr class="memitem:a0fdab6fc39d90c5beea97f4ca0a584c4"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a0fdab6fc39d90c5beea97f4ca0a584c4">Splitter</a> (const <a class="el" href="structarmnn_1_1_splitter_queue_descriptor.html">SplitterQueueDescriptor</a> &amp;data, std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> * &gt; inputs, std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> * &gt; outputs)</td></tr>
<tr class="separator:a0fdab6fc39d90c5beea97f4ca0a584c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac245fda400649db10eed0dc96c1b5c37"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ac245fda400649db10eed0dc96c1b5c37">Stack</a> (const <a class="el" href="structarmnn_1_1_stack_queue_descriptor.html">StackQueueDescriptor</a> &amp;data, std::vector&lt; std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt;&gt; &amp;inputs, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;output, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;outputInfo)</td></tr>
<tr class="separator:ac245fda400649db10eed0dc96c1b5c37"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a86d7a7168ac00b75b4971f9aad623698"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a86d7a7168ac00b75b4971f9aad623698">StridedSlice</a> (const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.html">StridedSliceDescriptor</a> &amp;params, const void *inputData, void *outputData, unsigned int dataTypeSize)</td></tr>
<tr class="separator:a86d7a7168ac00b75b4971f9aad623698"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a536bd930213ea3fd689fc28c8589fc4a"><td class="memItemLeft" align="right" valign="top">std::vector&lt; uint32_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a536bd930213ea3fd689fc28c8589fc4a">IndexToCoordinates</a> (std::vector&lt; uint32_t &gt; &amp;shape, uint32_t index)</td></tr>
<tr class="separator:a536bd930213ea3fd689fc28c8589fc4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8b5472bb95f8226e5c82b95c1de1dab0"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a8b5472bb95f8226e5c82b95c1de1dab0">CoordinatesToIndex</a> (<a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;shape, std::vector&lt; uint32_t &gt; &amp;coordinates)</td></tr>
<tr class="separator:a8b5472bb95f8226e5c82b95c1de1dab0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae789852d4625b71ca83474fe12c511e8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ae789852d4625b71ca83474fe12c511e8">Tile</a> (const <a class="el" href="structarmnn_1_1_tile_descriptor.html">TileDescriptor</a> &amp;params, const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;inputInfo, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;inputDecoder, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;outputEncoder)</td></tr>
<tr class="separator:ae789852d4625b71ca83474fe12c511e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:affec174d91f234497dfbceba5e251dee"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#affec174d91f234497dfbceba5e251dee">TransposeConvolution2dImpl</a> (const <a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.html">TransposeConvolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;inputShape, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;inputDecoder, const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;outputShape, <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;outputEncoder, const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;weightsShape, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;weightsDecoder, <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; *biasesDecoder)</td></tr>
<tr class="separator:affec174d91f234497dfbceba5e251dee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a40fd83a6a69162220440c353f27e8c78"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a40fd83a6a69162220440c353f27e8c78">TosaRefBackendId</a> ()</td></tr>
<tr class="separator:a40fd83a6a69162220440c353f27e8c78"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab6c9f1100acdf0b61ae55acd3447e734"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab6c9f1100acdf0b61ae55acd3447e734">TosaRefTensorHandleFactoryId</a> ()</td></tr>
<tr class="separator:ab6c9f1100acdf0b61ae55acd3447e734"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9cc3716d6ece2068215d72aae0ad7918"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a9cc3716d6ece2068215d72aae0ad7918">TosaRefPreCompiledWorkloadValidate</a> (std::string *)</td></tr>
<tr class="separator:a9cc3716d6ece2068215d72aae0ad7918"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:abdcd184ed3bd648bb31d385040cafd5d"><td class="memItemLeft" align="right" valign="top">constexpr unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a> = 5U</td></tr>
<tr class="separator:abdcd184ed3bd648bb31d385040cafd5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a602ddc6408c3347ba4c1eba623003984"><td class="memItemLeft" align="right" valign="top">constexpr unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a602ddc6408c3347ba4c1eba623003984">LOWEST_CAPTURE_PERIOD</a> = 10000u</td></tr>
<tr class="memdesc:a602ddc6408c3347ba4c1eba623003984"><td class="mdescLeft">&#160;</td><td class="mdescRight">The lowest performance data capture interval we support is 10 miliseconds. <a href="namespacearmnn.html#a602ddc6408c3347ba4c1eba623003984">More...</a><br /></td></tr>
<tr class="separator:a602ddc6408c3347ba4c1eba623003984"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a61d2390e44601830cdc9b400b9910bbf"><td class="memItemLeft" align="right" valign="top">constexpr unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a61d2390e44601830cdc9b400b9910bbf">EXPIRE_RATE</a> = 3U</td></tr>
<tr class="memdesc:a61d2390e44601830cdc9b400b9910bbf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Variable to control expire rate of priority queue. <a href="namespacearmnn.html#a61d2390e44601830cdc9b400b9910bbf">More...</a><br /></td></tr>
<tr class="separator:a61d2390e44601830cdc9b400b9910bbf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a43ecd194778b7653578044060ba8695e"><td class="memItemLeft" align="right" valign="top">constexpr std::size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a43ecd194778b7653578044060ba8695e">g_ProfilingEventCountHint</a> = 1024</td></tr>
<tr class="separator:a43ecd194778b7653578044060ba8695e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41794552ff67b0dad16de60f9b8e7d7c"><td class="memItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a41794552ff67b0dad16de60f9b8e7d7c">g_WriteProfilingEventSequence</a> = true</td></tr>
<tr class="separator:a41794552ff67b0dad16de60f9b8e7d7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aacc0d11e271ebbfcff9d613dd17604aa"><td class="memItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aacc0d11e271ebbfcff9d613dd17604aa">g_AggregateProfilingEventsByInference</a> = true</td></tr>
<tr class="separator:aacc0d11e271ebbfcff9d613dd17604aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ce7e56eb10e440463f09eee8f213adc"><td class="memItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a6ce7e56eb10e440463f09eee8f213adc">g_WriteReportToStdOutOnProfilerDestruction</a> = false</td></tr>
<tr class="separator:a6ce7e56eb10e440463f09eee8f213adc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acb96b901eccb58267042c6bb7d41185f"><td class="memItemLeft" align="right" valign="top">thread_local <a class="el" href="classarmnn_1_1_i_profiler.html">IProfiler</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#acb96b901eccb58267042c6bb7d41185f">tl_Profiler</a> = nullptr</td></tr>
<tr class="separator:acb96b901eccb58267042c6bb7d41185f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa2b4a5cd5b7f1555cba80a6072824024"><td class="memItemLeft" align="right" valign="top">constexpr size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#aa2b4a5cd5b7f1555cba80a6072824024">wordSize</a> = sizeof(size_t) * 8</td></tr>
<tr class="separator:aa2b4a5cd5b7f1555cba80a6072824024"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afcf2f9c617481601a888f1f9425586ba"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespacearmnn.html#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#afcf2f9c617481601a888f1f9425586ba">gpuFsaCapabilities</a> (&quot;GpuFsa&quot;, { {&quot;NonConstWeights&quot;, false}, {&quot;AsyncExecution&quot;, false}, {&quot;ProtectedContentAllocation&quot;, false}, {&quot;ConstantTensorsAsInputs&quot;, true}, {&quot;PreImportIOTensors&quot;, false}, {&quot;ExternallyManagedMemory&quot;, false}, {&quot;MultiAxisPacking&quot;, false}, {&quot;SingleAxisPacking&quot;, false} })</td></tr>
<tr class="separator:afcf2f9c617481601a888f1f9425586ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2cafcc09d062f993b17f53499933a952"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespacearmnn.html#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a2cafcc09d062f993b17f53499933a952">cpuAccCapabilities</a> (&quot;CpuAcc&quot;, { {&quot;NonConstWeights&quot;, true}, {&quot;AsyncExecution&quot;, false}, {&quot;ProtectedContentAllocation&quot;, false}, {&quot;ConstantTensorsAsInputs&quot;, true}, {&quot;PreImportIOTensors&quot;, false}, {&quot;ExternallyManagedMemory&quot;, true}, {&quot;MultiAxisPacking&quot;, false}, {&quot;SingleAxisPacking&quot;, true}, {&quot;HasFp16&quot;, arm_compute::CPUInfo::get().has_fp16()} })</td></tr>
<tr class="separator:a2cafcc09d062f993b17f53499933a952"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a57af7c2f79db8ab6ccc1611a2172b6e6"><td class="memItemLeft" align="right" valign="top">const std::set&lt; <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a57af7c2f79db8ab6ccc1611a2172b6e6">paddingRequiredLayers</a></td></tr>
<tr class="separator:a57af7c2f79db8ab6ccc1611a2172b6e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a35f80da9b1316b2d338f4615906ef30d"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespacearmnn.html#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#a35f80da9b1316b2d338f4615906ef30d">cpuRefCapabilities</a> (&quot;CpuRef&quot;, { {&quot;NonConstWeights&quot;, true}, {&quot;AsyncExecution&quot;, true}, {&quot;ProtectedContentAllocation&quot;, false}, {&quot;ConstantTensorsAsInputs&quot;, true}, {&quot;PreImportIOTensors&quot;, true}, {&quot;ExternallyManagedMemory&quot;, true}, {&quot;MultiAxisPacking&quot;, false}, {&quot;SingleAxisPacking&quot;, true}, {&quot;HasFp16&quot;, true} })</td></tr>
<tr class="separator:a35f80da9b1316b2d338f4615906ef30d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab7a35288d329560ff76ddf785e852507"><td class="memItemLeft" align="right" valign="top">const std::set&lt; <a class="el" href="namespacearmnn.html#ab24d74259a053475f6040dd701a01952">armnn::BackendCapability</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.html#ab7a35288d329560ff76ddf785e852507">oldCpuRefCapabilities</a></td></tr>
<tr class="separator:ab7a35288d329560ff76ddf785e852507"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Copyright (c) 2021 ARM Limited and Contributors. </p>
<p><a class="el" href="classarmnn_1_1_optional.html">Optional</a> is a drop in replacement for std::optional until we migrate to c++-17.</p>
<p>Copyright (c) 2022-2023 ARM Limited and Contributors.</p>
<p>Copyright (c) 2021-2023 ARM Limited and Contributors.</p>
<p>Copyright (c) 2022-2024 Arm Ltd and Contributors.</p>
<p>Copyright (c) 2022 ARM Limited and Contributors.</p>
<p>Create pages for each tool so they appear nicely in the doxygen tree-view.</p>
<p>Copyright (c) 2021-2024 ARM Limited and Contributors.</p>
<p>All rights reserved.</p>
<p>SPDX-License-Identifier: MIT</p>
<p>Subpages are not listed there. Also we can overwrite the page name this way.</p>
<p>Subpages are not listed there.</p>
<p>Note: The parser, serializer and deserializer pages are created in 01_parsers.dox or 02_deserializer_serializer.dox</p>
<p>Only a subset of the optional features are implemented that we intend to use in ArmNN. There are two distinct implementations here:</p>
<p>1, for normal constructable/destructable types and reference types 2, for reference types The std::optional features we support are:</p>
<ul>
<li>has_value() and operator bool() to tell if the optional has a value</li>
<li>value() returns a reference to the held object </li>
</ul>
</div><h2 class="groupheader">Typedef Documentation</h2>
<a id="af206e37bc077be6083853fd8365b999a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af206e37bc077be6083853fd8365b999a">&#9670;&nbsp;</a></span>ACLMemManagerOnDemand</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#af206e37bc077be6083853fd8365b999a">ACLMemManagerOnDemand</a> = std::shared_ptr&lt;arm_compute::MemoryManagerOnDemand&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_fully_connected_workload_8cpp_source.html#l00022">22</a> of file <a class="el" href="_neon_fully_connected_workload_8cpp_source.html">NeonFullyConnectedWorkload.cpp</a>.</p>
</div>
</div>
<a id="a2a5caf3721af872f43c7642fec9449bc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2a5caf3721af872f43c7642fec9449bc">&#9670;&nbsp;</a></span>AdditionalInfoObjectPtr</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a2a5caf3721af872f43c7642fec9449bc">AdditionalInfoObjectPtr</a> = std::shared_ptr&lt;void&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_8hpp_source.html#l00228">228</a> of file <a class="el" href="_layer_8hpp_source.html">Layer.hpp</a>.</p>
</div>
</div>
<a id="aa9c506b558b8aa33a228b15164f40dc3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa9c506b558b8aa33a228b15164f40dc3">&#9670;&nbsp;</a></span>BackendCapabilities</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> = <a class="el" href="structarmnn_1_1_backend_options.html">BackendOptions</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_backend_options_8hpp_source.html#l00019">19</a> of file <a class="el" href="_backend_options_8hpp_source.html">BackendOptions.hpp</a>.</p>
</div>
</div>
<a id="a1854d9cda81304325664363c1fd0fb27"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1854d9cda81304325664363c1fd0fb27">&#9670;&nbsp;</a></span>BackendIdSet</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> = std::unordered_set&lt;<a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_backend_id_8hpp_source.html#l00193">193</a> of file <a class="el" href="_backend_id_8hpp_source.html">BackendId.hpp</a>.</p>
</div>
</div>
<a id="ac858d91eedb7b4dba1bcd0aa760ab510"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac858d91eedb7b4dba1bcd0aa760ab510">&#9670;&nbsp;</a></span>BackendIdVector</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ac858d91eedb7b4dba1bcd0aa760ab510">BackendIdVector</a> = std::vector&lt;<a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_backend_id_8hpp_source.html#l00192">192</a> of file <a class="el" href="_backend_id_8hpp_source.html">BackendId.hpp</a>.</p>
</div>
</div>
<a id="a9173495a61a0092b5f38b855f02c3585"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9173495a61a0092b5f38b855f02c3585">&#9670;&nbsp;</a></span>BackendsMap</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> = std::map&lt;<a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a>, std::unique_ptr&lt;class <a class="el" href="classarmnn_1_1_i_backend_internal.html">IBackendInternal</a>&gt; &gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8hpp_source.html#l00285">285</a> of file <a class="el" href="_network_8hpp_source.html">Network.hpp</a>.</p>
</div>
</div>
<a id="a20d2055c37fedf3f39db9facf2c8c697"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a20d2055c37fedf3f39db9facf2c8c697">&#9670;&nbsp;</a></span>BaseFloat32ComparisonWorkload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a20d2055c37fedf3f39db9facf2c8c697">BaseFloat32ComparisonWorkload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.html">MultiTypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_8hpp_source.html#l00234">234</a> of file <a class="el" href="_workload_8hpp_source.html">Workload.hpp</a>.</p>
</div>
</div>
<a id="a9cbc0957cf0637cc3fd9702086117cc0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9cbc0957cf0637cc3fd9702086117cc0">&#9670;&nbsp;</a></span>BaseUint8ComparisonWorkload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a9cbc0957cf0637cc3fd9702086117cc0">BaseUint8ComparisonWorkload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.html">MultiTypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_8hpp_source.html#l00239">239</a> of file <a class="el" href="_workload_8hpp_source.html">Workload.hpp</a>.</p>
</div>
</div>
<a id="a96b023ab3b395df841cc706f77c236cc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a96b023ab3b395df841cc706f77c236cc">&#9670;&nbsp;</a></span>BFloat16ToFloat32Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a96b023ab3b395df841cc706f77c236cc">BFloat16ToFloat32Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.html">MultiTypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_8hpp_source.html#l00244">244</a> of file <a class="el" href="_workload_8hpp_source.html">Workload.hpp</a>.</p>
</div>
</div>
<a id="a280670a263dc4fd40491f6d0a2737f44"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a280670a263dc4fd40491f6d0a2737f44">&#9670;&nbsp;</a></span>BindingPointInfo</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a280670a263dc4fd40491f6d0a2737f44">BindingPointInfo</a> = std::pair&lt;<a class="el" href="namespacearmnn.html#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a>, <a class="el" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_tensor_8hpp_source.html#l00276">276</a> of file <a class="el" href="_tensor_8hpp_source.html">Tensor.hpp</a>.</p>
</div>
</div>
<a id="ab539ef5a0c152536da71c8fcc065efb5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab539ef5a0c152536da71c8fcc065efb5">&#9670;&nbsp;</a></span>BooleanWorkload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ab539ef5a0c152536da71c8fcc065efb5">BooleanWorkload</a> = <a class="el" href="classarmnn_1_1_typed_workload.html">TypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_8hpp_source.html#l00229">229</a> of file <a class="el" href="_workload_8hpp_source.html">Workload.hpp</a>.</p>
</div>
</div>
<a id="af244057f8225833d8e9dc03949a6f0a2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af244057f8225833d8e9dc03949a6f0a2">&#9670;&nbsp;</a></span>CompiledBlobDeleter</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef std::function&lt; void(const void *)&gt; <a class="el" href="namespacearmnn.html#af244057f8225833d8e9dc03949a6f0a2">CompiledBlobDeleter</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.html#l00342">342</a> of file <a class="el" href="_i_network_8hpp_source.html">INetwork.hpp</a>.</p>
</div>
</div>
<a id="af362583b7b4c471c434cb0fdb86c2ae2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af362583b7b4c471c434cb0fdb86c2ae2">&#9670;&nbsp;</a></span>CompiledBlobPtr</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef std::unique_ptr&lt; void, <a class="el" href="namespacearmnn.html#af244057f8225833d8e9dc03949a6f0a2">CompiledBlobDeleter</a> &gt; <a class="el" href="namespacearmnn.html#af362583b7b4c471c434cb0fdb86c2ae2">CompiledBlobPtr</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.html#l00343">343</a> of file <a class="el" href="_i_network_8hpp_source.html">INetwork.hpp</a>.</p>
</div>
</div>
<a id="a7863c179ff92feec660c48ab7b95ae55"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7863c179ff92feec660c48ab7b95ae55">&#9670;&nbsp;</a></span>ConcatDescriptor</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a7863c179ff92feec660c48ab7b95ae55">ConcatDescriptor</a> = <a class="el" href="structarmnn_1_1_origins_descriptor.html">OriginsDescriptor</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_descriptors_fwd_8hpp_source.html#l00060">60</a> of file <a class="el" href="_descriptors_fwd_8hpp_source.html">DescriptorsFwd.hpp</a>.</p>
</div>
</div>
<a id="ac6e86c1def7f674d3c4cb7f577874aa6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac6e86c1def7f674d3c4cb7f577874aa6">&#9670;&nbsp;</a></span>Coordinates</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">Coordinates</a> = std::array&lt;unsigned int, <a class="el" href="namespacearmnn.html#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_internal_types_8hpp_source.html#l00015">15</a> of file <a class="el" href="_internal_types_8hpp_source.html">InternalTypes.hpp</a>.</p>
</div>
</div>
<a id="afda19bd482bb55233fe27b4c2e044a3d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afda19bd482bb55233fe27b4c2e044a3d">&#9670;&nbsp;</a></span>CopyAndImportFactoryPairs</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#afda19bd482bb55233fe27b4c2e044a3d">CopyAndImportFactoryPairs</a> = std::map&lt;<a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_tensor_handle_factory_registry_8hpp_source.html#l00020">20</a> of file <a class="el" href="_tensor_handle_factory_registry_8hpp_source.html">TensorHandleFactoryRegistry.hpp</a>.</p>
</div>
</div>
<a id="a15f3ad9b5e4e3d46b0a6dda246a7bc28"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a15f3ad9b5e4e3d46b0a6dda246a7bc28">&#9670;&nbsp;</a></span>DebugCallbackFunction</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a15f3ad9b5e4e3d46b0a6dda246a7bc28">DebugCallbackFunction</a> = std::function&lt;void(<a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a> guid, unsigned int slotIndex, <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a>* tensorHandle)&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p>Define the type of callback for the Debug layer to call. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">guid</td><td>- guid of layer connected to the input of the Debug layer </td></tr>
<tr><td class="paramname">slotIndex</td><td>- index of the output slot connected to the input of the Debug layer </td></tr>
<tr><td class="paramname">tensorHandle</td><td>- <a class="el" href="classarmnn_1_1_tensor_handle.html">TensorHandle</a> for the input tensor to the Debug layer </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00398">398</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
</div>
</div>
<a id="a3647f60510bc8ddaced01c51b0ee8714"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3647f60510bc8ddaced01c51b0ee8714">&#9670;&nbsp;</a></span>DepthToSpaceDescriptor</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.html">SpaceToDepthDescriptor</a> <a class="el" href="namespacearmnn.html#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>A DepthToSpaceDescriptor for the <a class="el" href="classarmnn_1_1_depth_to_space_layer.html" title="This layer represents a DepthToSpace operation.">DepthToSpaceLayer</a>. </p>
<p class="definition">Definition at line <a class="el" href="_descriptors_8hpp_source.html#l01099">1099</a> of file <a class="el" href="_descriptors_8hpp_source.html">Descriptors.hpp</a>.</p>
</div>
</div>
<a id="a293695a94110c1a0eb77e29c22dce79a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a293695a94110c1a0eb77e29c22dce79a">&#9670;&nbsp;</a></span>Dimensions</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a293695a94110c1a0eb77e29c22dce79a">Dimensions</a> = std::array&lt;unsigned int, <a class="el" href="namespacearmnn.html#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_internal_types_8hpp_source.html#l00016">16</a> of file <a class="el" href="_internal_types_8hpp_source.html">InternalTypes.hpp</a>.</p>
</div>
</div>
<a id="a754d43dc24a0fe36ecb3044d8f13a413"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a754d43dc24a0fe36ecb3044d8f13a413">&#9670;&nbsp;</a></span>DynamicBackendPtr</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a754d43dc24a0fe36ecb3044d8f13a413">DynamicBackendPtr</a> = std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_dynamic_backend.html">DynamicBackend</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_dynamic_backend_8hpp_source.html#l00054">54</a> of file <a class="el" href="_dynamic_backend_8hpp_source.html">DynamicBackend.hpp</a>.</p>
</div>
</div>
<a id="a947e07902b1b5d98b57eeae34053146b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a947e07902b1b5d98b57eeae34053146b">&#9670;&nbsp;</a></span>FactoryId</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef <a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a> <a class="el" href="namespacearmnn.html#a947e07902b1b5d98b57eeae34053146b">FactoryId</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_mock_tensor_handle_factory_8cpp_source.html#l00012">12</a> of file <a class="el" href="_mock_tensor_handle_factory_8cpp_source.html">MockTensorHandleFactory.cpp</a>.</p>
</div>
</div>
<a id="a827d59b5a779a8089017802172817f3c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a827d59b5a779a8089017802172817f3c">&#9670;&nbsp;</a></span>Float16ToFloat32Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a827d59b5a779a8089017802172817f3c">Float16ToFloat32Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.html">MultiTypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_8hpp_source.html#l00254">254</a> of file <a class="el" href="_workload_8hpp_source.html">Workload.hpp</a>.</p>
</div>
</div>
<a id="a6ef601b454db749320636d9425b1f4c2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ef601b454db749320636d9425b1f4c2">&#9670;&nbsp;</a></span>Float32ToBFloat16Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a6ef601b454db749320636d9425b1f4c2">Float32ToBFloat16Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.html">MultiTypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_8hpp_source.html#l00249">249</a> of file <a class="el" href="_workload_8hpp_source.html">Workload.hpp</a>.</p>
</div>
</div>
<a id="a6486138451112140f98516c0bee18615"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6486138451112140f98516c0bee18615">&#9670;&nbsp;</a></span>Float32ToFloat16Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a6486138451112140f98516c0bee18615">Float32ToFloat16Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.html">MultiTypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_8hpp_source.html#l00259">259</a> of file <a class="el" href="_workload_8hpp_source.html">Workload.hpp</a>.</p>
</div>
</div>
<a id="a0493144f15b35804a133c9aa0b63fcc9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0493144f15b35804a133c9aa0b63fcc9">&#9670;&nbsp;</a></span>Float32Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a0493144f15b35804a133c9aa0b63fcc9">Float32Workload</a> = <a class="el" href="classarmnn_1_1_typed_workload.html">TypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_8hpp_source.html#l00220">220</a> of file <a class="el" href="_workload_8hpp_source.html">Workload.hpp</a>.</p>
</div>
</div>
<a id="abaedcfd0ae08790c03bfe8ba7586dd84"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abaedcfd0ae08790c03bfe8ba7586dd84">&#9670;&nbsp;</a></span>FloatWorkload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#abaedcfd0ae08790c03bfe8ba7586dd84">FloatWorkload</a> = <a class="el" href="classarmnn_1_1_typed_workload.html">TypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_8hpp_source.html#l00217">217</a> of file <a class="el" href="_workload_8hpp_source.html">Workload.hpp</a>.</p>
</div>
</div>
<a id="a0b49aa352b84d572942185ce72cef751"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0b49aa352b84d572942185ce72cef751">&#9670;&nbsp;</a></span>Half</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef half_float::half <a class="el" href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">Half</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_half_8hpp_source.html#l00022">22</a> of file <a class="el" href="_half_8hpp_source.html">Half.hpp</a>.</p>
</div>
</div>
<a id="a4b3cb628c15e1eea1b09ec848e9ae8c4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4b3cb628c15e1eea1b09ec848e9ae8c4">&#9670;&nbsp;</a></span>HighResolutionClock</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a4b3cb628c15e1eea1b09ec848e9ae8c4">HighResolutionClock</a> = std::chrono::high_resolution_clock::time_point</td>
</tr>
</table>
</div><div class="memdoc">
<p>Define a timer and associated inference ID for recording execution times. </p>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00401">401</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
</div>
</div>
<a id="a65a0ad0a7b807e70295481a7b9cb93ac"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a65a0ad0a7b807e70295481a7b9cb93ac">&#9670;&nbsp;</a></span>IBackendContextUniquePtr</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a65a0ad0a7b807e70295481a7b9cb93ac">IBackendContextUniquePtr</a> = std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_i_backend_context.html">IBackendContext</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_i_backend_context_8hpp_source.html#l00034">34</a> of file <a class="el" href="_i_backend_context_8hpp_source.html">IBackendContext.hpp</a>.</p>
</div>
</div>
<a id="ade0af9dacaa52cafdd701bef2e901c77"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ade0af9dacaa52cafdd701bef2e901c77">&#9670;&nbsp;</a></span>IBackendInternalUniquePtr</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_backend_internal.html">IBackendInternal</a> &gt; <a class="el" href="namespacearmnn.html#ade0af9dacaa52cafdd701bef2e901c77">IBackendInternalUniquePtr</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_backend_registry_8hpp_source.html#l00032">32</a> of file <a class="el" href="_backend_registry_8hpp_source.html">BackendRegistry.hpp</a>.</p>
</div>
</div>
<a id="ae18caa7ee6287aa7f8c2a5ce6bc92382"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae18caa7ee6287aa7f8c2a5ce6bc92382">&#9670;&nbsp;</a></span>IBackendSharedPtr</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ae18caa7ee6287aa7f8c2a5ce6bc92382">IBackendSharedPtr</a> = std::shared_ptr&lt;<a class="el" href="classarmnn_1_1_i_backend.html">IBackend</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00282">282</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
</div>
</div>
<a id="a5a665483e56a688e9f8180accdf72d80"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5a665483e56a688e9f8180accdf72d80">&#9670;&nbsp;</a></span>IBackendUniquePtr</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a5a665483e56a688e9f8180accdf72d80">IBackendUniquePtr</a> = std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_i_backend.html">IBackend</a>, void(*)(<a class="el" href="classarmnn_1_1_i_backend.html">IBackend</a>* backend)&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00283">283</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
</div>
</div>
<a id="a2d3a708a26ac6d77bf8f15506e89a25a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2d3a708a26ac6d77bf8f15506e89a25a">&#9670;&nbsp;</a></span>IGpuAccTunedParametersPtr</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a2d3a708a26ac6d77bf8f15506e89a25a">IGpuAccTunedParametersPtr</a> = std::shared_ptr&lt;<a class="el" href="classarmnn_1_1_i_gpu_acc_tuned_parameters.html">IGpuAccTunedParameters</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p>The following API is replaced by the backend options API. </p>
<p class="definition">Definition at line <a class="el" href="_i_runtime_8hpp_source.html#l00301">301</a> of file <a class="el" href="_i_runtime_8hpp_source.html">IRuntime.hpp</a>.</p>
</div>
</div>
<a id="ac77c71a352f1e7f9fa4d9e4ceafa81d9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac77c71a352f1e7f9fa4d9e4ceafa81d9">&#9670;&nbsp;</a></span>IInitialiseProfilingService</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ac77c71a352f1e7f9fa4d9e4ceafa81d9">IInitialiseProfilingService</a> = arm::pipe::IInitialiseProfilingService</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_runtime_8hpp_source.html#l00028">28</a> of file <a class="el" href="_runtime_8hpp_source.html">Runtime.hpp</a>.</p>
</div>
</div>
<a id="a11fa919c11fe46aad613b2e960fcfe90"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a11fa919c11fe46aad613b2e960fcfe90">&#9670;&nbsp;</a></span>ILayerSupportSharedPtr</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a11fa919c11fe46aad613b2e960fcfe90">ILayerSupportSharedPtr</a> = std::shared_ptr&lt;<a class="el" href="classarmnn_1_1_i_layer_support.html">ILayerSupport</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_i_layer_support_8hpp_source.html#l00040">40</a> of file <a class="el" href="_i_layer_support_8hpp_source.html">ILayerSupport.hpp</a>.</p>
</div>
</div>
<a id="a12bff6d51d63dac1375c89bc8415dc46"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a12bff6d51d63dac1375c89bc8415dc46">&#9670;&nbsp;</a></span>IMemoryManagerUniquePtr</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a12bff6d51d63dac1375c89bc8415dc46">IMemoryManagerUniquePtr</a> = std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_i_memory_manager.html">IMemoryManager</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_i_memory_manager_8hpp_source.html#l00024">24</a> of file <a class="el" href="_i_memory_manager_8hpp_source.html">IMemoryManager.hpp</a>.</p>
</div>
</div>
<a id="a1c5ec805688cb558465a82a8d9f56a90"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1c5ec805688cb558465a82a8d9f56a90">&#9670;&nbsp;</a></span>ImportedInputId</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a1c5ec805688cb558465a82a8d9f56a90">ImportedInputId</a> = unsigned int</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00310">310</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
</div>
</div>
<a id="ac68a434f0e78e33726bfb22a39ec813f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac68a434f0e78e33726bfb22a39ec813f">&#9670;&nbsp;</a></span>ImportedOutputId</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ac68a434f0e78e33726bfb22a39ec813f">ImportedOutputId</a> = unsigned int</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00311">311</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
</div>
</div>
<a id="ace74f6f9feb95a964a49d79458232703"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ace74f6f9feb95a964a49d79458232703">&#9670;&nbsp;</a></span>INetworkPtr</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ace74f6f9feb95a964a49d79458232703">INetworkPtr</a> = std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_i_network.html">INetwork</a>, void(*)(<a class="el" href="classarmnn_1_1_i_network.html">INetwork</a>* network)&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.html#l00339">339</a> of file <a class="el" href="_i_network_8hpp_source.html">INetwork.hpp</a>.</p>
</div>
</div>
<a id="a51611ed886390df47733157d0c105453"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a51611ed886390df47733157d0c105453">&#9670;&nbsp;</a></span>InferenceTimingPair</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a51611ed886390df47733157d0c105453">InferenceTimingPair</a> = std::pair&lt;<a class="el" href="namespacearmnn.html#a4b3cb628c15e1eea1b09ec848e9ae8c4">HighResolutionClock</a>, <a class="el" href="namespacearmnn.html#a4b3cb628c15e1eea1b09ec848e9ae8c4">HighResolutionClock</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00402">402</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
</div>
</div>
<a id="a2231ac018fe2c465f2d42fef597d67e7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2231ac018fe2c465f2d42fef597d67e7">&#9670;&nbsp;</a></span>InputQueueDescriptor</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a2231ac018fe2c465f2d42fef597d67e7">InputQueueDescriptor</a> = <a class="el" href="structarmnn_1_1_mem_copy_queue_descriptor.html">MemCopyQueueDescriptor</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00091">91</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p>
</div>
</div>
<a id="aa01bce88f89975a5a031db4cc8861527"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa01bce88f89975a5a031db4cc8861527">&#9670;&nbsp;</a></span>InputTensors</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#aa01bce88f89975a5a031db4cc8861527">InputTensors</a> = std::vector&lt;std::pair&lt;<a class="el" href="namespacearmnn.html#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a>, class <a class="el" href="classarmnn_1_1_const_tensor.html">ConstTensor</a>&gt; &gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_tensor_8hpp_source.html#l00394">394</a> of file <a class="el" href="_tensor_8hpp_source.html">Tensor.hpp</a>.</p>
</div>
</div>
<a id="a3e4b88b993c90b274e0bd268c35d798e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3e4b88b993c90b274e0bd268c35d798e">&#9670;&nbsp;</a></span>Int32Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a3e4b88b993c90b274e0bd268c35d798e">Int32Workload</a> = <a class="el" href="classarmnn_1_1_typed_workload.html">TypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_8hpp_source.html#l00226">226</a> of file <a class="el" href="_workload_8hpp_source.html">Workload.hpp</a>.</p>
</div>
</div>
<a id="a674efcf6cbdb9e831d653ff0e821fb38"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a674efcf6cbdb9e831d653ff0e821fb38">&#9670;&nbsp;</a></span>IOptimizedNetworkPtr</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> = std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a>, void(*)(<a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a>* network)&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.html#l00340">340</a> of file <a class="el" href="_i_network_8hpp_source.html">INetwork.hpp</a>.</p>
</div>
</div>
<a id="a8f7d7a1df79013aed46ae67d31c239b5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8f7d7a1df79013aed46ae67d31c239b5">&#9670;&nbsp;</a></span>IReportStructure</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a8f7d7a1df79013aed46ae67d31c239b5">IReportStructure</a> = arm::pipe::IReportStructure</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_runtime_8hpp_source.html#l00027">27</a> of file <a class="el" href="_runtime_8hpp_source.html">Runtime.hpp</a>.</p>
</div>
</div>
<a id="a150468a02bd7b2d2d061c4aaaee939f0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a150468a02bd7b2d2d061c4aaaee939f0">&#9670;&nbsp;</a></span>IRuntimePtr</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a150468a02bd7b2d2d061c4aaaee939f0">IRuntimePtr</a> = std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_i_runtime.html">IRuntime</a>, void(*)(<a class="el" href="classarmnn_1_1_i_runtime.html">IRuntime</a>* runtime)&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_i_runtime_8hpp_source.html#l00041">41</a> of file <a class="el" href="_i_runtime_8hpp_source.html">IRuntime.hpp</a>.</p>
</div>
</div>
<a id="ab8cf8f9fb6792e654c2d8d8382f6f01b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab8cf8f9fb6792e654c2d8d8382f6f01b">&#9670;&nbsp;</a></span>LayerBindingId</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> = int</td>
</tr>
</table>
</div><div class="memdoc">
<p>Type of identifiers for bindable layers (inputs, outputs). </p>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00309">309</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
</div>
</div>
<a id="a419086ecb4dc9d0f9e5d8933c87e2ea2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a419086ecb4dc9d0f9e5d8933c87e2ea2">&#9670;&nbsp;</a></span>LayerPriority</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a419086ecb4dc9d0f9e5d8933c87e2ea2">LayerPriority</a> = unsigned int</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_8hpp_source.html#l00227">227</a> of file <a class="el" href="_layer_8hpp_source.html">Layer.hpp</a>.</p>
</div>
</div>
<a id="a6b5db6cc9aad8ec0ac7b14f859aacdab"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6b5db6cc9aad8ec0ac7b14f859aacdab">&#9670;&nbsp;</a></span>LayerTypeOf</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a6b5db6cc9aad8ec0ac7b14f859aacdab">LayerTypeOf</a> = typename <a class="el" href="structarmnn_1_1_layer_type_of_impl.html">LayerTypeOfImpl</a>&lt;Type&gt;::Type</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00095">95</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a12f6b97ee3f1060ecb6240e022678a8b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a12f6b97ee3f1060ecb6240e022678a8b">&#9670;&nbsp;</a></span>LoadedNetworks</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a12f6b97ee3f1060ecb6240e022678a8b">LoadedNetworks</a> = std::unordered_map&lt;<a class="el" href="namespacearmnn.html#a0d8160388a127c1a23b37bc88dc6e2ec">NetworkId</a>, std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_loaded_network.html">LoadedNetwork</a>&gt; &gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_runtime_8hpp_source.html#l00026">26</a> of file <a class="el" href="_runtime_8hpp_source.html">Runtime.hpp</a>.</p>
</div>
</div>
<a id="ac14705405cbcdd580df613de6766fe65"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac14705405cbcdd580df613de6766fe65">&#9670;&nbsp;</a></span>LogSoftmaxDescriptor</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef <a class="el" href="structarmnn_1_1_softmax_descriptor.html">SoftmaxDescriptor</a> <a class="el" href="namespacearmnn.html#ac14705405cbcdd580df613de6766fe65">LogSoftmaxDescriptor</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>A LogSoftmaxDescriptor for the <a class="el" href="classarmnn_1_1_log_softmax_layer.html" title="This layer represents a log softmax operation.">LogSoftmaxLayer</a>. </p>
<p class="definition">Definition at line <a class="el" href="_descriptors_8hpp_source.html#l00196">196</a> of file <a class="el" href="_descriptors_8hpp_source.html">Descriptors.hpp</a>.</p>
</div>
</div>
<a id="abb25db39e8d7f30b3736701b65ce514b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abb25db39e8d7f30b3736701b65ce514b">&#9670;&nbsp;</a></span>MemoryOptimizerStrategiesMapRef</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#abb25db39e8d7f30b3736701b65ce514b">MemoryOptimizerStrategiesMapRef</a> = std::unordered_map&lt;<a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a>, std::shared_ptr&lt;<a class="el" href="classarmnn_1_1_i_memory_optimizer_strategy.html">IMemoryOptimizerStrategy</a>&gt; &gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_backend_registry_8hpp_source.html#l00033">33</a> of file <a class="el" href="_backend_registry_8hpp_source.html">BackendRegistry.hpp</a>.</p>
</div>
</div>
<a id="a5b05f3b7208ec7cea3338e30057c0bac"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5b05f3b7208ec7cea3338e30057c0bac">&#9670;&nbsp;</a></span>MemorySourceFlags</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a> = unsigned int</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_memory_sources_8hpp_source.html#l00015">15</a> of file <a class="el" href="_memory_sources_8hpp_source.html">MemorySources.hpp</a>.</p>
</div>
</div>
<a id="a003d213dd28b0b8c0f26fbf268ccb975"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a003d213dd28b0b8c0f26fbf268ccb975">&#9670;&nbsp;</a></span>MergerDescriptor</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a003d213dd28b0b8c0f26fbf268ccb975">MergerDescriptor</a> = <a class="el" href="structarmnn_1_1_origins_descriptor.html">OriginsDescriptor</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>MergerDescriptor is deprecated, use ConcatDescriptor instead. </p>
<p class="definition">Definition at line <a class="el" href="_descriptors_fwd_8hpp_source.html#l00064">64</a> of file <a class="el" href="_descriptors_fwd_8hpp_source.html">DescriptorsFwd.hpp</a>.</p>
</div>
</div>
<a id="a308ba160745ba35e1de8d698d0139eb4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a308ba160745ba35e1de8d698d0139eb4">&#9670;&nbsp;</a></span>MergerQueueDescriptor</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a308ba160745ba35e1de8d698d0139eb4">MergerQueueDescriptor</a> = <a class="el" href="structarmnn_1_1_concat_queue_descriptor.html">ConcatQueueDescriptor</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00149">149</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p>
</div>
</div>
<a id="a5b6893cda5b69359a4244c06054da18f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5b6893cda5b69359a4244c06054da18f">&#9670;&nbsp;</a></span>ModelOptions</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> = std::vector&lt;<a class="el" href="structarmnn_1_1_backend_options.html">BackendOptions</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_backend_options_8hpp_source.html#l00018">18</a> of file <a class="el" href="_backend_options_8hpp_source.html">BackendOptions.hpp</a>.</p>
</div>
</div>
<a id="a0d8160388a127c1a23b37bc88dc6e2ec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0d8160388a127c1a23b37bc88dc6e2ec">&#9670;&nbsp;</a></span>NetworkId</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int <a class="el" href="namespacearmnn.html#a0d8160388a127c1a23b37bc88dc6e2ec">NetworkId</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_i_runtime_8hpp_source.html#l00035">35</a> of file <a class="el" href="_i_runtime_8hpp_source.html">IRuntime.hpp</a>.</p>
</div>
</div>
<a id="a08eb5e20e6b0ce43c5729e8f88b6a910"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a08eb5e20e6b0ce43c5729e8f88b6a910">&#9670;&nbsp;</a></span>NetworkImplPtr</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a08eb5e20e6b0ce43c5729e8f88b6a910">NetworkImplPtr</a> = std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_network_impl.html">NetworkImpl</a>, void (*)(<a class="el" href="classarmnn_1_1_network_impl.html">NetworkImpl</a>* network)&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8hpp_source.html#l00029">29</a> of file <a class="el" href="_network_8hpp_source.html">Network.hpp</a>.</p>
</div>
</div>
<a id="a4de71c3661093e5c4ae7775114f43413"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4de71c3661093e5c4ae7775114f43413">&#9670;&nbsp;</a></span>NetworkOptions</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a4de71c3661093e5c4ae7775114f43413">NetworkOptions</a> = std::vector&lt;<a class="el" href="structarmnn_1_1_backend_options.html">BackendOptions</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_backend_options_8hpp_source.html#l00016">16</a> of file <a class="el" href="_backend_options_8hpp_source.html">BackendOptions.hpp</a>.</p>
</div>
</div>
<a id="a37a1a6b381ccc76df203fee023234996"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a37a1a6b381ccc76df203fee023234996">&#9670;&nbsp;</a></span>OutputQueueDescriptor</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a37a1a6b381ccc76df203fee023234996">OutputQueueDescriptor</a> = <a class="el" href="structarmnn_1_1_mem_copy_queue_descriptor.html">MemCopyQueueDescriptor</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_data_8hpp_source.html#l00092">92</a> of file <a class="el" href="_workload_data_8hpp_source.html">WorkloadData.hpp</a>.</p>
</div>
</div>
<a id="a8f091a512915d1cb29a4ebf13dfc53ea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8f091a512915d1cb29a4ebf13dfc53ea">&#9670;&nbsp;</a></span>OutputTensors</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a8f091a512915d1cb29a4ebf13dfc53ea">OutputTensors</a> = std::vector&lt;std::pair&lt;<a class="el" href="namespacearmnn.html#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a>, class <a class="el" href="classarmnn_1_1_tensor.html">Tensor</a>&gt; &gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_tensor_8hpp_source.html#l00395">395</a> of file <a class="el" href="_tensor_8hpp_source.html">Tensor.hpp</a>.</p>
</div>
</div>
<a id="a8c42c6647e31ebe525aeba878d133e45"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8c42c6647e31ebe525aeba878d133e45">&#9670;&nbsp;</a></span>ParameterStringifyFunction</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a8c42c6647e31ebe525aeba878d133e45">ParameterStringifyFunction</a> = std::function&lt;void(const std::string&amp; name, const std::string&amp; value)&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_serialize_layer_parameters_8hpp_source.html#l00014">14</a> of file <a class="el" href="_serialize_layer_parameters_8hpp_source.html">SerializeLayerParameters.hpp</a>.</p>
</div>
</div>
<a id="ae73bf7cb78cc552c5511431b0d583f14"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae73bf7cb78cc552c5511431b0d583f14">&#9670;&nbsp;</a></span>PreCompiledObjectDeleter</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ae73bf7cb78cc552c5511431b0d583f14">PreCompiledObjectDeleter</a> = std::function&lt;void(const void*)&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_pre_compiled_layer_8hpp_source.html#l00019">19</a> of file <a class="el" href="_pre_compiled_layer_8hpp_source.html">PreCompiledLayer.hpp</a>.</p>
</div>
</div>
<a id="ae3bff3986cb5a50637c9b3238d821f54"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae3bff3986cb5a50637c9b3238d821f54">&#9670;&nbsp;</a></span>PreCompiledObjectPtr</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ae3bff3986cb5a50637c9b3238d821f54">PreCompiledObjectPtr</a> = std::unique_ptr&lt;void, <a class="el" href="namespacearmnn.html#ae73bf7cb78cc552c5511431b0d583f14">PreCompiledObjectDeleter</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_pre_compiled_layer_8hpp_source.html#l00020">20</a> of file <a class="el" href="_pre_compiled_layer_8hpp_source.html">PreCompiledLayer.hpp</a>.</p>
</div>
</div>
<a id="ad6f30c5f3c1297502d240068d97a25b9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad6f30c5f3c1297502d240068d97a25b9">&#9670;&nbsp;</a></span>RefAdditionWorkload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ad6f30c5f3c1297502d240068d97a25b9">RefAdditionWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.html">RefElementwiseWorkload</a>&lt;std::plus&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt;, <a class="el" href="structarmnn_1_1_addition_queue_descriptor.html">AdditionQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.html#a4e7b349a05a558fa6792c71c11a6bf11a5b84f797c82a1ad494549330af517ad5">StringMapping::RefAdditionWorkload_Execute</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_elementwise_workload_8hpp_source.html#l00040">40</a> of file <a class="el" href="_ref_elementwise_workload_8hpp_source.html">RefElementwiseWorkload.hpp</a>.</p>
</div>
</div>
<a id="ab51075960a6cf82a8bb6ee81c9efa97d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab51075960a6cf82a8bb6ee81c9efa97d">&#9670;&nbsp;</a></span>RefDebugBFloat16Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ab51075960a6cf82a8bb6ee81c9efa97d">RefDebugBFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.html#l00042">42</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.html">RefDebugWorkload.hpp</a>.</p>
</div>
</div>
<a id="a1a8e2ef0c7bbdbf7466ebe81c979040c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1a8e2ef0c7bbdbf7466ebe81c979040c">&#9670;&nbsp;</a></span>RefDebugBooleanWorkload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a1a8e2ef0c7bbdbf7466ebe81c979040c">RefDebugBooleanWorkload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">DataType::Boolean</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.html#l00051">51</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.html">RefDebugWorkload.hpp</a>.</p>
</div>
</div>
<a id="ac8d7aa6e66fb59a839833b160f619228"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac8d7aa6e66fb59a839833b160f619228">&#9670;&nbsp;</a></span>RefDebugFloat16Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ac8d7aa6e66fb59a839833b160f619228">RefDebugFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.html#l00043">43</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.html">RefDebugWorkload.hpp</a>.</p>
</div>
</div>
<a id="ad194629946077375dcce05b2449334c8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad194629946077375dcce05b2449334c8">&#9670;&nbsp;</a></span>RefDebugFloat32Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ad194629946077375dcce05b2449334c8">RefDebugFloat32Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.html#l00044">44</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.html">RefDebugWorkload.hpp</a>.</p>
</div>
</div>
<a id="a44ab486f2a7728d75bbf52ffa1025ab5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a44ab486f2a7728d75bbf52ffa1025ab5">&#9670;&nbsp;</a></span>RefDebugQAsymmS8Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a44ab486f2a7728d75bbf52ffa1025ab5">RefDebugQAsymmS8Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.html#l00046">46</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.html">RefDebugWorkload.hpp</a>.</p>
</div>
</div>
<a id="a0c1df21c99a094d2f078ca90047a73ff"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0c1df21c99a094d2f078ca90047a73ff">&#9670;&nbsp;</a></span>RefDebugQAsymmU8Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a0c1df21c99a094d2f078ca90047a73ff">RefDebugQAsymmU8Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.html#l00045">45</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.html">RefDebugWorkload.hpp</a>.</p>
</div>
</div>
<a id="ae6d1d064ec7d33b2cc5bcc8afafbe193"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae6d1d064ec7d33b2cc5bcc8afafbe193">&#9670;&nbsp;</a></span>RefDebugQSymmS16Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ae6d1d064ec7d33b2cc5bcc8afafbe193">RefDebugQSymmS16Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.html#l00047">47</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.html">RefDebugWorkload.hpp</a>.</p>
</div>
</div>
<a id="ad607a96fafba334ba5bde946947dd0af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad607a96fafba334ba5bde946947dd0af">&#9670;&nbsp;</a></span>RefDebugQSymmS8Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ad607a96fafba334ba5bde946947dd0af">RefDebugQSymmS8Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">DataType::QSymmS8</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.html#l00048">48</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.html">RefDebugWorkload.hpp</a>.</p>
</div>
</div>
<a id="a2b2b0a60cbb51bf3eb9bd2899aee2c86"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2b2b0a60cbb51bf3eb9bd2899aee2c86">&#9670;&nbsp;</a></span>RefDebugSigned32Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a2b2b0a60cbb51bf3eb9bd2899aee2c86">RefDebugSigned32Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.html#l00049">49</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.html">RefDebugWorkload.hpp</a>.</p>
</div>
</div>
<a id="aa334d5e73d8b967640041307137e2d02"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa334d5e73d8b967640041307137e2d02">&#9670;&nbsp;</a></span>RefDebugSigned64Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#aa334d5e73d8b967640041307137e2d02">RefDebugSigned64Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.html">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">DataType::Signed64</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.html#l00050">50</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.html">RefDebugWorkload.hpp</a>.</p>
</div>
</div>
<a id="a49ef5a7147c0b8a89436f1ad110ad2d9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a49ef5a7147c0b8a89436f1ad110ad2d9">&#9670;&nbsp;</a></span>RefDivisionWorkload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a49ef5a7147c0b8a89436f1ad110ad2d9">RefDivisionWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.html">RefElementwiseWorkload</a>&lt;std::divides&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt;, <a class="el" href="structarmnn_1_1_division_queue_descriptor.html">DivisionQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.html#a4e7b349a05a558fa6792c71c11a6bf11a69485fd6282ca5ed7d50589f8f759645">StringMapping::RefDivisionWorkload_Execute</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_elementwise_workload_8hpp_source.html#l00058">58</a> of file <a class="el" href="_ref_elementwise_workload_8hpp_source.html">RefElementwiseWorkload.hpp</a>.</p>
</div>
</div>
<a id="a44b17670359a5c896114952e09fcef8d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a44b17670359a5c896114952e09fcef8d">&#9670;&nbsp;</a></span>RefMaximumWorkload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a44b17670359a5c896114952e09fcef8d">RefMaximumWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.html">RefElementwiseWorkload</a>&lt;<a class="el" href="structarmnn_1_1maximum.html">armnn::maximum</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt;, <a class="el" href="structarmnn_1_1_maximum_queue_descriptor.html">MaximumQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.html#a4e7b349a05a558fa6792c71c11a6bf11aea93564675347f60a80cf699c177a80e">StringMapping::RefMaximumWorkload_Execute</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_elementwise_workload_8hpp_source.html#l00064">64</a> of file <a class="el" href="_ref_elementwise_workload_8hpp_source.html">RefElementwiseWorkload.hpp</a>.</p>
</div>
</div>
<a id="a9df214231409eff795bf8ebd3f5e65ca"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9df214231409eff795bf8ebd3f5e65ca">&#9670;&nbsp;</a></span>RefMinimumWorkload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a9df214231409eff795bf8ebd3f5e65ca">RefMinimumWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.html">RefElementwiseWorkload</a>&lt;<a class="el" href="structarmnn_1_1minimum.html">armnn::minimum</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt;, <a class="el" href="structarmnn_1_1_minimum_queue_descriptor.html">MinimumQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.html#a4e7b349a05a558fa6792c71c11a6bf11a9bddcf9777d5ca3ab5e40b3a93559625">StringMapping::RefMinimumWorkload_Execute</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_elementwise_workload_8hpp_source.html#l00070">70</a> of file <a class="el" href="_ref_elementwise_workload_8hpp_source.html">RefElementwiseWorkload.hpp</a>.</p>
</div>
</div>
<a id="aeff4433507789642f698fe6873ec4619"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeff4433507789642f698fe6873ec4619">&#9670;&nbsp;</a></span>RefMultiplicationWorkload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#aeff4433507789642f698fe6873ec4619">RefMultiplicationWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.html">RefElementwiseWorkload</a>&lt;std::multiplies&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt;, <a class="el" href="structarmnn_1_1_multiplication_queue_descriptor.html">MultiplicationQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.html#a4e7b349a05a558fa6792c71c11a6bf11ab3eb648f0f29bf56db68d80624b9bb6c">StringMapping::RefMultiplicationWorkload_Execute</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_elementwise_workload_8hpp_source.html#l00052">52</a> of file <a class="el" href="_ref_elementwise_workload_8hpp_source.html">RefElementwiseWorkload.hpp</a>.</p>
</div>
</div>
<a id="aed5e6ff8fdf785380ed4c8ca21702da3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aed5e6ff8fdf785380ed4c8ca21702da3">&#9670;&nbsp;</a></span>RefPermuteBFloat16Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#aed5e6ff8fdf785380ed4c8ca21702da3">RefPermuteBFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.html">RefPermuteWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_permute_workload_8hpp_source.html#l00027">27</a> of file <a class="el" href="_ref_permute_workload_8hpp_source.html">RefPermuteWorkload.hpp</a>.</p>
</div>
</div>
<a id="ad1c0fb6bfa580b04574ab56971b6cbc6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad1c0fb6bfa580b04574ab56971b6cbc6">&#9670;&nbsp;</a></span>RefPermuteFloat16Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ad1c0fb6bfa580b04574ab56971b6cbc6">RefPermuteFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.html">RefPermuteWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_permute_workload_8hpp_source.html#l00028">28</a> of file <a class="el" href="_ref_permute_workload_8hpp_source.html">RefPermuteWorkload.hpp</a>.</p>
</div>
</div>
<a id="a54c3f7c7b9909e828a084f68dc78a031"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a54c3f7c7b9909e828a084f68dc78a031">&#9670;&nbsp;</a></span>RefPermuteFloat32Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a54c3f7c7b9909e828a084f68dc78a031">RefPermuteFloat32Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.html">RefPermuteWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_permute_workload_8hpp_source.html#l00029">29</a> of file <a class="el" href="_ref_permute_workload_8hpp_source.html">RefPermuteWorkload.hpp</a>.</p>
</div>
</div>
<a id="a50ffe5068ecb2fbf7f73b30ef0d753f8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a50ffe5068ecb2fbf7f73b30ef0d753f8">&#9670;&nbsp;</a></span>RefPermuteQAsymm8Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a50ffe5068ecb2fbf7f73b30ef0d753f8">RefPermuteQAsymm8Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.html">RefPermuteWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_permute_workload_8hpp_source.html#l00031">31</a> of file <a class="el" href="_ref_permute_workload_8hpp_source.html">RefPermuteWorkload.hpp</a>.</p>
</div>
</div>
<a id="ac89a05afd86920754ef682af60ef9d0d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac89a05afd86920754ef682af60ef9d0d">&#9670;&nbsp;</a></span>RefPermuteQAsymmS8Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ac89a05afd86920754ef682af60ef9d0d">RefPermuteQAsymmS8Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.html">RefPermuteWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_permute_workload_8hpp_source.html#l00030">30</a> of file <a class="el" href="_ref_permute_workload_8hpp_source.html">RefPermuteWorkload.hpp</a>.</p>
</div>
</div>
<a id="a6ffed93fad525ce1d534cec2cdaee6bd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ffed93fad525ce1d534cec2cdaee6bd">&#9670;&nbsp;</a></span>RefPermuteQSymm16Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a6ffed93fad525ce1d534cec2cdaee6bd">RefPermuteQSymm16Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.html">RefPermuteWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_permute_workload_8hpp_source.html#l00032">32</a> of file <a class="el" href="_ref_permute_workload_8hpp_source.html">RefPermuteWorkload.hpp</a>.</p>
</div>
</div>
<a id="a7d4bff547e5c8ac994932e281ddebda7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7d4bff547e5c8ac994932e281ddebda7">&#9670;&nbsp;</a></span>RefSubtractionWorkload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a7d4bff547e5c8ac994932e281ddebda7">RefSubtractionWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.html">RefElementwiseWorkload</a>&lt;std::minus&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt;, <a class="el" href="structarmnn_1_1_subtraction_queue_descriptor.html">SubtractionQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.html#a4e7b349a05a558fa6792c71c11a6bf11a3694ad0341ebb1fe50b78efe13672519">StringMapping::RefSubtractionWorkload_Execute</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_elementwise_workload_8hpp_source.html#l00046">46</a> of file <a class="el" href="_ref_elementwise_workload_8hpp_source.html">RefElementwiseWorkload.hpp</a>.</p>
</div>
</div>
<a id="a031a365fb37880a7f015dab159877a72"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a031a365fb37880a7f015dab159877a72">&#9670;&nbsp;</a></span>RefTransposeBFloat16Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a031a365fb37880a7f015dab159877a72">RefTransposeBFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.html">RefTransposeWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_transpose_workload_8hpp_source.html#l00027">27</a> of file <a class="el" href="_ref_transpose_workload_8hpp_source.html">RefTransposeWorkload.hpp</a>.</p>
</div>
</div>
<a id="aefcfe4efab61267262d1e02cb8af739d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aefcfe4efab61267262d1e02cb8af739d">&#9670;&nbsp;</a></span>RefTransposeFloat16Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#aefcfe4efab61267262d1e02cb8af739d">RefTransposeFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.html">RefTransposeWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_transpose_workload_8hpp_source.html#l00028">28</a> of file <a class="el" href="_ref_transpose_workload_8hpp_source.html">RefTransposeWorkload.hpp</a>.</p>
</div>
</div>
<a id="ad67165b4639bd5e50e5bc4538d226b35"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad67165b4639bd5e50e5bc4538d226b35">&#9670;&nbsp;</a></span>RefTransposeFloat32Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ad67165b4639bd5e50e5bc4538d226b35">RefTransposeFloat32Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.html">RefTransposeWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_transpose_workload_8hpp_source.html#l00029">29</a> of file <a class="el" href="_ref_transpose_workload_8hpp_source.html">RefTransposeWorkload.hpp</a>.</p>
</div>
</div>
<a id="a1d13693cba12d3e406454b852527fb37"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1d13693cba12d3e406454b852527fb37">&#9670;&nbsp;</a></span>RefTransposeQAsymm8Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a1d13693cba12d3e406454b852527fb37">RefTransposeQAsymm8Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.html">RefTransposeWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_transpose_workload_8hpp_source.html#l00031">31</a> of file <a class="el" href="_ref_transpose_workload_8hpp_source.html">RefTransposeWorkload.hpp</a>.</p>
</div>
</div>
<a id="ae0b590ea0ad58072eec6e30fc4369d98"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae0b590ea0ad58072eec6e30fc4369d98">&#9670;&nbsp;</a></span>RefTransposeQAsymmS8Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ae0b590ea0ad58072eec6e30fc4369d98">RefTransposeQAsymmS8Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.html">RefTransposeWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_transpose_workload_8hpp_source.html#l00030">30</a> of file <a class="el" href="_ref_transpose_workload_8hpp_source.html">RefTransposeWorkload.hpp</a>.</p>
</div>
</div>
<a id="a4d9e736b0f2d5f6d66ea0a798366935c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4d9e736b0f2d5f6d66ea0a798366935c">&#9670;&nbsp;</a></span>RefTransposeQSymm16Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a4d9e736b0f2d5f6d66ea0a798366935c">RefTransposeQSymm16Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.html">RefTransposeWorkload</a>&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_transpose_workload_8hpp_source.html#l00032">32</a> of file <a class="el" href="_ref_transpose_workload_8hpp_source.html">RefTransposeWorkload.hpp</a>.</p>
</div>
</div>
<a id="a0743ed5e860c316a20b68ca96301b411"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0743ed5e860c316a20b68ca96301b411">&#9670;&nbsp;</a></span>ResolveType</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a0743ed5e860c316a20b68ca96301b411">ResolveType</a> = typename <a class="el" href="structarmnn_1_1_resolve_type_impl.html">ResolveTypeImpl</a>&lt;DT&gt;::Type</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_resolve_type_8hpp_source.html#l00079">79</a> of file <a class="el" href="_resolve_type_8hpp_source.html">ResolveType.hpp</a>.</p>
</div>
</div>
<a id="a60291543fe872b795e71e05bcd835fd1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a60291543fe872b795e71e05bcd835fd1">&#9670;&nbsp;</a></span>SplitterDescriptor</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a60291543fe872b795e71e05bcd835fd1">SplitterDescriptor</a> = <a class="el" href="structarmnn_1_1_views_descriptor.html">ViewsDescriptor</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_descriptors_fwd_8hpp_source.html#l00065">65</a> of file <a class="el" href="_descriptors_fwd_8hpp_source.html">DescriptorsFwd.hpp</a>.</p>
</div>
</div>
<a id="a14275495042ea02d0348dd70eeaf3d68"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a14275495042ea02d0348dd70eeaf3d68">&#9670;&nbsp;</a></span>TensorInfos</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a14275495042ea02d0348dd70eeaf3d68">TensorInfos</a> = std::vector&lt;<a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.html#l00152">152</a> of file <a class="el" href="_backend_helper_8cpp_source.html">BackendHelper.cpp</a>.</p>
</div>
</div>
<a id="a6d4fbf927a9d8e68cab1d7965c7dbc44"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6d4fbf927a9d8e68cab1d7965c7dbc44">&#9670;&nbsp;</a></span>Uint8ToFloat32Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a6d4fbf927a9d8e68cab1d7965c7dbc44">Uint8ToFloat32Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.html">MultiTypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_8hpp_source.html#l00264">264</a> of file <a class="el" href="_workload_8hpp_source.html">Workload.hpp</a>.</p>
</div>
</div>
<a id="ad4d53881107428c301d43b5aad16bfe0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad4d53881107428c301d43b5aad16bfe0">&#9670;&nbsp;</a></span>Uint8Workload</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#ad4d53881107428c301d43b5aad16bfe0">Uint8Workload</a> = <a class="el" href="classarmnn_1_1_typed_workload.html">TypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_8hpp_source.html#l00223">223</a> of file <a class="el" href="_workload_8hpp_source.html">Workload.hpp</a>.</p>
</div>
</div>
<a id="ae6c5f1b51bd32133c4dcc632045d6b58"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae6c5f1b51bd32133c4dcc632045d6b58">&#9670;&nbsp;</a></span>UnidirectionalSequenceLstmDescriptor</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef <a class="el" href="structarmnn_1_1_lstm_descriptor.html">LstmDescriptor</a> <a class="el" href="namespacearmnn.html#ae6c5f1b51bd32133c4dcc632045d6b58">UnidirectionalSequenceLstmDescriptor</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_descriptors_8hpp_source.html#l01169">1169</a> of file <a class="el" href="_descriptors_8hpp_source.html">Descriptors.hpp</a>.</p>
</div>
</div>
<a id="a15f53f26b8495b51d0bba3d1bc4efc80"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a15f53f26b8495b51d0bba3d1bc4efc80">&#9670;&nbsp;</a></span>WorkloadQueue</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="namespacearmnn.html#a15f53f26b8495b51d0bba3d1bc4efc80">WorkloadQueue</a> = std::vector&lt; std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_i_workload.html">IWorkload</a>&gt; &gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_execution_frame_8hpp_source.html#l00013">13</a> of file <a class="el" href="_execution_frame_8hpp_source.html">ExecutionFrame.hpp</a>.</p>
</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a id="a56297e0f7b215eea46c818cb7528d9ea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a56297e0f7b215eea46c818cb7528d9ea">&#9670;&nbsp;</a></span>ActivationFunction</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4"></a>Sigmoid&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e"></a>TanH&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b"></a>Linear&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559"></a>ReLu&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d"></a>BoundedReLu&#160;</td><td class="fielddoc"><p>min(a, max(b, input)) ReLu1 &amp; ReLu6. </p>
</td></tr>
<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef"></a>SoftReLu&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735"></a>LeakyReLu&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6"></a>Abs&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054"></a>Sqrt&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304"></a>Square&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d"></a>Elu&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186"></a>HardSwish&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaaf48cca1c6deaa6a1c34e4ee46954cf0b"></a>Gelu&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00086">86</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">Sigmoid</a> = 0,</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e">TanH</a> = 1,</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b">Linear</a> = 2,</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">ReLu</a> = 3,</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">BoundedReLu</a> = 4, <span class="comment">///&lt; min(a, max(b, input)) ReLu1 &amp; ReLu6.</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef">SoftReLu</a> = 5,</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735">LeakyReLu</a> = 6,</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a> = 7,</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a> = 8,</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304">Square</a> = 9,</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d">Elu</a> = 10,</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186">HardSwish</a> = 11,</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaf48cca1c6deaa6a1c34e4ee46954cf0b">Gelu</a> = 12</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="ae7e8cbf71db6a490789ca6dcaa8deeae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae7e8cbf71db6a490789ca6dcaa8deeae">&#9670;&nbsp;</a></span>ArgMinMaxFunction</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2"></a>Min&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233"></a>Max&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00103">103</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;{</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a> = 0,</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 1</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="ab24d74259a053475f6040dd701a01952"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab24d74259a053475f6040dd701a01952">&#9670;&nbsp;</a></span>BackendCapability</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#ab24d74259a053475f6040dd701a01952">BackendCapability</a> : uint32_t</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>BackendCapability class. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ab24d74259a053475f6040dd701a01952a0be89c9a624a5de3925150e3cd476245"></a>NonConstWeights&#160;</td><td class="fielddoc"><p>Constant weights can be accessed through the descriptors, On the other hand, non-const weights can be accessed through inputs. </p>
</td></tr>
<tr><td class="fieldname"><a id="ab24d74259a053475f6040dd701a01952ac7fdc1b70472b8558fdba30db193d58f"></a>AsyncExecution&#160;</td><td class="fielddoc"><p>Asynchronous Execution. </p>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00286">286</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; : uint32_t</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;{<span class="comment"></span></div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;<span class="comment"> /// Constant weights can be accessed through the descriptors,</span></div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="comment"> /// On the other hand, non-const weights can be accessed through inputs.</span></div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.html#ab24d74259a053475f6040dd701a01952a0be89c9a624a5de3925150e3cd476245">NonConstWeights</a>,</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;<span class="comment"> /// Asynchronous Execution.</span></div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.html#ab24d74259a053475f6040dd701a01952ac7fdc1b70472b8558fdba30db193d58f">AsyncExecution</a>,</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; </div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// add new enum values here</span></div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="ac4f8557279754ed7b3f749d55b0e3047"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac4f8557279754ed7b3f749d55b0e3047">&#9670;&nbsp;</a></span>BinaryOperation</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047">BinaryOperation</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ac4f8557279754ed7b3f749d55b0e3047aec211f7c20af43e742bf2570c3cb84f9"></a>Add&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ac4f8557279754ed7b3f749d55b0e3047a43d11850893d2fe84a1e618121c1cc0a"></a>Div&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ac4f8557279754ed7b3f749d55b0e3047a8321e79c278ec510f63675c040594892"></a>Maximum&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ac4f8557279754ed7b3f749d55b0e3047aa1d0ec6d56f8833a078b5a7ac4caf2d4"></a>Minimum&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ac4f8557279754ed7b3f749d55b0e3047a62b6d55816cf737bfc6f42e60df1a3f2"></a>Mul&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ac4f8557279754ed7b3f749d55b0e3047ae80155eceb940c89e2de63ad05868db2"></a>Sub&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ac4f8557279754ed7b3f749d55b0e3047a2d17ea57d7f86acde5c60cef8e123a53"></a>SqDiff&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ac4f8557279754ed7b3f749d55b0e3047add4fe0cc913f704600b97d1f5dd285de"></a>Power&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00138">138</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;{</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047aec211f7c20af43e742bf2570c3cb84f9">Add</a> = 0,</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a43d11850893d2fe84a1e618121c1cc0a">Div</a> = 1,</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a8321e79c278ec510f63675c040594892">Maximum</a> = 2,</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047aa1d0ec6d56f8833a078b5a7ac4caf2d4">Minimum</a> = 3,</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a62b6d55816cf737bfc6f42e60df1a3f2">Mul</a> = 4,</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047ae80155eceb940c89e2de63ad05868db2">Sub</a> = 5,</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a2d17ea57d7f86acde5c60cef8e123a53">SqDiff</a> = 6,</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047add4fe0cc913f704600b97d1f5dd285de">Power</a> = 7</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a4dc0adc6737b5944e7671bee71788407"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4dc0adc6737b5944e7671bee71788407">&#9670;&nbsp;</a></span>BoostLogSeverityMapping</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407">BoostLogSeverityMapping</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a4dc0adc6737b5944e7671bee71788407a04a75036e9d520bb983c5ed03b8d0182"></a>trace&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d"></a>debug&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"></a>info&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd"></a>warning&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282"></a>error&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4"></a>fatal&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_logging_8hpp_source.html#l00196">196</a> of file <a class="el" href="_logging_8hpp_source.html">Logging.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;{</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407a04a75036e9d520bb983c5ed03b8d0182">trace</a>,</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d">debug</a>,</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>,</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>,</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>,</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4">fatal</a></div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a10c50bc964cc8cc559eebcd7df5a8af3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a10c50bc964cc8cc559eebcd7df5a8af3">&#9670;&nbsp;</a></span>CapabilityClass</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a10c50bc964cc8cc559eebcd7df5a8af3">CapabilityClass</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p><a class="el" href="structarmnn_1_1_capability.html" title="Capability of the TensorHandleFactory.">Capability</a> class to calculate in the GetCapabilities function so that only the capability in the scope can be choose to calculate. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389"></a>PaddingRequired&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d"></a>FallbackImportDisabled&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a10c50bc964cc8cc559eebcd7df5a8af3a280957607e14bb2ccc1155ae6569aee1"></a>CapabilityClassMax&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00024">24</a> of file <a class="el" href="_i_tensor_handle_factory_8hpp_source.html">ITensorHandleFactory.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="namespacearmnn.html#a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389">PaddingRequired</a> = 1,</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="namespacearmnn.html#a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d">FallbackImportDisabled</a> = 2,</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="comment">// add new enum values here</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="namespacearmnn.html#a10c50bc964cc8cc559eebcd7df5a8af3a280957607e14bb2ccc1155ae6569aee1">CapabilityClassMax</a> = 254</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a2d299363c9fc33334c571fa29ca4f58c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2d299363c9fc33334c571fa29ca4f58c">&#9670;&nbsp;</a></span>ComparisonOperation</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58c">ComparisonOperation</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5"></a>Equal&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a"></a>Greater&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937"></a>GreaterOrEqual&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b"></a>Less&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14"></a>LessOrEqual&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96"></a>NotEqual&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00109">109</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;{</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5">Equal</a> = 0,</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a">Greater</a> = 1,</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937">GreaterOrEqual</a> = 2,</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b">Less</a> = 3,</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14">LessOrEqual</a> = 4,</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96">NotEqual</a> = 5</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="ae2f04a162585c0a5222a537efd5456ae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae2f04a162585c0a5222a537efd5456ae">&#9670;&nbsp;</a></span>Compute</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456ae">Compute</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>The Compute enum is now deprecated and it is now being replaced by <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a>. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360"></a>Undefined&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64"></a>CpuRef&#160;</td><td class="fielddoc"><p>CPU Execution: Reference C++ kernels. </p>
</td></tr>
<tr><td class="fieldname"><a id="ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1"></a>CpuAcc&#160;</td><td class="fielddoc"><p>CPU Execution: NEON: ArmCompute. </p>
</td></tr>
<tr><td class="fieldname"><a id="ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b"></a>GpuAcc&#160;</td><td class="fielddoc"><p>GPU Execution: OpenCL: ArmCompute. </p>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_backend_id_8hpp_source.html#l00021">21</a> of file <a class="el" href="_backend_id_8hpp_source.html">BackendId.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,<span class="comment"></span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> /// CPU Execution: Reference C++ kernels</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">CpuRef</a> = 1,<span class="comment"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> /// CPU Execution: NEON: ArmCompute</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">CpuAcc</a> = 2,<span class="comment"></span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> /// GPU Execution: OpenCL: ArmCompute</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">GpuAcc</a> = 3</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="ad1d5cce2d9e9a5d61c243e5c989112e0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad1d5cce2d9e9a5d61c243e5c989112e0">&#9670;&nbsp;</a></span>DataLayout</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f"></a>NCHW&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"></a>NHWC&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef"></a>NDHWC&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015"></a>NCDHW&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00062">62</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;{</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a> = 1,</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a> = 2,</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">NDHWC</a> = 3,</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">NCDHW</a> = 4</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="ad8ed01ff3ff33333d8e19db4d2818bb6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad8ed01ff3ff33333d8e19db4d2818bb6">&#9670;&nbsp;</a></span>DataType</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55"></a>Float16&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204"></a>Float32&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e"></a>QAsymmU8&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7"></a>Signed32&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b"></a>Boolean&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7"></a>QSymmS16&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db"></a>QSymmS8&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d"></a>QAsymmS8&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af"></a>BFloat16&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d"></a>Signed64&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00048">48</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;{</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a> = 0,</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a> = 1,</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a> = 2,</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a> = 3,</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a> = 4,</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a> = 5,</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a> = 6,</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a> = 7,</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a> = 8,</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">Signed64</a> = 9,</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a8e1f31031ad31cd8cc22d7c9daa32681"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8e1f31031ad31cd8cc22d7c9daa32681">&#9670;&nbsp;</a></span>Dimensionality</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a8e1f31031ad31cd8cc22d7c9daa32681">Dimensionality</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc"></a>NotSpecified&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a8e1f31031ad31cd8cc22d7c9daa32681ab4b379bf7ded74c07595ccb85bc6fdc3"></a>Specified&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a8e1f31031ad31cd8cc22d7c9daa32681af60357a8d17e45793298323f1b372a74"></a>Scalar&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00172">172</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;{</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <a class="code" href="namespacearmnn.html#a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc">NotSpecified</a> = 0,</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="namespacearmnn.html#a8e1f31031ad31cd8cc22d7c9daa32681ab4b379bf7ded74c07595ccb85bc6fdc3">Specified</a> = 1,</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="namespacearmnn.html#a8e1f31031ad31cd8cc22d7c9daa32681af60357a8d17e45793298323f1b372a74">Scalar</a> = 2</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="aff209afc1dc598da399e3e78617ce016"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aff209afc1dc598da399e3e78617ce016">&#9670;&nbsp;</a></span>EdgeStrategy</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016">EdgeStrategy</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="aff209afc1dc598da399e3e78617ce016aec0fc0100c4fc1ce4eea230c3dc10360"></a>Undefined&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650"></a>DirectCompatibility&#160;</td><td class="fielddoc"><p>No strategy has been defined. Used internally to verify integrity of optimizations. </p>
</td></tr>
<tr><td class="fieldname"><a id="aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189"></a>ExportToTarget&#160;</td><td class="fielddoc"><p>Destination backend can work directly with tensors on source backend. </p>
</td></tr>
<tr><td class="fieldname"><a id="aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852"></a>CopyToTarget&#160;</td><td class="fielddoc"><p>Source backends tensor data can be exported to destination backend tensor without copy. </p>
<p>Copy contents from source backend tensor to destination backend tensor. </p>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00104">104</a> of file <a class="el" href="_i_tensor_handle_factory_8hpp_source.html">ITensorHandleFactory.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;{</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>, <span class="comment">/// No strategy has been defined. Used internally to verify integrity of optimizations.</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650">DirectCompatibility</a>, <span class="comment">/// Destination backend can work directly with tensors on source backend.</span></div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189">ExportToTarget</a>, <span class="comment">/// Source backends tensor data can be exported to destination backend tensor without copy.</span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852">CopyToTarget</a> <span class="comment">/// Copy contents from source backend tensor to destination backend tensor.</span></div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="comment"></span>};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a52d63dc326ef2e2d373217b84ac4a402"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a52d63dc326ef2e2d373217b84ac4a402">&#9670;&nbsp;</a></span>FusedKernelType</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a52d63dc326ef2e2d373217b84ac4a402">FusedKernelType</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a52d63dc326ef2e2d373217b84ac4a402a6708d958187e663fd689cdad2b55b818"></a>AddMulAdd&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00266">266</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;{</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="namespacearmnn.html#a52d63dc326ef2e2d373217b84ac4a402a6708d958187e663fd689cdad2b55b818">AddMulAdd</a> = 0</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a34eaed09302a4d7bfe930c13a7673e0b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a34eaed09302a4d7bfe930c13a7673e0b">&#9670;&nbsp;</a></span>GraphEvent</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0b">GraphEvent</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd"></a>LayerAdded&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528"></a>LayerErased&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_i_graph_observable_8hpp_source.html#l00012">12</a> of file <a class="el" href="_i_graph_observable_8hpp_source.html">IGraphObservable.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;{</div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; <a class="code" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">LayerAdded</a>,</div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; <a class="code" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528">LayerErased</a></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a4e2dd387ba6f0dc5164b4cdf8de3262a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4e2dd387ba6f0dc5164b4cdf8de3262a">&#9670;&nbsp;</a></span>JsonObjectType</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a4e2dd387ba6f0dc5164b4cdf8de3262a">JsonObjectType</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975"></a>Measurement&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a4e2dd387ba6f0dc5164b4cdf8de3262aaa4ecfc70574394990cf17bd83df499f7"></a>Event&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a4e2dd387ba6f0dc5164b4cdf8de3262aaf7a45ae663528701f33ee482ce67af62"></a>ExecObjectDesc&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_json_printer_8hpp_source.html#l00020">20</a> of file <a class="el" href="_json_printer_8hpp_source.html">JsonPrinter.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <a class="code" href="namespacearmnn.html#a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975">Measurement</a>,</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="namespacearmnn.html#a4e2dd387ba6f0dc5164b4cdf8de3262aaa4ecfc70574394990cf17bd83df499f7">Event</a>,</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <a class="code" href="namespacearmnn.html#a4e2dd387ba6f0dc5164b4cdf8de3262aaf7a45ae663528701f33ee482ce67af62">ExecObjectDesc</a></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a56943a0946e5f15e5e58054b8e7a04a4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a56943a0946e5f15e5e58054b8e7a04a4">&#9670;&nbsp;</a></span>LayerType</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a9dce5fd6b5c1ec5baca837bbd273b33c"></a>X&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aa9a62e70841c4d06dd16306a85700d36"></a>Activation&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f"></a>Addition&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a2139684546b147c106b329f41547640c"></a>ArgMinMax&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4ae4743c3ec15d1d84169b17264634692e"></a>BatchNormalization&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a6ee06c6045d0c5b6565a247955ef0fc2"></a>BatchToSpaceNd&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4af6c0e3a1c3cfabd32ae8d3ae741fcf0a"></a>Comparison&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4ae20f0f2826a6549809f050b86274567f"></a>Concat&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255"></a>Constant&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a912a4b4d73726c282e3f79aa2c390d6c"></a>ConvertFp16ToFp32&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4addf4f83b056acd5549949fc0350e9aad"></a>ConvertFp32ToFp16&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a"></a>Convolution2d&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aa603905470e2a5b8c13e96b579ef0dba"></a>Debug&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a731729ad1b2c0eb9399b62c770b3482d"></a>DepthToSpace&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4af97adbfc88b7012a0243215b1076e7e7"></a>DepthwiseConvolution2d&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a9bc35e069257a508e14ed82965a8661d"></a>Dequantize&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a1db19222ac424bd7162142ddf929fd2a"></a>DetectionPostProcess&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a3025cdaab2deb0bb2cd642449e570833"></a>Division&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4abcd30d7ea97ad20c2cddc0f47e6b70c7"></a>ElementwiseUnary&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a3489c7b05e180496cb2ce8ac73887f48"></a>FakeQuantization&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4adb3e3f51c9107e26c9bccf9a188ce2ed"></a>Fill&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4af3f6d0343d56ce88ce7958170ed05cb3"></a>Floor&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4acab78faff25393e9defd1911cb58133e"></a>FullyConnected&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aad22c799930d644e8468fe44c0312d53"></a>Gather&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5"></a>Input&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a21baa4498161d195f5bb2e3627344ba4"></a>InstanceNormalization&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a1189467870bc421ae59277e750263eb2"></a>L2Normalization&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4af4f53c8297dc1cb53d4e6f8151070a30"></a>LogicalBinary&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4ac21dbda57d88c21ec9857f5d1522c488"></a>LogSoftmax&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a06b091bc9aea697ba473c71f0bb55925"></a>Lstm&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a91880b71ea6d007439b7bc7c320b5c25"></a>QLstm&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c"></a>Map&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a8321e79c278ec510f63675c040594892"></a>Maximum&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a3d6c9ac08ada31c184094bbc67afe00d"></a>Mean&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b"></a>MemCopy&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a115bfc5d633eae55c67f9588acdd2bf9"></a>MemImport&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a68be4837f6c739877233e527a996dd00"></a>Merge&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aa1d0ec6d56f8833a078b5a7ac4caf2d4"></a>Minimum&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a27d1a1f7b7c2180e5b20ce9e3d00e2dd"></a>Multiplication&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aac61f2e17250a818dee4d12b112aa88f"></a>Normalization&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54"></a>Output&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4ade43468adaf6acb2c38ebc0c1176f82f"></a>Pad&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7"></a>Permute&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4ad662867a41bfb30b9f75dda2b5849001"></a>Pooling2d&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a1ba143ebe524d46181a4b53470693278"></a>PreCompiled&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a0c5967f09e0669c840ebb1ed0da85e32"></a>Prelu&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aca39930e22f40d10155a57dba32240bb"></a>Quantize&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a890a37ff3bfe123414ba7e6f052b49f3"></a>QuantizedLstm&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aa7c59ccedc6a3bd90c17f3b990afefad"></a>Reshape&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a021da1b20f73dc252361a54d80497ef3"></a>Rank&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a9d723d04c40bfd81835c0766a698cf63"></a>Resize&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aec4875f03ff0bb0b26cf76ac7f41e3c8"></a>Reduce&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4ad140d37ad98c12ccd8e1c432f548bcdb"></a>Slice&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0"></a>Softmax&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a337c392144dca0d18290c6b4711a2279"></a>SpaceToBatchNd&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a5e7ff12da912dc79e7e547281823fa4a"></a>SpaceToDepth&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a41cb9b797ebc6f6f6314e3ded935f4cf"></a>Splitter&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a2187e1021a911b3807cc1bea2eb1a9ca"></a>Stack&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a93bca63ecbb003649425dd0e4ba79a99"></a>StandIn&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aa31904f2b3479b5a00137fd985974b4d"></a>StridedSlice&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a6eb8b8b560161603402c0238b3a7d8b0"></a>Subtraction&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4abbc155fb2b111bf61c4f5ff892915e6b"></a>Switch&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aaf70b1ac863830a4e1ce6268c8399f54"></a>Transpose&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a71b23d26c0f5d20416d6c77754f9806a"></a>TransposeConvolution2d&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a48180ddd584de21589006d56a86d3410"></a>Unmap&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a4cd9f3996d60790cd11c04f842ebc43c"></a>Cast&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a880c1273b27d27cfc82004c3a4b205c9"></a>Shape&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a300124b2433e0376ec4b19251ac3a9e5"></a>UnidirectionalSequenceLstm&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a0ca5f33c1d35fd4105d3a26a2823f9dd"></a>ChannelShuffle&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a583550d0f265fd3756f7de0e42c51953"></a>Convolution3d&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a2b3140dc366b9fcd25ed786a79d1817c"></a>Pooling3d&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a3028cc42e40f9a1f4f8b35556d9715a4"></a>GatherNd&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a9882ff3cfed27d6161c20a305e7a3484"></a>BatchMatMul&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a699bcffd93aff3022014b9efc9eaefd1"></a>ElementwiseBinary&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4af9a0b6ef62dc10097826358e28b19295"></a>ReverseV2&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4ac5457c5f3cfb4da8638ce7190f8e5152"></a>Tile&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4af617f46b788e11a564cb16c9f5d59fea"></a>Fused&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4af6f7ce1d0822dea293ac2edc111e54ed"></a>BroadcastTo&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a7401e8c502f3f7c3544e3f16bf3f488b"></a>ScatterNd&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4ae66a93a31fb93839c8369265cd44695c"></a>FirstLayer&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a33cae35d37c1b558ecd35dd5e37dd80f"></a>LastLayer&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00491">491</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;{</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;<span class="preprocessor">#define X(name) name,</span></div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <a class="code" href="_types_8hpp.html#ac6d0779b576215649c2610ef2bd1903f">LIST_OF_LAYER_TYPE</a></div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;<span class="preprocessor">#undef X</span></div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4ae66a93a31fb93839c8369265cd44695c">FirstLayer</a> = <a class="code" href="namespacearmnn.html#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>,</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a33cae35d37c1b558ecd35dd5e37dd80f">LastLayer</a> = <a class="code" href="namespacearmnn.html#a2055c78ee5627c32252387746d552ade">ScatterNd</a></div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a2da4db0140d1a6dc69c9c82e9ef5379e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2da4db0140d1a6dc69c9c82e9ef5379e">&#9670;&nbsp;</a></span>LogicalBinaryOperation</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a2da4db0140d1a6dc69c9c82e9ef5379e">LogicalBinaryOperation</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55"></a>LogicalAnd&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247"></a>LogicalOr&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00119">119</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;{</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="namespacearmnn.html#a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55">LogicalAnd</a> = 0,</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="namespacearmnn.html#a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247">LogicalOr</a> = 1</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a93a3ba385cad27c4774e5fe64c025d3d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a93a3ba385cad27c4774e5fe64c025d3d">&#9670;&nbsp;</a></span>LogSeverity</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1"></a>Trace&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a93a3ba385cad27c4774e5fe64c025d3daa603905470e2a5b8c13e96b579ef0dba"></a>Debug&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875"></a>Info&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa"></a>Warning&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd"></a>Error&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4"></a>Fatal&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_utils_8hpp_source.html#l00013">13</a> of file <a class="el" href="_utils_8hpp_source.html">Utils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;{</div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; <a class="code" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">Trace</a>,</div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <a class="code" href="namespacearmnn.html#a181ecb133401da6ff2916c192ca04d48">Debug</a>,</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <a class="code" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">Info</a>,</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <a class="code" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">Warning</a>,</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <a class="code" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">Error</a>,</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <a class="code" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4">Fatal</a></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a7100de49939c3e393101f78d425a98c6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7100de49939c3e393101f78d425a98c6">&#9670;&nbsp;</a></span>MemBlockStrategyType</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a7100de49939c3e393101f78d425a98c6">MemBlockStrategyType</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7"></a>SingleAxisPacking&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f"></a>MultiAxisPacking&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00253">253</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;{</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="comment">// MemBlocks can be packed on the Y axis only, overlap allowed on X axis.</span></div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// In other words MemBlocks with overlapping lifetimes cannot use the same MemBin,</span></div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// equivalent to blob or pooling memory management.</span></div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <a class="code" href="namespacearmnn.html#a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7">SingleAxisPacking</a> = 0,</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; </div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="comment">// MemBlocks can be packed on either Y or X axis but cannot overlap on both.</span></div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="comment">// In other words MemBlocks with overlapping lifetimes can use the same MemBin,</span></div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="comment">// equivalent to offset or slab memory management.</span></div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="namespacearmnn.html#a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f">MultiAxisPacking</a> = 1</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a14fcd7f88d11cea0a018269dca5f9277"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a14fcd7f88d11cea0a018269dca5f9277">&#9670;&nbsp;</a></span>MemorySource</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277">MemorySource</a> : uint32_t</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Define the Memory Source to reduce copies. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a14fcd7f88d11cea0a018269dca5f9277aec0fc0100c4fc1ce4eea230c3dc10360"></a>Undefined&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523"></a>Malloc&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a14fcd7f88d11cea0a018269dca5f9277a966e13d8aabbff3966a5cd28d67b4846"></a>DmaBuf&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a14fcd7f88d11cea0a018269dca5f9277a7f9067c59dd34aca0ad09a7f283ed1f8"></a>DmaBufProtected&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e"></a>Gralloc&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00244">244</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; : uint32_t</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;{</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523">Malloc</a> = 1,</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277a966e13d8aabbff3966a5cd28d67b4846">DmaBuf</a> = 2,</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277a7f9067c59dd34aca0ad09a7f283ed1f8">DmaBufProtected</a> = 4,</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e">Gralloc</a> = 8</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="abe18a5033f2ab9c0de82c676b48f5437"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abe18a5033f2ab9c0de82c676b48f5437">&#9670;&nbsp;</a></span>NormalizationAlgorithmChannel</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#abe18a5033f2ab9c0de82c676b48f5437">NormalizationAlgorithmChannel</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc"></a>Across&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b"></a>Within&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00207">207</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;{</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="namespacearmnn.html#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">Across</a> = 0,</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="namespacearmnn.html#abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b">Within</a> = 1</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="ad605d1661fa0d8c7fea651d82fbe11c9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad605d1661fa0d8c7fea651d82fbe11c9">&#9670;&nbsp;</a></span>NormalizationAlgorithmMethod</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#ad605d1661fa0d8c7fea651d82fbe11c9">NormalizationAlgorithmMethod</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ad605d1661fa0d8c7fea651d82fbe11c9ac65d2e51c610dd3853a3c777aa8bfe9d"></a>LocalBrightness&#160;</td><td class="fielddoc"><p>Krichevsky 2012: Local Brightness Normalization. </p>
</td></tr>
<tr><td class="fieldname"><a id="ad605d1661fa0d8c7fea651d82fbe11c9aa94d2fcabc6b001015aeddfa19266e6f"></a>LocalContrast&#160;</td><td class="fielddoc"><p>Jarret 2009: Local Contrast Normalization. </p>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00213">213</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;{<span class="comment"></span></div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="comment"> /// Krichevsky 2012: Local Brightness Normalization</span></div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.html#ad605d1661fa0d8c7fea651d82fbe11c9ac65d2e51c610dd3853a3c777aa8bfe9d">LocalBrightness</a> = 0,<span class="comment"></span></div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="comment"> /// Jarret 2009: Local Contrast Normalization</span></div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.html#ad605d1661fa0d8c7fea651d82fbe11c9aa94d2fcabc6b001015aeddfa19266e6f">LocalContrast</a> = 1</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="adf2e5515c4c36a3e7e46bb8b83c6754e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adf2e5515c4c36a3e7e46bb8b83c6754e">&#9670;&nbsp;</a></span>OutputShapeRounding</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#adf2e5515c4c36a3e7e46bb8b83c6754e">OutputShapeRounding</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3"></a>Floor&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb"></a>Ceiling&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00221">221</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;{</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="namespacearmnn.html#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">Floor</a> = 0,</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="namespacearmnn.html#adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb">Ceiling</a> = 1</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a3888429b6ebc79f9a7df549e5e4d9a2f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3888429b6ebc79f9a7df549e5e4d9a2f">&#9670;&nbsp;</a></span>PaddingMethod</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a3888429b6ebc79f9a7df549e5e4d9a2f">PaddingMethod</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>The padding method modifies the output of pooling layers. </p>
<p>In both supported methods, the values are ignored (they are not even zeroes, which would make a difference for max pooling a tensor with negative values). The difference between IgnoreValue and Exclude is that the former counts the padding fields in the divisor of Average and L2 pooling, while Exclude does not. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a3888429b6ebc79f9a7df549e5e4d9a2faad301514192636ad34210adce598a45a"></a>IgnoreValue&#160;</td><td class="fielddoc"><p>The padding fields count, but are ignored. </p>
</td></tr>
<tr><td class="fieldname"><a id="a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6"></a>Exclude&#160;</td><td class="fielddoc"><p>The padding fields don't count and are ignored. </p>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00188">188</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;{<span class="comment"></span></div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="comment"> /// The padding fields count, but are ignored</span></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.html#a3888429b6ebc79f9a7df549e5e4d9a2faad301514192636ad34210adce598a45a">IgnoreValue</a> = 0,<span class="comment"></span></div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="comment"> /// The padding fields don&#39;t count and are ignored</span></div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.html#a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6">Exclude</a> = 1</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a14d24d90ab4ba2956e92e27890ba4c91"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a14d24d90ab4ba2956e92e27890ba4c91">&#9670;&nbsp;</a></span>PaddingMode</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91">PaddingMode</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>The padding mode controls whether the padding should be filled with constant values (Constant), or reflect the input, either including the border values (Symmetric) or not (Reflect). </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255"></a>Constant&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00"></a>Reflect&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626"></a>Symmetric&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00200">200</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;{</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</a> = 0,</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00">Reflect</a> = 1,</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <a class="code" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626">Symmetric</a> = 2</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a961bbfe1db71a848eff5a1f0ab775718"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a961bbfe1db71a848eff5a1f0ab775718">&#9670;&nbsp;</a></span>PoolingAlgorithm</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718">PoolingAlgorithm</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a961bbfe1db71a848eff5a1f0ab775718a6a061313d22e51e0f25b7cd4dc065233"></a>Max&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021"></a>Average&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76"></a>L2&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00150">150</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;{</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 0,</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">Average</a> = 1,</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76">L2</a> = 2</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="ae060224135f57f926cbda9d2732a2b1f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae060224135f57f926cbda9d2732a2b1f">&#9670;&nbsp;</a></span>ProfilingDetailsMethod</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#ae060224135f57f926cbda9d2732a2b1f">ProfilingDetailsMethod</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Define the behaviour of the internal profiler when outputting network details. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ae060224135f57f926cbda9d2732a2b1faec0fc0100c4fc1ce4eea230c3dc10360"></a>Undefined&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ae060224135f57f926cbda9d2732a2b1fa497ab261a562e316736c2cb59b839d32"></a>DetailsWithEvents&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ae060224135f57f926cbda9d2732a2b1fa566666dfc3a9a82da0d7b0816b19f278"></a>DetailsOnly&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00071">71</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;{</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="namespacearmnn.html#ae060224135f57f926cbda9d2732a2b1fa497ab261a562e316736c2cb59b839d32">DetailsWithEvents</a> = 1,</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="namespacearmnn.html#ae060224135f57f926cbda9d2732a2b1fa566666dfc3a9a82da0d7b0816b19f278">DetailsOnly</a> = 2</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a8e72227ebe5ac505cf44790f2e6eb488"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8e72227ebe5ac505cf44790f2e6eb488">&#9670;&nbsp;</a></span>QosExecPriority</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a8e72227ebe5ac505cf44790f2e6eb488">QosExecPriority</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a8e72227ebe5ac505cf44790f2e6eb488a28d0edd045e05cf5af64e35ae0c4c6ef"></a>Low&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a8e72227ebe5ac505cf44790f2e6eb488a87f8a6ab85c9ced3702b4ea641ad4bb5"></a>Medium&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a8e72227ebe5ac505cf44790f2e6eb488a655d20c1ca69519ca647684edbb2db35"></a>High&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00079">79</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;{</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="namespacearmnn.html#a8e72227ebe5ac505cf44790f2e6eb488a28d0edd045e05cf5af64e35ae0c4c6ef">Low</a> = 0,</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="namespacearmnn.html#a8e72227ebe5ac505cf44790f2e6eb488a87f8a6ab85c9ced3702b4ea641ad4bb5">Medium</a> = 1,</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="namespacearmnn.html#a8e72227ebe5ac505cf44790f2e6eb488a655d20c1ca69519ca647684edbb2db35">High</a> = 2</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="abc05539fc6e7907f32ef0fb242e3b3b0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abc05539fc6e7907f32ef0fb242e3b3b0">&#9670;&nbsp;</a></span>ReduceOperation</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0">ReduceOperation</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5"></a>Sum&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="abc05539fc6e7907f32ef0fb242e3b3b0a6a061313d22e51e0f25b7cd4dc065233"></a>Max&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d"></a>Mean&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="abc05539fc6e7907f32ef0fb242e3b3b0a78d811e98514cd165dda532286610fd2"></a>Min&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd"></a>Prod&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00157">157</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;{</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">Sum</a> = 0,</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <a class="code" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 1,</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <a class="code" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">Mean</a> = 2,</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a> = 3,</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">Prod</a> = 4</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a9a2af2f8c4af4f9efa8e79417d505ac4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9a2af2f8c4af4f9efa8e79417d505ac4">&#9670;&nbsp;</a></span>ResizeMethod</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4">ResizeMethod</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f"></a>Bilinear&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f"></a>NearestNeighbor&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00166">166</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;{</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">Bilinear</a> = 0,</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">NearestNeighbor</a> = 1</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a75ca90884e15396a70b0cb722a877b4a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a75ca90884e15396a70b0cb722a877b4a">&#9670;&nbsp;</a></span>ScatterNdFunction</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4a">ScatterNdFunction</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a75ca90884e15396a70b0cb722a877b4aa06933067aafd48425d67bcb01bba5cb6"></a>Update&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a75ca90884e15396a70b0cb722a877b4aaec211f7c20af43e742bf2570c3cb84f9"></a>Add&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a75ca90884e15396a70b0cb722a877b4aae80155eceb940c89e2de63ad05868db2"></a>Sub&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a75ca90884e15396a70b0cb722a877b4aa6a061313d22e51e0f25b7cd4dc065233"></a>Max&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a75ca90884e15396a70b0cb722a877b4aa78d811e98514cd165dda532286610fd2"></a>Min&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a75ca90884e15396a70b0cb722a877b4aa62b6d55816cf737bfc6f42e60df1a3f2"></a>Mul&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00500">500</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;{</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <a class="code" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4aa06933067aafd48425d67bcb01bba5cb6">Update</a> = 0,</div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <a class="code" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047aec211f7c20af43e742bf2570c3cb84f9">Add</a> = 1,</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <a class="code" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047ae80155eceb940c89e2de63ad05868db2">Sub</a> = 2,</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <a class="code" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 3,</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <a class="code" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a> = 4,</div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <a class="code" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a62b6d55816cf737bfc6f42e60df1a3f2">Mul</a> = 5</div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="adf57837d00e8352d9b5cc5ab1fb5fee9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adf57837d00e8352d9b5cc5ab1fb5fee9">&#9670;&nbsp;</a></span>ShapeInferenceMethod</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9">ShapeInferenceMethod</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>The ShapeInferenceMethod modify how the output shapes are treated. </p>
<p>When ValidateOnly is selected, the output shapes are inferred from the input parameters of the layer and any mismatch is reported. When InferAndValidate is selected 2 actions are performed: (1)infer output shape from inputs and (2)validate the shapes as in ValidateOnly. This option has been added to work with tensors which rank or dimension sizes are not specified explicitly, however this information can be calculated from the inputs. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1"></a>ValidateOnly&#160;</td><td class="fielddoc"><p>Validate all output shapes. </p>
</td></tr>
<tr><td class="fieldname"><a id="adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb"></a>InferAndValidate&#160;</td><td class="fielddoc"><p>Infer missing output shapes and validate all output shapes. </p>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00235">235</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;{<span class="comment"></span></div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;<span class="comment"> /// Validate all output shapes</span></div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">ValidateOnly</a> = 0,<span class="comment"></span></div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="comment"> /// Infer missing output shapes and validate all output shapes</span></div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">InferAndValidate</a> = 1</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a67a0db04d321a74b7e7fcfd3f1a3f70b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a67a0db04d321a74b7e7fcfd3f1a3f70b">&#9670;&nbsp;</a></span>Status</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>enumeration </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38"></a>Success&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086"></a>Failure&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00042">42</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;{</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Success</a> = 0,</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">Failure</a> = 1</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a707090747256af276c389e0cf1cb0a9a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a707090747256af276c389e0cf1cb0a9a">&#9670;&nbsp;</a></span>TuningLevel</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754"></a>None&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68"></a>Rapid&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0"></a>Normal&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f"></a>Exhaustive&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_arm_compute_tuning_utils_8hpp_source.html#l00018">18</a> of file <a class="el" href="_arm_compute_tuning_utils_8hpp_source.html">ArmComputeTuningUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <a class="code" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754">None</a>,</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <a class="code" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68">Rapid</a>,</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <a class="code" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0">Normal</a>,</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f">Exhaustive</a></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<a id="a1cfaa710db2a54673b21d2ea2da757c8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1cfaa710db2a54673b21d2ea2da757c8">&#9670;&nbsp;</a></span>UnaryOperation</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8">UnaryOperation</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a1cfaa710db2a54673b21d2ea2da757c8a1e34af023adeb7d5f484f8eb4b9826b6"></a>Abs&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0"></a>Exp&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a1cfaa710db2a54673b21d2ea2da757c8aae77f3ad25595e35b327334d89410054"></a>Sqrt&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4"></a>Rsqrt&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd"></a>Neg&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc"></a>LogicalNot&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b"></a>Log&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd"></a>Sin&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a1cfaa710db2a54673b21d2ea2da757c8ab95a01ffffa8fcdd2a9af961937c097c"></a>Ceil&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00125">125</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;{</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a> = 0,</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0">Exp</a> = 1,</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a> = 2,</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4">Rsqrt</a> = 3,</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd">Neg</a> = 4,</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc">LogicalNot</a> = 5,</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b">Log</a> = 6,</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd">Sin</a> = 7,</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8ab95a01ffffa8fcdd2a9af961937c097c">Ceil</a> = 8</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ad10d72a6f8859949bbe6134c638ce171"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad10d72a6f8859949bbe6134c638ce171">&#9670;&nbsp;</a></span>Activation() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Activation </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>out</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>tensorInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a>&#160;</td>
<td class="paramname"><em>function</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>b</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_activation_8cpp_source.html#l00102">102</a> of file <a class="el" href="_activation_8cpp_source.html">Activation.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;{</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numElements = tensorInfo.GetNumElements();</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; </div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numElements; i++)</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; {</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; out.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(<a class="code" href="namespacearmnn.html#ad10d72a6f8859949bbe6134c638ce171">Activation</a>(in.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>(), <span class="keyword">function</span>, a, b));</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; ++in;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; ++out;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; in -= numElements;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; out -= numElements;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_activation_8cpp_source.html#l00013">Activation()</a>, <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.html#l00198">TensorInfo::GetNumElements()</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="a7636fbbc4f8ea2d0cf9f3ac2d12a4c62"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">&#9670;&nbsp;</a></span>Activation() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">float Activation </td>
<td>(</td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a>&#160;</td>
<td class="paramname"><em>function</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>b</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_activation_8cpp_source.html#l00013">13</a> of file <a class="el" href="_activation_8cpp_source.html">Activation.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keywordtype">float</span> output;</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="comment">// Compute the result of the activation function.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordflow">switch</span> (<span class="keyword">function</span>)</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; {</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Linear:</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; output = a * in + b;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; }</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Sigmoid:</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; {</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; output = 1.f / (1.f + expf(-in));</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; }</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">case</span> ActivationFunction::ReLu:</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; output = std::max(0.f, in);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; }</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">case</span> ActivationFunction::BoundedReLu:</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; output = std::min(a, std::max(b, in));</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">case</span> ActivationFunction::SoftReLu:</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; {</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; output = logf(1.0f + expf(in));</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">case</span> ActivationFunction::LeakyReLu:</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; output = in &gt; 0.0f ? in : (in * a);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Abs:</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; {</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; output = in &lt; 0 ? -in : in;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Sqrt:</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; {</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; output = sqrtf(in);</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; }</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Square:</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; output = in * in;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">case</span> ActivationFunction::TanH:</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; output = a * tanhf(b * in);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Elu:</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; {</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; output = (in &gt;= 0) ? in : a * (expf(in) - 1);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">case</span> ActivationFunction::HardSwish:</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="comment">// hard_swish(x) = x * relu6(x+3) / 6</span></div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="comment">// relu6(x) = min(max(x,0),6)</span></div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; output = in * (std::min(std::max((in + 3),0.0f),6.0f)) / 6;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Gelu:</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="comment">// gelu(x) = x * 1/2 * (1 + erf(x / sqrt(2))),</span></div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="comment">// where erf is Gaussian error function</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; output = in * (0.5f * (1.0f + erff(<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(in / std::sqrt(2)))));</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported activation function&quot;</span>);</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> output;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">BoundedReLu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d">Elu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaf48cca1c6deaa6a1c34e4ee46954cf0b">Gelu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186">HardSwish</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735">LeakyReLu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b">Linear</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">ReLu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">Sigmoid</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef">SoftReLu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304">Square</a>, and <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e">TanH</a>.</p>
<p class="reference">Referenced by <a class="el" href="_activation_8cpp_source.html#l00102">Activation()</a>, and <a class="el" href="_lstm_8cpp_source.html#l00013">LstmImpl()</a>.</p>
</div>
</div>
<a id="ae8dcbb74cf0c855724f12833a55a5684"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae8dcbb74cf0c855724f12833a55a5684">&#9670;&nbsp;</a></span>AllocateOutputData()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::AllocateOutputData </td>
<td>(</td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>numOutput</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>numSelected</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>boxCorners</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
<td class="paramname"><em>outputIndices</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
<td class="paramname"><em>selectedBoxes</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
<td class="paramname"><em>selectedClasses</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>selectedScores</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float *&#160;</td>
<td class="paramname"><em>detectionBoxes</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float *&#160;</td>
<td class="paramname"><em>detectionScores</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float *&#160;</td>
<td class="paramname"><em>detectionClasses</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float *&#160;</td>
<td class="paramname"><em>numDetections</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_detection_post_process_8cpp_source.html#l00101">101</a> of file <a class="el" href="_detection_post_process_8cpp_source.html">DetectionPostProcess.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;{</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numOutput; ++i)</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; {</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> boxIndex = i * 4;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (i &lt; numSelected)</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> boxCornorIndex = selectedBoxes[outputIndices[i]] * 4;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; detectionScores[i] = selectedScores[outputIndices[i]];</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; detectionClasses[i] = armnn::numeric_cast&lt;float&gt;(selectedClasses[outputIndices[i]]);</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; detectionBoxes[boxIndex] = boxCorners[boxCornorIndex];</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; detectionBoxes[boxIndex + 1] = boxCorners[boxCornorIndex + 1];</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; detectionBoxes[boxIndex + 2] = boxCorners[boxCornorIndex + 2];</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; detectionBoxes[boxIndex + 3] = boxCorners[boxCornorIndex + 3];</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; {</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; detectionScores[i] = 0.0f;</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; detectionClasses[i] = 0.0f;</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; detectionBoxes[boxIndex] = 0.0f;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; detectionBoxes[boxIndex + 1] = 0.0f;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; detectionBoxes[boxIndex + 2] = 0.0f;</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; detectionBoxes[boxIndex + 3] = 0.0f;</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; }</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; }</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; numDetections[0] = armnn::numeric_cast&lt;float&gt;(numSelected);</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_detection_post_process_8cpp_source.html#l00139">DetectionPostProcess()</a>.</p>
</div>
</div>
<a id="a2a0bcfb4df0a03357b4cbb8d9e89a3da"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2a0bcfb4df0a03357b4cbb8d9e89a3da">&#9670;&nbsp;</a></span>AllTypesAreEqualImpl() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::AllTypesAreEqualImpl </td>
<td>(</td>
<td class="paramtype">T&#160;</td>
<td class="paramname"><em>t1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">T&#160;</td>
<td class="paramname"><em>t2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Rest...&#160;</td>
<td class="paramname"><em>rest</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_support_rules_8hpp_source.html#l00064">64</a> of file <a class="el" href="_layer_support_rules_8hpp_source.html">LayerSupportRules.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;{</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; static_assert(std::is_same&lt;T, TensorInfo&gt;::value, <span class="stringliteral">&quot;Type T must be a TensorInfo&quot;</span>);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">return</span> (t1.GetDataType() == t2.GetDataType()) &amp;&amp; <a class="code" href="namespacearmnn.html#a2a0bcfb4df0a03357b4cbb8d9e89a3da">AllTypesAreEqualImpl</a>(t2, rest...);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_layer_support_rules_8hpp_source.html#l00058">AllTypesAreEqualImpl()</a>.</p>
</div>
</div>
<a id="a5980f7b42f4df041efebdc6ae242f686"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5980f7b42f4df041efebdc6ae242f686">&#9670;&nbsp;</a></span>AllTypesAreEqualImpl() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::AllTypesAreEqualImpl </td>
<td>(</td>
<td class="paramtype">T&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_support_rules_8hpp_source.html#l00058">58</a> of file <a class="el" href="_layer_support_rules_8hpp_source.html">LayerSupportRules.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;{</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_layer_support_rules_8hpp_source.html#l00064">AllTypesAreEqualImpl()</a>, and <a class="el" href="_layer_support_rules_8hpp_source.html#l00074">TypesAreEqual::TypesAreEqual()</a>.</p>
</div>
</div>
<a id="a0c8a28b71e49c04596289ff281e58f1a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0c8a28b71e49c04596289ff281e58f1a">&#9670;&nbsp;</a></span>Append() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::Append </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimizer.html#ad1794808004025d6e06c176507197b24">Optimizer::Optimizations</a> &amp;&#160;</td>
<td class="paramname"><em>optimizations</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Front &amp;&amp;&#160;</td>
<td class="paramname"><em>front</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Others &amp;&amp;...&#160;</td>
<td class="paramname"><em>others</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_optimizer_8hpp_source.html#l00036">36</a> of file <a class="el" href="_optimizer_8hpp_source.html">Optimizer.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; Append&lt;Front&gt;(optimizations, std::forward&lt;Front&gt;(front));</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="namespacearmnn.html#a0c8a28b71e49c04596289ff281e58f1a">Append</a>&lt;Others...&gt;(optimizations, std::forward&lt;Others&gt;(others)...);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;};</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_optimizer_8hpp_source.html#l00030">Append()</a>.</p>
</div>
</div>
<a id="a4907f6b88c3e72be6b8ae876de355e0a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4907f6b88c3e72be6b8ae876de355e0a">&#9670;&nbsp;</a></span>Append() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::Append </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimizer.html#ad1794808004025d6e06c176507197b24">Optimizer::Optimizations</a> &amp;&#160;</td>
<td class="paramname"><em>optimizations</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">T &amp;&amp;&#160;</td>
<td class="paramname"><em>optimization</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_optimizer_8hpp_source.html#l00030">30</a> of file <a class="el" href="_optimizer_8hpp_source.html">Optimizer.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; optimizations.emplace_back(<span class="keyword">new</span> T(optimization));</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;};</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_optimizer_8hpp_source.html#l00036">Append()</a>, and <a class="el" href="_optimizer_8hpp_source.html#l00043">MakeOptimizations()</a>.</p>
</div>
</div>
<a id="ac39f2b15d34d3e2fc74d586fc3e26231"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac39f2b15d34d3e2fc74d586fc3e26231">&#9670;&nbsp;</a></span>ApplyBackendOptimizations()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a> armnn::ApplyBackendOptimizations </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimized_network_impl.html">OptimizedNetworkImpl</a> *&#160;</td>
<td class="paramname"><em>optNetObjPtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_backend_settings.html">BackendSettings</a> &amp;&#160;</td>
<td class="paramname"><em>backendSettings</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;&#160;</td>
<td class="paramname"><em>backends</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> &amp;&#160;</td>
<td class="paramname"><em>modelOptions</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt;&#160;</td>
<td class="paramname"><em>errMessages</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01320">1320</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;{</div>
<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; <a class="code" href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Optimizer_ApplyBackendOptimizations&quot;</span>)</div>
<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; OptimizationResult result;</div>
<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; </div>
<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; <span class="comment">// Get the optimized graph</span></div>
<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; Graph&amp; optGraph = optNetObjPtr-&gt;GetGraph();</div>
<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; </div>
<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; <span class="comment">// Run backend specific optimizations</span></div>
<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; for (auto&amp;&amp; selectedBackend : backendSettings.m_SelectedBackends)</div>
<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; {</div>
<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; <span class="keyword">auto</span> backendObjPtr = backends.find(selectedBackend)-&gt;second.get();</div>
<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; <span class="keywordflow">if</span> (!backendObjPtr)</div>
<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; {</div>
<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_null_pointer_exception.html">armnn::NullPointerException</a>(<span class="stringliteral">&quot;backendObjPtr must not be null.&quot;</span>);</div>
<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; }</div>
<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; </div>
<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; <span class="keywordflow">if</span> (selectedBackend == <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</a> || selectedBackend == <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a>)</div>
<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; {</div>
<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#a58a79c101b088880733afee089a1ec7f">optimizations::PermuteDepthwiseConv2dWeights</a>()));</div>
<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#ad668074369437a111649f51296ff8959">optimizations::FusePermuteIntoConstLayer</a>()));</div>
<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; }</div>
<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; </div>
<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; <span class="comment">// Select sub-graphs based on backend</span></div>
<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; SubgraphViewSelector::Subgraphs subgraphs =</div>
<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; SubgraphViewSelector::SelectSubgraphs(optGraph,</div>
<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; <span class="comment">// Select layers assigned to the requested backend</span></div>
<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; [&amp;backendObjPtr](<span class="keyword">const</span> Layer&amp; layer)</div>
<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; {</div>
<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; </div>
<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; <span class="keywordflow">return</span> layer.GetType() != LayerType::Input &amp;&amp;</div>
<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; layer.GetType() != LayerType::Output &amp;&amp;</div>
<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; layer.GetBackendId() == backendObjPtr-&gt;GetId();</div>
<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; });</div>
<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; <span class="keywordflow">if</span> (subgraphs.empty())</div>
<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; {</div>
<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; <span class="comment">// No sub-graphs found, try with next selected backend</span></div>
<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; }</div>
<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; </div>
<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; <span class="comment">// Try to optimize each sub-graph</span></div>
<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; subgraph : subgraphs)</div>
<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; {</div>
<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; <span class="comment">// Try to optimize the current sub-graph</span></div>
<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; <a class="code" href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(backendObjPtr-&gt;GetId(), <span class="stringliteral">&quot;Optimizer_OptimizeSubgraph&quot;</span>);</div>
<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; OptimizationViews optimizationViews = backendObjPtr-&gt;OptimizeSubgraphView(*subgraph, modelOptions);</div>
<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; <span class="keywordflow">if</span> (!optimizationViews.Validate(*subgraph))</div>
<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; {</div>
<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;optimizationViews must have a valid subgraph.&quot;</span>);</div>
<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; }</div>
<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; </div>
<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; <span class="comment">// Optimization attempted, check the resulting optimized sub-graph</span></div>
<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; substitution : optimizationViews.GetSubstitutions())</div>
<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; {</div>
<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; <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="l01379"></a><span class="lineno"> 1379</span>&#160; SubgraphView&amp; replacementSubgraph = substitution.m_ReplacementSubgraph;</div>
<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; SubgraphView&amp; substitutableSubgraph = substitution.m_SubstitutableSubgraph;</div>
<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; optGraph.SubstituteSubgraph(substitutableSubgraph, replacementSubgraph);</div>
<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; </div>
<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; <span class="comment">// Assign the current backend to the optimized sub-graph</span></div>
<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; <span class="keyword">const</span> SubgraphView::IConnectableLayers&amp; subgraphLayers = replacementSubgraph.GetIConnectableLayers();</div>
<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; std::for_each(subgraphLayers.begin(), subgraphLayers.end(), [&amp;selectedBackend](IConnectableLayer* l)</div>
<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; {</div>
<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; PolymorphicDowncast&lt;Layer*&gt;(l)-&gt;SetBackendId(selectedBackend);</div>
<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; });</div>
<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; }</div>
<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; </div>
<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; <span class="comment">// Remove deleted sub-graphs</span></div>
<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; deletedSubgraph : optimizationViews.GetDeletedSubgraphs())</div>
<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; {</div>
<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; l : deletedSubgraph.GetIConnectableLayers())</div>
<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; {</div>
<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; Layer* deletedLayer = PolymorphicDowncast&lt;Layer*&gt;(l);</div>
<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> in = deletedLayer-&gt;GetNumInputSlots(); in &gt; 0; --in)</div>
<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; {</div>
<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; <span class="keyword">auto</span> inputSlot = deletedLayer-&gt;GetInputSlot(in -1);</div>
<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; OutputSlot* parentOut = inputSlot.GetConnectedOutputSlot();</div>
<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; parentOut-&gt;Disconnect(inputSlot);</div>
<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> out = deletedLayer-&gt;GetOutputSlot(in -1).GetNumConnections(); out &gt; 0; --out)</div>
<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; {</div>
<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; InputSlot* childIn = deletedLayer-&gt;GetOutputSlot(in - 1).GetConnection(out -1);</div>
<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; deletedLayer-&gt;GetOutputSlot(in - 1).Disconnect(*childIn);</div>
<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; parentOut-&gt;Connect(*childIn);</div>
<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; }</div>
<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; }</div>
<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; optGraph.EraseLayer(deletedLayer);</div>
<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; }</div>
<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; }</div>
<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; </div>
<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; <span class="keywordflow">if</span> (!optimizationViews.GetFailedSubgraphs().empty())</div>
<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; {</div>
<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; std::stringstream warningMsg;</div>
<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; warningMsg &lt;&lt; <span class="stringliteral">&quot;Some sub-graph(s) failed to optimized on &quot;</span> &lt;&lt; backendObjPtr-&gt;GetId() &lt;&lt; <span class="stringliteral">&quot; backend.&quot;</span>;</div>
<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; <a class="code" href="namespacearmnn.html#a070307e9ee0f7969f7d4320145d1dddb">ReportWarning</a>(warningMsg.str(), errMessages);</div>
<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; </div>
<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; <span class="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="l01420"></a><span class="lineno"> 1420</span>&#160; BackendSettings settingsCopy(backendSettings);</div>
<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; <span class="keywordflow">if</span> (!backendObjPtr-&gt;GetId().IsCpuRef())</div>
<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; {</div>
<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; <span class="comment">// Add the current backend to the list of backends to ignore</span></div>
<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; settingsCopy.m_IgnoredBackends.insert(backendObjPtr-&gt;GetId());</div>
<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; }</div>
<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; </div>
<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; <span class="keywordtype">int</span> count=0;</div>
<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; failedSubgraph : optimizationViews.GetFailedSubgraphs())</div>
<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; {</div>
<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; <span class="comment">// An error occurred: the optimization was attempted but not performed, try different backends</span></div>
<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; std::stringstream subgraphMsg;</div>
<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; subgraphMsg &lt;&lt; <span class="stringliteral">&quot;Re-assigning backends to &quot;</span> &lt;&lt; failedSubgraph.GetIConnectableLayers().size()</div>
<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; &lt;&lt; <span class="stringliteral">&quot; layers inside sub-graph &quot;</span> &lt;&lt; count++;</div>
<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; <a class="code" href="namespacearmnn.html#a070307e9ee0f7969f7d4320145d1dddb">ReportWarning</a>(subgraphMsg.str(), errMessages);</div>
<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; </div>
<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; OptimizationResult reassignmentResult = <a class="code" href="namespacearmnn.html#a0ea4ff80d0075ff847e96dc12e734368">AssignBackends</a>(optNetObjPtr,</div>
<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; settingsCopy,</div>
<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; *subgraph,</div>
<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; errMessages);</div>
<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; <span class="keywordflow">if</span> (reassignmentResult.m_Error)</div>
<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; {</div>
<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; <span class="comment">// Failed to re-assign one of the remaining backends to each layer of the sub-graph</span></div>
<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; result.m_Error = <span class="keyword">true</span>;</div>
<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; }</div>
<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; }</div>
<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; }</div>
<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; }</div>
<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; }</div>
<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; </div>
<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_profiling_8hpp_source.html#l00220">ARMNN_SCOPED_PROFILING_EVENT</a>, <a class="el" href="_network_8cpp_source.html#l01179">AssignBackends()</a>, <a class="el" href="_layer_8cpp_source.html#l00123">OutputSlot::Connect()</a>, <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">CpuAcc</a>, <a class="el" href="_layer_8cpp_source.html#l00131">OutputSlot::Disconnect()</a>, <a class="el" href="_graph_8hpp_source.html#l00517">Graph::EraseLayer()</a>, <a class="el" href="_layer_8hpp_source.html#l00290">Layer::GetBackendId()</a>, <a class="el" href="_layer_8cpp_source.html#l00083">OutputSlot::GetConnection()</a>, <a class="el" href="_optimization_views_8hpp_source.html#l00061">OptimizationViews::GetDeletedSubgraphs()</a>, <a class="el" href="_optimization_views_8hpp_source.html#l00059">OptimizationViews::GetFailedSubgraphs()</a>, <a class="el" href="_optimized_network_impl_8hpp_source.html#l00027">OptimizedNetworkImpl::GetGraph()</a>, <a class="el" href="_subgraph_view_8cpp_source.html#l00281">SubgraphView::GetIConnectableLayers()</a>, <a class="el" href="_layer_8hpp_source.html#l00337">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00158">OutputSlot::GetNumConnections()</a>, <a class="el" href="_layer_8hpp_source.html#l00334">Layer::GetNumInputSlots()</a>, <a class="el" href="_layer_8hpp_source.html#l00339">Layer::GetOutputSlot()</a>, <a class="el" href="_optimization_views_8hpp_source.html#l00058">OptimizationViews::GetSubstitutions()</a>, <a class="el" href="_layer_8hpp_source.html#l00286">Layer::GetType()</a>, <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">GpuAcc</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="_network_8hpp_source.html#l00266">OptimizationResult::m_Error</a>, <a class="el" href="_backend_settings_8hpp_source.html#l00023">BackendSettings::m_IgnoredBackends</a>, <a class="el" href="_backend_settings_8hpp_source.html#l00022">BackendSettings::m_SelectedBackends</a>, <a class="el" href="_optimizer_8hpp_source.html#l00043">MakeOptimizations()</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>, <a class="el" href="_optimizer_8cpp_source.html#l00016">Optimizer::Pass()</a>, <a class="el" href="_network_8cpp_source.html#l00774">ReportWarning()</a>, <a class="el" href="_subgraph_view_selector_8cpp_source.html#l00269">SubgraphViewSelector::SelectSubgraphs()</a>, <a class="el" href="_graph_8cpp_source.html#l00475">Graph::SubstituteSubgraph()</a>, <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>, and <a class="el" href="_optimization_views_8cpp_source.html#l00011">OptimizationViews::Validate()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01906">Optimize()</a>.</p>
</div>
</div>
<a id="a1687cef9e4d417595f05519f3b67bf0f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1687cef9e4d417595f05519f3b67bf0f">&#9670;&nbsp;</a></span>ArgMinMax() <span class="overload">[1/3]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">template void armnn::ArgMinMax </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int32_t *&#160;</td>
<td class="paramname"><em>out</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputTensorInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputTensorInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a>&#160;</td>
<td class="paramname"><em>function</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>axis</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a4ef59ef40b2161e37f3e5eb990a342ad"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4ef59ef40b2161e37f3e5eb990a342ad">&#9670;&nbsp;</a></span>ArgMinMax() <span class="overload">[2/3]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">template void armnn::ArgMinMax </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int64_t *&#160;</td>
<td class="paramname"><em>out</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputTensorInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputTensorInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a>&#160;</td>
<td class="paramname"><em>function</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>axis</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="ad441be836a142e8935e0413f4a22c9ec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad441be836a142e8935e0413f4a22c9ec">&#9670;&nbsp;</a></span>ArgMinMax() <span class="overload">[3/3]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void ArgMinMax </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">OUT *&#160;</td>
<td class="paramname"><em>out</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputTensorInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputTensorInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a>&#160;</td>
<td class="paramname"><em>function</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>axis</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arg_min_max_8cpp_source.html#l00017">17</a> of file <a class="el" href="_arg_min_max_8cpp_source.html">ArgMinMax.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(outputTensorInfo);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> uAxis = <a class="code" href="namespacearmnn_utils.html#ac93cb1365b4bcb67df2a3164606096c5">armnnUtils::GetUnsignedAxis</a>(inputTensorInfo.GetNumDimensions(), axis);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outerElements = <a class="code" href="namespacearmnn_utils.html#af57864f5e03358d14c2988edae912b8b">armnnUtils::GetNumElementsBetween</a>(inputTensorInfo.GetShape(), 0, uAxis);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axisSize = inputTensorInfo.GetShape()[uAxis];</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> innerElements = <a class="code" href="namespacearmnn_utils.html#af57864f5e03358d14c2988edae912b8b">armnnUtils::GetNumElementsBetween</a>(inputTensorInfo.GetShape(),</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; uAxis + 1,</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; inputTensorInfo.GetNumDimensions());</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outer = 0; outer &lt; outerElements; ++outer) {</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inner = 0; inner &lt; innerElements; ++inner) {</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; in[outer * axisSize * innerElements + inner];</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">auto</span> tmpValue = in.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tmpIndex = 0;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1; i &lt; axisSize; ++i) {</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; in[(outer * axisSize * innerElements) + (i * innerElements) + inner];</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; value = in.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">if</span> ((<span class="keyword">function</span> == <a class="code" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">armnn::ArgMinMaxFunction::Min</a> &amp;&amp; value &lt; tmpValue) ||</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; (<span class="keyword">function</span> == <a class="code" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">armnn::ArgMinMaxFunction::Max</a> &amp;&amp; value &gt; tmpValue)) {</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; tmpValue = value;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; tmpIndex = i;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; out[outer * innerElements + inner] = armnn::numeric_cast&lt;OUT&gt;(tmpIndex);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_utils_8cpp_source.html#l00209">armnnUtils::GetNumElementsBetween()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_tensor_utils_8cpp_source.html#l00236">armnnUtils::GetUnsignedAxis()</a>, <a class="el" href="_ignore_unused_8hpp_source.html#l00014">IgnoreUnused()</a>, <a class="el" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a>, and <a class="el" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a>.</p>
</div>
</div>
<a id="a3854dece5adbc9c94f7e460b58b82be9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3854dece5adbc9c94f7e460b58b82be9">&#9670;&nbsp;</a></span>AssertNumberOfInputSlots()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::AssertNumberOfInputSlots </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;&#160;</td>
<td class="paramname"><em>layer</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_8cpp_source.html#l00028">28</a> of file <a class="el" href="_layer_8cpp_source.html">Layer.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">switch</span> (layer.GetType())</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">case</span> LayerType::Convolution2d:</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">case</span> LayerType::DepthwiseConvolution2d:</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a435f9350a94adfbb0d5b9abb5f430914">LayerType::FullyConnected</a>:</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; {</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">if</span> (layer.GetNumInputSlots() != 2 &amp;&amp; layer.GetNumInputSlots() != 3)</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;layer must have either 2 or 3 input slots.&quot;</span>);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">if</span> (layer.GetNumInputSlots() != 1)</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;layer must have one input slot.&quot;</span>);</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; }</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a">Convolution2d</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4af97adbfc88b7012a0243215b1076e7e7">DepthwiseConvolution2d</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acab78faff25393e9defd1911cb58133e">FullyConnected</a>, <a class="el" href="_layer_8hpp_source.html#l00334">Layer::GetNumInputSlots()</a>, and <a class="el" href="_layer_8hpp_source.html#l00286">Layer::GetType()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_layer_8cpp_source.html#l00053">InputSlot::Insert()</a>.</p>
</div>
</div>
<a id="a839ad76f1f52a70b540805b231f05d9c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a839ad76f1f52a70b540805b231f05d9c">&#9670;&nbsp;</a></span>AssignBackends() <span class="overload">[1/3]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a> AssignBackends </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimized_network_impl.html">OptimizedNetworkImpl</a> *&#160;</td>
<td class="paramname"><em>optNetObjPtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_backend_settings.html">BackendSettings</a> &amp;&#160;</td>
<td class="paramname"><em>backendSettings</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> &amp;&#160;</td>
<td class="paramname"><em>firstLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> &amp;&#160;</td>
<td class="paramname"><em>lastLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt;&#160;</td>
<td class="paramname"><em>errMessages</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01179">1179</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;{</div>
<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <a class="code" href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Optimizer_AssignBackends&quot;</span>);</div>
<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; OptimizationResult result;</div>
<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; </div>
<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; <span class="keyword">auto</span> availablePreferredBackends = backendSettings.GetAvailablePreferredBackends();</div>
<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; <span class="keywordflow">if</span> (availablePreferredBackends.empty())</div>
<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; {</div>
<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; std::stringstream failureMsg;</div>
<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; failureMsg &lt;&lt; <span class="stringliteral">&quot;No preferred backends are available&quot;</span>;</div>
<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; <a class="code" href="namespacearmnn.html#a3cf1cee98e0ed8b54263ec7279f6ec69">ReportError</a>(failureMsg.str(), errMessages);</div>
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; </div>
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; result.m_Error = <span class="keyword">true</span>;</div>
<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; }</div>
<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; </div>
<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = firstLayer; it != lastLayer; ++it)</div>
<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; {</div>
<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; <span class="keyword">auto</span> layer = PolymorphicDowncast&lt;Layer*&gt;(*it);</div>
<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; std::vector&lt;DataType&gt; inOutDataType = <a class="code" href="namespacearmnn.html#a2b8ec686784330e8f20e4444f1ed7e98">GetLayerInOutDatatype</a>(layer);</div>
<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; </div>
<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; <span class="comment">// In AttemptBackendAssignment() we check:</span></div>
<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; <span class="comment">// - if input/output datatypes of the layer are float16</span></div>
<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; <span class="comment">// - if the layer is supported with these datatypes</span></div>
<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; <span class="comment">// If the layer is not supported (failing on ARM_COMPUTE_RETURN_ERROR_ON_CPU_F16_UNSUPPORTED() in clframework),</span></div>
<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; <span class="comment">// we attempt to insert convertion layers either side of the new fp32 layer.</span></div>
<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <span class="keywordtype">bool</span> isFloat16 = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> type : inOutDataType)</div>
<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; {</div>
<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <span class="keywordflow">if</span> (type == DataType::Float16)</div>
<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; {</div>
<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; isFloat16 = <span class="keyword">true</span>;</div>
<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; }</div>
<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; }</div>
<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; </div>
<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetBackendId() == <span class="stringliteral">&quot;Unknown&quot;</span> || isFloat16)</div>
<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; {</div>
<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; <a class="code" href="namespacearmnn.html#af52a698836d638d0a71263c6c1496a05">AssignBackendsIConnectable</a>(optNetObjPtr,</div>
<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; *it,</div>
<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; errMessages,</div>
<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; result,</div>
<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; backendSettings,</div>
<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; availablePreferredBackends);</div>
<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; }</div>
<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; }</div>
<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; </div>
<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = firstLayer; it != lastLayer; ++it)</div>
<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; {</div>
<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; <span class="keyword">auto</span> layer = PolymorphicDowncast&lt;Layer*&gt;(*it);</div>
<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; </div>
<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; <span class="keywordflow">if</span>(layer-&gt;GetType() == LayerType::Input)</div>
<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; {</div>
<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; BackendId connectedBackendId = layer-&gt;GetOutputSlot(0).GetConnection(0)-&gt;GetOwningLayer().GetBackendId();</div>
<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; layer-&gt;SetBackendId(connectedBackendId);</div>
<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; }</div>
<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; }</div>
<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; </div>
<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_profiling_8hpp_source.html#l00220">ARMNN_SCOPED_PROFILING_EVENT</a>, <a class="el" href="_network_8cpp_source.html#l01073">AssignBackendsIConnectable()</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="_backend_settings_8hpp_source.html#l00067">BackendSettings::GetAvailablePreferredBackends()</a>, <a class="el" href="_network_8cpp_source.html#l01017">GetLayerInOutDatatype()</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="_network_8hpp_source.html#l00266">OptimizationResult::m_Error</a>, <a class="el" href="_network_8cpp_source.html#l00762">ReportError()</a>, and <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01320">ApplyBackendOptimizations()</a>, and <a class="el" href="_network_8cpp_source.html#l01288">AssignBackends()</a>.</p>
</div>
</div>
<a id="a0ea4ff80d0075ff847e96dc12e734368"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0ea4ff80d0075ff847e96dc12e734368">&#9670;&nbsp;</a></span>AssignBackends() <span class="overload">[2/3]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a> armnn::AssignBackends </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimized_network_impl.html">OptimizedNetworkImpl</a> *&#160;</td>
<td class="paramname"><em>optNetObjPtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_backend_settings.html">BackendSettings</a> &amp;&#160;</td>
<td class="paramname"><em>backendSettings</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_subgraph_view.html">SubgraphView</a> &amp;&#160;</td>
<td class="paramname"><em>subgraph</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt;&#160;</td>
<td class="paramname"><em>errMessages</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01288">1288</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;{</div>
<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; SubgraphView::IConnectableLayerIterator firstLayer = subgraph.begin();</div>
<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; SubgraphView::IConnectableLayerIterator lastLayer = subgraph.end();</div>
<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a0ea4ff80d0075ff847e96dc12e734368">AssignBackends</a>(optNetObjPtr,</div>
<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; backendSettings,</div>
<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; firstLayer,</div>
<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; lastLayer,</div>
<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; errMessages);</div>
<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_network_8cpp_source.html#l01179">AssignBackends()</a>, <a class="el" href="_subgraph_view_8cpp_source.html#l00286">SubgraphView::begin()</a>, and <a class="el" href="_subgraph_view_8cpp_source.html#l00291">SubgraphView::end()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01906">Optimize()</a>.</p>
</div>
</div>
<a id="a4a0c704ab68e6741579b60b681e5d919"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4a0c704ab68e6741579b60b681e5d919">&#9670;&nbsp;</a></span>AssignBackends() <span class="overload">[3/3]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a> AssignBackends </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimized_network_impl.html">OptimizedNetworkImpl</a> *&#160;</td>
<td class="paramname"><em>optNetObjPtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_backend_settings.html">BackendSettings</a> &amp;&#160;</td>
<td class="paramname"><em>backendSettings</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_subgraph_view.html#a308b86dbdd0a745cef76904674c9850f">SubgraphView::IConnectableLayerIterator</a> &amp;&#160;</td>
<td class="paramname"><em>firstLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_subgraph_view.html#a308b86dbdd0a745cef76904674c9850f">SubgraphView::IConnectableLayerIterator</a> &amp;&#160;</td>
<td class="paramname"><em>lastLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt;&#160;</td>
<td class="paramname"><em>errMessages</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01244">1244</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;{</div>
<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; <a class="code" href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Optimizer_AssignBackends&quot;</span>);</div>
<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; OptimizationResult result;</div>
<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; </div>
<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; <span class="keyword">auto</span> availablePreferredBackends = backendSettings.GetAvailablePreferredBackends();</div>
<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; <span class="keywordflow">if</span> (availablePreferredBackends.empty())</div>
<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; {</div>
<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; std::stringstream failureMsg;</div>
<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; failureMsg &lt;&lt; <span class="stringliteral">&quot;No preferred backends are available&quot;</span>;</div>
<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; <a class="code" href="namespacearmnn.html#a3cf1cee98e0ed8b54263ec7279f6ec69">ReportError</a>(failureMsg.str(), errMessages);</div>
<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; </div>
<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; result.m_Error = <span class="keyword">true</span>;</div>
<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; }</div>
<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; </div>
<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = firstLayer; it != lastLayer; ++it)</div>
<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; {</div>
<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <a class="code" href="namespacearmnn.html#af52a698836d638d0a71263c6c1496a05">AssignBackendsIConnectable</a>(optNetObjPtr,</div>
<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; *it,</div>
<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; errMessages,</div>
<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; result,</div>
<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; backendSettings,</div>
<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; availablePreferredBackends);</div>
<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; }</div>
<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; </div>
<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = firstLayer; it != lastLayer; ++it)</div>
<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; {</div>
<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; <span class="keyword">auto</span> layer = PolymorphicDowncast&lt;Layer*&gt;(*it);</div>
<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; </div>
<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <span class="keywordflow">if</span>(layer-&gt;GetType() == LayerType::Input)</div>
<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; {</div>
<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; BackendId connectedBackendId = layer-&gt;GetOutputSlot(0).GetConnection(0)-&gt;GetOwningLayer().GetBackendId();</div>
<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; layer-&gt;SetBackendId(connectedBackendId);</div>
<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; }</div>
<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; }</div>
<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; </div>
<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_profiling_8hpp_source.html#l00220">ARMNN_SCOPED_PROFILING_EVENT</a>, <a class="el" href="_network_8cpp_source.html#l01073">AssignBackendsIConnectable()</a>, <a class="el" href="_backend_settings_8hpp_source.html#l00067">BackendSettings::GetAvailablePreferredBackends()</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="_network_8hpp_source.html#l00266">OptimizationResult::m_Error</a>, <a class="el" href="_network_8cpp_source.html#l00762">ReportError()</a>, and <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
</div>
</div>
<a id="af52a698836d638d0a71263c6c1496a05"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af52a698836d638d0a71263c6c1496a05">&#9670;&nbsp;</a></span>AssignBackendsIConnectable()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::AssignBackendsIConnectable </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimized_network_impl.html">OptimizedNetworkImpl</a> *&#160;</td>
<td class="paramname"><em>optNetObjPtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_i_connectable_layer.html">IConnectableLayer</a> *&#160;</td>
<td class="paramname"><em>it</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt;&#160;</td>
<td class="paramname"><em>errMessages</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a> &amp;&#160;</td>
<td class="paramname"><em>result</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_backend_settings.html">BackendSettings</a> &amp;&#160;</td>
<td class="paramname"><em>backendSettings</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>availablePreferredBackends</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01073">1073</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;{</div>
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <span class="keyword">auto</span> ReturnError = [&amp;](<span class="keyword">const</span> Layer* layer)</div>
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; {</div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#aeee4e55e6ad4fe12b2168f9fd1e88141">ReturnWithError</a>(result, layer, backendSettings, errMessages);</div>
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; };</div>
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; </div>
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="keyword">auto</span> layer = PolymorphicDowncast&lt;Layer*&gt;(it);</div>
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; </div>
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetType() == LayerType::Input)</div>
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; {</div>
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; }</div>
<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; </div>
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; std::vector&lt;DataType&gt; inOutDataType = <a class="code" href="namespacearmnn.html#a2b8ec686784330e8f20e4444f1ed7e98">GetLayerInOutDatatype</a>(layer);</div>
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; </div>
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; std::string reasonIfUnsupported;</div>
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespacearmnn.html#a8bf1222ae8931bf663fa076b3e3b6f0e">CheckScaleSetOnQuantizedType</a>(layer, errMessages))</div>
<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; {</div>
<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <span class="comment">// don&#39;t bomb immediately, find all the quantized outputs</span></div>
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <span class="comment">// which haven&#39;t had a scale set and report them all back.</span></div>
<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; result.m_Error = <span class="keyword">true</span>;</div>
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; }</div>
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; </div>
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; <span class="comment">// First try assign layer to hint backend</span></div>
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetBackendHint().has_value() &amp;&amp;</div>
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; backendSettings.IsBackendSupported(layer-&gt;GetBackendHint().value()) &amp;&amp;</div>
<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <a class="code" href="namespacearmnn.html#abd660675ae5a9df777dcdb30c50224f6">AttemptBackendAssignment</a>(backendSettings,</div>
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; optNetObjPtr-&gt;GetGraph(),</div>
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; layer,</div>
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; layer-&gt;GetBackendHint().value(),</div>
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; inOutDataType[0],</div>
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; inOutDataType[1],</div>
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; availablePreferredBackends,</div>
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; reasonIfUnsupported,</div>
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; errMessages).<a class="code" href="structarmnn_1_1_optimization_result.html#a955b65059e7f9429a5d6041136bc1487">IsOk</a>())</div>
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; {</div>
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; found = <span class="keyword">true</span>;</div>
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; backendSettings.m_SelectedBackends.insert(layer-&gt;GetBackendHint().value());</div>
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; }</div>
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; {</div>
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; <span class="comment">// Try assign layer to prefered list of backends</span></div>
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; backend : availablePreferredBackends)</div>
<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; {</div>
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetBackendHint().has_value() &amp;&amp;</div>
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; layer-&gt;GetBackendHint().value() == backend)</div>
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; {</div>
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <span class="keywordflow">continue</span>; <span class="comment">//Don&#39;t re-test the backend hint</span></div>
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; }</div>
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; </div>
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; OptimizationResult res = <a class="code" href="namespacearmnn.html#abd660675ae5a9df777dcdb30c50224f6">AttemptBackendAssignment</a>(backendSettings,</div>
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; optNetObjPtr-&gt;GetGraph(),</div>
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; layer,</div>
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; backend,</div>
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; inOutDataType[0],</div>
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; inOutDataType[1],</div>
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; availablePreferredBackends,</div>
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; reasonIfUnsupported,</div>
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; errMessages);</div>
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; </div>
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; <span class="keywordflow">if</span> (res.IsOk())</div>
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; {</div>
<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; found = <span class="keyword">true</span>;</div>
<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; backendSettings.m_SelectedBackends.insert(backend);</div>
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; }</div>
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (res.IsError())</div>
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; {</div>
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; result = res; <span class="comment">// Cannot continue.</span></div>
<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; <span class="comment">// Note: we don&#39;t need to log the error as it would already</span></div>
<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <span class="comment">// be logged in AttemptBackendAssignment().</span></div>
<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; }</div>
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; }</div>
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; }</div>
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; </div>
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; <span class="comment">// If the layer is unsupported by any devices, log and return a null network.</span></div>
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; <span class="keywordflow">if</span> (!found)</div>
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; {</div>
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; <span class="comment">// NOTE: if the layer is not an operation queue type AND we have not got CpuRef as a</span></div>
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; <span class="comment">// fallback we should set the compute device on the layer to CpuRef (these are not</span></div>
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <span class="comment">// available as accelerated operations, or are only available under certain</span></div>
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <span class="comment">// conditions, currently they comprise MemCopy, Constant, Permute)</span></div>
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a> layerType = layer-&gt;GetType();</div>
<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; <span class="keywordflow">if</span> (!backendSettings.IsCpuRefUsed() &amp;&amp; (layerType == <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b">armnn::LayerType::MemCopy</a> ||</div>
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; layerType == <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">armnn::LayerType::Constant</a> ||</div>
<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; layerType == <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7">armnn::LayerType::Permute</a>))</div>
<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; {</div>
<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; BackendId cpuBackendId(<a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a>);</div>
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; layer-&gt;SetBackendId(cpuBackendId);</div>
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; backendSettings.m_SelectedBackends.insert(cpuBackendId);</div>
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; }</div>
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; {</div>
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; result = ReturnError(layer);</div>
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; }</div>
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; }</div>
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; </div>
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_network_8cpp_source.html#l00844">AttemptBackendAssignment()</a>, <a class="el" href="_network_8cpp_source.html#l00801">CheckScaleSetOnQuantizedType()</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">CpuRef</a>, <a class="el" href="_optimized_network_impl_8hpp_source.html#l00027">OptimizedNetworkImpl::GetGraph()</a>, <a class="el" href="_network_8cpp_source.html#l01017">GetLayerInOutDatatype()</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="_backend_settings_8hpp_source.html#l00046">BackendSettings::IsBackendSupported()</a>, <a class="el" href="_backend_settings_8hpp_source.html#l00061">BackendSettings::IsCpuRefUsed()</a>, <a class="el" href="_network_8hpp_source.html#l00280">OptimizationResult::IsError()</a>, <a class="el" href="_network_8hpp_source.html#l00276">OptimizationResult::IsOk()</a>, <a class="el" href="_network_8hpp_source.html#l00266">OptimizationResult::m_Error</a>, <a class="el" href="_backend_settings_8hpp_source.html#l00022">BackendSettings::m_SelectedBackends</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b">MemCopy</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7">Permute</a>, and <a class="el" href="_network_8cpp_source.html#l00786">ReturnWithError()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01179">AssignBackends()</a>.</p>
</div>
</div>
<a id="a09ff1f6670d27d3b41e5b5d35a6c9f37"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a09ff1f6670d27d3b41e5b5d35a6c9f37">&#9670;&nbsp;</a></span>AssignSplitId()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::AssignSplitId </td>
<td>(</td>
<td class="paramtype">LayerSelectionInfo::LayerInfoContainer &amp;&#160;</td>
<td class="paramname"><em>layerInfos</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">LayerSelectionInfo &amp;&#160;</td>
<td class="paramname"><em>layerInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_subgraph_view_selector_8cpp_source.html#l00322">322</a> of file <a class="el" href="_subgraph_view_selector_8cpp_source.html">SubgraphViewSelector.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;{</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="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="l00325"></a><span class="lineno"> 325</span>&#160; <a class="code" href="namespacearmnn.html#afce94270d9c4a51cd0c4ac6a58af4e26">ForEachLayerInput</a>(layerInfos, layerInfo, [&amp;](LayerSelectionInfo&amp; parentInfo)</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; {</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="comment">// We can only attach ourselves to the subgraph from this input if there isn&#39;t a cut here.</span></div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">if</span> (layerInfo.m_IsSelected == parentInfo.m_IsSelected)</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; {</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="comment">// We also need to check that merging into this subgraph won&#39;t cause a dependency cycle between subgraphs.</span></div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="comment">// This will be the case if the subgraph that we will become part of is already a dependency</span></div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="comment">// of one of the subgraphs that are input to this layer, e.g:</span></div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="comment">// 0 | The numbers (0, 1) are the subgraph IDs of each layer and we are looking at layer X.</span></div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="comment">// / \ |</span></div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="comment">// 1 0 | We can&#39;t merge X into subgraph 0, because the left-hand input already depends on subgraph 0.</span></div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="comment">// \ / | We can however merge X into subgraph 1.</span></div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="comment">// X |</span></div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; bool dependenciesOk = true;</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; ForEachLayerInput(layerInfos, layerInfo, [&amp;](LayerSelectionInfo&amp; otherParentInfo)</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; {</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="comment">// We call HasAntecedent() ~ n^2 times, where n is the number of inputs to this layer.</span></div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="comment">// Hence it is important that this is efficient - see PartialSubgraph class description.</span></div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; if (otherParentInfo.m_Subgraph-&gt;HasAntecedent(parentInfo.m_Subgraph.get()))</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; {</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; dependenciesOk = false;</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; }</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; });</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; </div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">if</span> (dependenciesOk)</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; {</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="comment">// Merge into the subgraph of this input. If we have already been merged into another subgraph</span></div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="comment">// (from another input of this layer), then merge both of them together.</span></div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">if</span> (layerInfo.m_Subgraph == <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; {</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; layerInfo.m_Subgraph = parentInfo.m_Subgraph;</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; }</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; {</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="comment">// We call MergeWith() ~ n times, where n is the number of inputs to this layer.</span></div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="comment">// Therefore it does not need to be as performant as HasAntecedent().</span></div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; layerInfo.m_Subgraph-&gt;MergeWith(parentInfo.m_Subgraph.get());</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; }</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; }</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; }</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; });</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; </div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="comment">// If we weren&#39;t able to merge into an existing subgraph then we need to make a new one</span></div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keywordflow">if</span> (layerInfo.m_Subgraph == <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; {</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; layerInfo.m_Subgraph = std::make_shared&lt;PartialSubgraph&gt;();</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; }</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; </div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="comment">// Record dependencies of the chosen subgraph based on the inputs of this layer.</span></div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <a class="code" href="namespacearmnn.html#afce94270d9c4a51cd0c4ac6a58af4e26">ForEachLayerInput</a>(layerInfos, layerInfo, [&amp;](LayerSelectionInfo&amp; parentInfo)</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; {</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="comment">// These functions are called ~n times, where n is the number of inputs to this layer.</span></div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="comment">// Therefore it does not need to be as performant as HasAntecedent().</span></div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">if</span> (!layerInfo.m_Subgraph-&gt;IsMergedWith(parentInfo.m_Subgraph.get()))</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; {</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; layerInfo.m_Subgraph-&gt;AddDirectAntecedent(parentInfo.m_Subgraph.get());</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; }</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; });</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_subgraph_view_selector_8cpp_source.html#l00277">ForEachLayerInput()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_subgraph_view_selector_8cpp_source.html#l00402">SubgraphViewSelector::SelectSubgraphs()</a>.</p>
</div>
</div>
<a id="abd660675ae5a9df777dcdb30c50224f6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abd660675ae5a9df777dcdb30c50224f6">&#9670;&nbsp;</a></span>AttemptBackendAssignment()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a> armnn::AttemptBackendAssignment </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_backend_settings.html">BackendSettings</a> &amp;&#160;</td>
<td class="paramname"><em>backendSettings</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&#160;</td>
<td class="paramname"><em>graph</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> *&#160;</td>
<td class="paramname"><em>layer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a>&#160;</td>
<td class="paramname"><em>backend</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td>
<td class="paramname"><em>dataTypeIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td>
<td class="paramname"><em>dataTypeOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>availablePreferredBackends</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::string &amp;&#160;</td>
<td class="paramname"><em>reasonIfUnsupported</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt;&#160;</td>
<td class="paramname"><em>errMessages</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00844">844</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160;{</div>
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; OptimizationResult result;</div>
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; </div>
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; <span class="comment">// Helper lambda to compose meaningful error message before returning with error</span></div>
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; <span class="keyword">auto</span> ReturnError = [&amp;](<span class="keyword">const</span> Layer* layer)</div>
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; {</div>
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#aeee4e55e6ad4fe12b2168f9fd1e88141">ReturnWithError</a>(result, layer, backendSettings, errMessages);</div>
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; };</div>
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; </div>
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="comment">// need to set the compute device on the layer</span></div>
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <span class="comment">// before we can check if it is supported</span></div>
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; layer-&gt;SetBackendId(backend);</div>
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; std::string currentReasonIfUnsupported;</div>
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; </div>
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="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="l00868"></a><span class="lineno"> 868</span>&#160; <span class="comment">// is older than v8.2, we can check if the operator is supported by changing operator inputs &amp; outputs</span></div>
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <span class="comment">// to be FP32 and inserting convert layers around the FP32 operator.</span></div>
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="keywordtype">bool</span> isLayerSupported = <a class="code" href="namespacearmnn.html#a138ca3929b888fa8d9088c076e9de48c">IWorkloadFactory::IsLayerSupported</a>(*layer, EmptyOptional(), currentReasonIfUnsupported);</div>
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; reasonIfUnsupported += currentReasonIfUnsupported;</div>
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="comment">// This string matches the error message that is produced by acl when attempting to run FP16 kernels on</span></div>
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; <span class="comment">// a cpu or build that does not have fp16 support. We use this to check if we should add</span></div>
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="comment">// conversion layers or not.</span></div>
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; std::string checkStr = <span class="stringliteral">&quot;This CPU architecture does not support F16 data type, you need v8.2 or above&quot;</span>;</div>
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="keywordflow">if</span> (!isLayerSupported || currentReasonIfUnsupported.find(checkStr) != std::string::npos)</div>
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; {</div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="keywordflow">if</span> (dataTypeIn == DataType::Float16 || dataTypeOut == DataType::Float16)</div>
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; {</div>
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a138ca3929b888fa8d9088c076e9de48c">IWorkloadFactory::IsLayerSupported</a>(*layer, DataType::Float32, reasonIfUnsupported)</div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; &amp;&amp; layer-&gt;GetType() != LayerType::ConvertFp32ToFp16</div>
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; &amp;&amp; layer-&gt;GetType() != LayerType::ConvertFp16ToFp32)</div>
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; {</div>
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <span class="keyword">auto</span> ConstantLayerFromFp16ToFp32 = [](Layer&amp; layer)</div>
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; {</div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keywordflow">if</span> (layer.GetType() == LayerType::Constant)</div>
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; {</div>
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; ConstantLayer* constantLayer = PolymorphicDowncast&lt;ConstantLayer*&gt;(&amp;layer);</div>
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; </div>
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <span class="keyword">auto</span>&amp; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a> = constantLayer-&gt;m_LayerOutput-&gt;GetTensorInfo();</div>
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; </div>
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType() == DataType::Float16)</div>
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; {</div>
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; std::vector&lt;float&gt; newValues(<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements());</div>
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; </div>
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <a class="code" href="classarmnn_utils_1_1_floating_point_converter.html#ac1f1568f02163a68906a0030e0ba9871">armnnUtils::FloatingPointConverter::ConvertFloat16To32</a>(</div>
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; constantLayer-&gt;m_LayerOutput-&gt;GetConstTensor&lt;<a class="code" href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">Half</a>&gt;(),</div>
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements(),</div>
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; newValues.data());</div>
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; </div>
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; TensorInfo newInfo(info);</div>
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; newInfo.SetDataType(DataType::Float32);</div>
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; ConstTensor newInput(newInfo, newValues);</div>
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; constantLayer-&gt;m_LayerOutput.reset(<span class="keyword">new</span> ScopedTensorHandle(newInput));</div>
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; </div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; layer.GetOutputSlot(0).SetTensorInfo(newInfo);</div>
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; }</div>
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; }</div>
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; };</div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; </div>
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <span class="keywordtype">bool</span> checkType = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; </div>
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> inputSlot : layer-&gt;GetInputSlots())</div>
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; {</div>
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <span class="keyword">auto</span> connectedOutputSlot = inputSlot.GetConnectedOutputSlot();</div>
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; <span class="keywordflow">if</span> (connectedOutputSlot-&gt;GetOwningLayer().GetType() == LayerType::Constant)</div>
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; {</div>
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="keywordflow">if</span> (connectedOutputSlot-&gt;GetNumConnections() == 1)</div>
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; {</div>
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; checkType = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; ConstantLayerFromFp16ToFp32(connectedOutputSlot-&gt;GetOwningLayer());</div>
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; }</div>
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; }</div>
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; }</div>
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; </div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <span class="comment">// Insert FP16 -&gt; FP32 conversion layer before current layer</span></div>
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; std::vector&lt;ConvertFp16ToFp32Layer*&gt; convertFp16ToFp32Layers;</div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordflow">if</span> (dataTypeIn == DataType::Float16)</div>
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; {</div>
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; convertFp16ToFp32Layers =</div>
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <a class="code" href="namespacearmnn.html#ad31c56533e4f9f9f51719599fbfcf7bb">InsertConvertFp16ToFp32LayersBefore</a>(graph, *layer, checkType);</div>
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; }</div>
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; </div>
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="comment">// Insert FP32 -&gt; FP16 conversion layer after current layer</span></div>
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; std::vector&lt;ConvertFp32ToFp16Layer*&gt; convertFp32ToFp16Layers;</div>
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <span class="keywordflow">if</span> (dataTypeOut == DataType::Float16)</div>
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; {</div>
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; convertFp32ToFp16Layers =</div>
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <a class="code" href="namespacearmnn.html#abf625e50a5eaeafce5b39580dc95a9d3">InsertConvertFp32ToFp16LayersAfter</a>(graph, *layer);</div>
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; }</div>
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; </div>
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <span class="comment">// Assign a supported backend to the newly introduced conversion layers</span></div>
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; <span class="keyword">auto</span> AssignFirstSupportedBackend = [&amp;](Layer* layer, BackendId preferredBackend)</div>
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; {</div>
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; <span class="keywordtype">bool</span> supportedBackendFound = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; std::string reasonIfUnsupported;</div>
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; </div>
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; <span class="comment">// Try preferred backend first</span></div>
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; layer-&gt;SetBackendId(preferredBackend);</div>
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a138ca3929b888fa8d9088c076e9de48c">IWorkloadFactory::IsLayerSupported</a>(*layer,</div>
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; EmptyOptional(),</div>
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; reasonIfUnsupported))</div>
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; {</div>
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; supportedBackendFound = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; }</div>
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; {</div>
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; backend : availablePreferredBackends)</div>
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; {</div>
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="comment">// Skip preferred backend (we already determined that it is not supported)</span></div>
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <span class="keywordflow">if</span> (backend == preferredBackend)</div>
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; {</div>
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; }</div>
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; </div>
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; layer-&gt;SetBackendId(backend);</div>
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a138ca3929b888fa8d9088c076e9de48c">IWorkloadFactory::IsLayerSupported</a>(*layer,</div>
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; EmptyOptional(),</div>
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; reasonIfUnsupported))</div>
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; {</div>
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; supportedBackendFound = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; }</div>
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; }</div>
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; }</div>
<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; </div>
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <span class="keywordflow">return</span> supportedBackendFound;</div>
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; };</div>
<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; </div>
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordflow">for</span> (ConvertFp16ToFp32Layer* convertLayer : convertFp16ToFp32Layers)</div>
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; {</div>
<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; <span class="keywordflow">if</span> (!AssignFirstSupportedBackend(convertLayer, backend))</div>
<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; {</div>
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; <span class="keywordflow">return</span> ReturnError(convertLayer);</div>
<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; }</div>
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; }</div>
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; </div>
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <span class="keywordflow">for</span> (ConvertFp32ToFp16Layer* convertLayer : convertFp32ToFp16Layers)</div>
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; {</div>
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; <span class="keywordflow">if</span> (!AssignFirstSupportedBackend(convertLayer, backend))</div>
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; {</div>
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; <span class="keywordflow">return</span> ReturnError(convertLayer);</div>
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; }</div>
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; }</div>
<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; </div>
<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; }</div>
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; }</div>
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; </div>
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; std::stringstream warningMsg;</div>
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; warningMsg &lt;&lt; <span class="stringliteral">&quot;Layer of type &quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.html#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a>(layer-&gt;GetType())</div>
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; &lt;&lt; <span class="stringliteral">&quot; is not supported on requested backend &quot;</span> &lt;&lt; layer-&gt;GetBackendId().Get()</div>
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; &lt;&lt; <span class="stringliteral">&quot; for input data type &quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.html#a81b5ff8545adad19a1c9d4ca076d552c">GetDataTypeName</a>(dataTypeIn)</div>
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; &lt;&lt; <span class="stringliteral">&quot; and output data type &quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.html#a81b5ff8545adad19a1c9d4ca076d552c">GetDataTypeName</a>(dataTypeOut)</div>
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; &lt;&lt; <span class="stringliteral">&quot; (reason: &quot;</span> &lt;&lt; reasonIfUnsupported</div>
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; &lt;&lt; <span class="stringliteral">&quot;), falling back to the next backend.&quot;</span>;</div>
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <a class="code" href="namespacearmnn.html#a070307e9ee0f7969f7d4320145d1dddb">ReportWarning</a>(warningMsg.str(), errMessages);</div>
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; </div>
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; <span class="keywordflow">return</span> OptimizationResult(<span class="keyword">true</span>, <span class="keyword">false</span>);</div>
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; }</div>
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; {</div>
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; }</div>
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="_floating_point_converter_8cpp_source.html#l00043">FloatingPointConverter::ConvertFloat16To32()</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a912a4b4d73726c282e3f79aa2c390d6c">ConvertFp16ToFp32</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4addf4f83b056acd5549949fc0350e9aad">ConvertFp32ToFp16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_backend_id_8hpp_source.html#l00138">BackendId::Get()</a>, <a class="el" href="_layer_8hpp_source.html#l00290">Layer::GetBackendId()</a>, <a class="el" href="_types_utils_8hpp_source.html#l00233">GetDataTypeName()</a>, <a class="el" href="_layer_8hpp_source.html#l00258">Layer::GetInputSlots()</a>, <a class="el" href="_internal_types_8cpp_source.html#l00013">GetLayerTypeAsCString()</a>, <a class="el" href="_layer_8hpp_source.html#l00339">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00286">Layer::GetType()</a>, <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="el" href="_network_utils_8cpp_source.html#l00040">InsertConvertFp16ToFp32LayersBefore()</a>, <a class="el" href="_network_utils_8cpp_source.html#l00079">InsertConvertFp32ToFp16LayersAfter()</a>, <a class="el" href="_workload_factory_8cpp_source.html#l01629">IWorkloadFactory::IsLayerSupported()</a>, <a class="el" href="_constant_layer_8hpp_source.html#l00046">ConstantLayer::m_LayerOutput</a>, <a class="el" href="_network_8cpp_source.html#l00774">ReportWarning()</a>, <a class="el" href="_network_8cpp_source.html#l00786">ReturnWithError()</a>, <a class="el" href="_layer_8hpp_source.html#l00291">Layer::SetBackendId()</a>, <a class="el" href="_tensor_8hpp_source.html#l00201">TensorInfo::SetDataType()</a>, and <a class="el" href="_layer_8cpp_source.html#l00095">OutputSlot::SetTensorInfo()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01073">AssignBackendsIConnectable()</a>.</p>
</div>
</div>
<a id="ac2807505b850738bc8a1991ce669dd47"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac2807505b850738bc8a1991ce669dd47">&#9670;&nbsp;</a></span>BackendRegistryInstance()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_backend_registry.html">BackendRegistry</a> &amp; BackendRegistryInstance </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_backend_registry_8cpp_source.html#l00015">15</a> of file <a class="el" href="_backend_registry_8cpp_source.html">BackendRegistry.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;{</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keyword">static</span> BackendRegistry instance;</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keywordflow">return</span> instance;</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_common_test_utils_8cpp_source.html#l00072">CreateBackendObject()</a>, <a class="el" href="_network_8cpp_source.html#l01302">CreateSupportedBackends()</a>, <a class="el" href="_dynamic_backend_utils_8cpp_source.html#l00320">DynamicBackendUtils::DeregisterDynamicBackends()</a>, <a class="el" href="_backend_helper_8cpp_source.html#l00051">GetCapability()</a>, <a class="el" href="_backend_helper_8cpp_source.html#l00023">GetILayerSupportByBackendId()</a>, <a class="el" href="_backend_helper_8cpp_source.html#l00130">GetNumberOfCacheFiles()</a>, <a class="el" href="_backend_helper_8cpp_source.html#l00117">HasMatchingCapability()</a>, <a class="el" href="_arm_n_n_profiling_service_initialiser_8cpp_source.html#l00017">ArmNNProfilingServiceInitialiser::InitialiseProfilingService()</a>, <a class="el" href="_dynamic_backend_utils_8cpp_source.html#l00332">DynamicBackendUtils::RegisterDynamicBackends()</a>, <a class="el" href="_runtime_8cpp_source.html#l00323">RuntimeImpl::RuntimeImpl()</a>, and <a class="el" href="_runtime_8cpp_source.html#l00551">RuntimeImpl::~RuntimeImpl()</a>.</p>
</div>
</div>
<a id="adc251e65d99405496d503811589e9a20"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adc251e65d99405496d503811589e9a20">&#9670;&nbsp;</a></span>BatchNormImpl()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void BatchNormImpl </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_batch_normalization_queue_descriptor.html">BatchNormalizationQueueDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>meanDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>varianceDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>betaDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>gammaDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>inputDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>outputEncoder</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_batch_norm_impl_8cpp_source.html#l00018">18</a> of file <a class="el" href="_batch_norm_impl_8cpp_source.html">BatchNormImpl.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> TensorInfo&amp; inputInfo = <a class="code" href="namespacearmnn_utils.html#acee63cd08da47910fc166a1990988fa8">GetTensorInfo</a>(data.m_Inputs[0]);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> TensorShape inputShape = inputInfo.GetShape();</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html">armnnUtils::DataLayoutIndexed</a> dataLayout(data.m_Parameters.m_DataLayout);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputBatches = inputShape[0];</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = inputShape[dataLayout.GetHeightIndex()];</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = inputShape[dataLayout.GetWidthIndex()];</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels = inputShape[dataLayout.GetChannelsIndex()];</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; inputChannels; c++)</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; meanDecoder[c];</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; varianceDecoder[c];</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; betaDecoder[c];</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; gammaDecoder[c];</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">float</span> mean = meanDecoder.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">float</span> var = varianceDecoder.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">float</span> beta = betaDecoder.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">float</span> gamma = gammaDecoder.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">float</span> mult = gamma / sqrtf(var + data.m_Parameters.m_Eps);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">float</span> add = beta - mult * mean;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n = 0; n &lt; inputBatches; n++)</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h &lt; inputHeight; h++)</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; {</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; inputWidth; w++)</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = dataLayout.GetIndex(inputShape, n, c, h, w);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; inputDecoder[index];</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; outputEncoder[index];</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; outputEncoder.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(mult * inputDecoder.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>() + add);</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; }</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; }</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00028">DataLayoutIndexed::GetIndex()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_ref_workload_utils_8hpp_source.html#l00033">GetTensorInfo()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.html#l00843">BatchNormalizationDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.html#l00841">BatchNormalizationDescriptor::m_Eps</a>, <a class="el" href="_workload_data_8hpp_source.html#l00026">QueueDescriptor::m_Inputs</a>, <a class="el" href="_workload_data_8hpp_source.html#l00066">QueueDescriptorWithParameters&lt; LayerDescriptor &gt;::m_Parameters</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="ae97f6a405add803682188eecea9b021d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae97f6a405add803682188eecea9b021d">&#9670;&nbsp;</a></span>BatchToSpaceNd()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void BatchToSpaceNd </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_batch_to_space_nd_descriptor.html">BatchToSpaceNdDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>params</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>outputData</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_batch_to_space_nd_8cpp_source.html#l00050">50</a> of file <a class="el" href="_batch_to_space_nd_8cpp_source.html">BatchToSpaceNd.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;{</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rank = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">if</span> (rank != 3 &amp;&amp; rank != 4 )</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; {</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(<span class="stringliteral">&quot;Tensor rank must be either 3 or 4, but it is &quot;</span> + std::to_string(rank),</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="_exceptions_8hpp.html#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>());</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; }</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html">DataLayoutIndexed</a> dataLayout = params.<a class="code" href="structarmnn_1_1_batch_to_space_nd_descriptor.html#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelDimension3D = params.<a class="code" href="structarmnn_1_1_batch_to_space_nd_descriptor.html#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> == DataLayout::NCHW ? 1 : 2;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> inputShape = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> outputShape = outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputBatchSize = inputShape[0];</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputBatchSize = outputShape[0];</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels = (rank == 3) ? inputShape[channelDimension3D]</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; : inputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()];</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="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.html#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()];</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = (rank == 3) ? 1 : inputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()];</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = outputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()];</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = (rank == 3) ? 1 : outputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()];</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; </div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockHeight = params.<a class="code" href="structarmnn_1_1_batch_to_space_nd_descriptor.html#a02e143524aefddd40b485fcf7dea6696">m_BlockShape</a>[0];</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockWidth = (rank == 3) ? 1 : params.<a class="code" href="structarmnn_1_1_batch_to_space_nd_descriptor.html#a02e143524aefddd40b485fcf7dea6696">m_BlockShape</a>[1];</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cropsTop = params.<a class="code" href="structarmnn_1_1_batch_to_space_nd_descriptor.html#a3941f674c071c9503e00d2b59e92e454">m_Crops</a>[0].first;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cropsLeft = (rank == 3) ? 0 : params.<a class="code" href="structarmnn_1_1_batch_to_space_nd_descriptor.html#a3941f674c071c9503e00d2b59e92e454">m_Crops</a>[1].first;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; </div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inBatch = 0; inBatch &lt; inputBatchSize; ++inBatch)</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; {</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outBatch = inBatch % outputBatchSize;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> spatialOffset = inBatch / outputBatchSize;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inH = 0; inH &lt; inputHeight; ++inH)</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outH = inH * blockHeight + spatialOffset / blockWidth - cropsTop;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">if</span> (outH &gt;= outputHeight)</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; {</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inW = 0; inW &lt; inputWidth; ++inW)</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; {</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outW = inW * blockWidth + spatialOffset % blockWidth - cropsLeft;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span> (outW &gt;= outputWidth)</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; channels; c++)</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outOffset = <a class="code" href="namespacearmnn.html#ac70a495c61526a0500b33b23db86ca27">Offset</a>(outputShape, outBatch, outH, outW, c, dataLayout);</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inOffset = <a class="code" href="namespacearmnn.html#ac70a495c61526a0500b33b23db86ca27">Offset</a>(inputShape, inBatch, inH, inW, c, dataLayout);</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; </div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; outputData[outOffset];</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; inputData[inOffset];</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; outputData.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputData.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>());</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; }</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; }</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_batch_to_space_nd_8cpp_source.html#l00050">BatchToSpaceNd()</a>, <a class="el" href="_exceptions_8hpp_source.html#l00203">CHECK_LOCATION</a>, <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.html#l00898">BatchToSpaceNdDescriptor::m_BlockShape</a>, <a class="el" href="_descriptors_8hpp_source.html#l00900">BatchToSpaceNdDescriptor::m_Crops</a>, <a class="el" href="_descriptors_8hpp_source.html#l00902">BatchToSpaceNdDescriptor::m_DataLayout</a>, <a class="el" href="_batch_to_space_nd_8cpp_source.html#l00015">Offset()</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_batch_to_space_nd_8cpp_source.html#l00050">BatchToSpaceNd()</a>, and <a class="el" href="_batch_to_space_nd_layer_8cpp_source.html#l00019">BatchToSpaceNdLayer::BatchToSpaceNdLayer()</a>.</p>
</div>
</div>
<a id="aade64a959eb941bf19339e14d711a4b0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aade64a959eb941bf19339e14d711a4b0">&#9670;&nbsp;</a></span>BuildAddMulAddSlotLists()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::BuildAddMulAddSlotLists </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>handleReLu</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>multipleOutputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; SlotListType &gt; &amp;&#160;</td>
<td class="paramname"><em>inputLayersSlotLists</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; SlotListType &gt; &amp;&#160;</td>
<td class="paramname"><em>outputLayersSlotLists</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_backend_optimization_utils_8hpp_source.html#l00036">36</a> of file <a class="el" href="_neon_backend_optimization_utils_8hpp_source.html">NeonBackendOptimizationUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;{</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">// Build input slot list</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; inputLayersSlotLists.push_back({0, 1}); <span class="comment">// Add</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; inputLayersSlotLists.push_back({1}); <span class="comment">// Mul</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; inputLayersSlotLists.push_back({1}); <span class="comment">// Add</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">if</span> (handleReLu)</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; inputLayersSlotLists.push_back({}); <span class="comment">// Relu</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="comment">// Build output slot list</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (multipleOutputs)</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; outputLayersSlotLists.push_back({0}); <span class="comment">// Add</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; {</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; outputLayersSlotLists.push_back({}); <span class="comment">// Add</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; outputLayersSlotLists.push_back({}); <span class="comment">// Mul</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">if</span> (handleReLu)</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; outputLayersSlotLists.push_back({}); <span class="comment">// Add</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; outputLayersSlotLists.push_back({0}); <span class="comment">// Relu</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; {</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; outputLayersSlotLists.push_back({0}); <span class="comment">// Add</span></div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="aad03b7a578035532aa75c183bc708846"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aad03b7a578035532aa75c183bc708846">&#9670;&nbsp;</a></span>BuildAddMulAddTensorInfoLists()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::BuildAddMulAddTensorInfoLists </td>
<td>(</td>
<td class="paramtype">Type *&#160;</td>
<td class="paramname"><em>layerList</em>[4], </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int &amp;&#160;</td>
<td class="paramname"><em>numInputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int &amp;&#160;</td>
<td class="paramname"><em>numOutputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>inputInfos</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>outputInfos</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&amp;&#160;</td>
<td class="paramname"><em>activationDescriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool &amp;&#160;</td>
<td class="paramname"><em>fuseReLu</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_backend_optimization_utils_8hpp_source.html#l00087">87</a> of file <a class="el" href="_neon_backend_optimization_utils_8hpp_source.html">NeonBackendOptimizationUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;{</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="_exceptions_8hpp.html#a31e4268013316d114e8927e4c0035ec5">ARMNN_THROW_INVALIDARG_IF_FALSE</a>(layerList[0]);</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="_exceptions_8hpp.html#a31e4268013316d114e8927e4c0035ec5">ARMNN_THROW_INVALIDARG_IF_FALSE</a>(layerList[1]);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="_exceptions_8hpp.html#a31e4268013316d114e8927e4c0035ec5">ARMNN_THROW_INVALIDARG_IF_FALSE</a>(layerList[2]);</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; </div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="_exceptions_8hpp.html#a31e4268013316d114e8927e4c0035ec5">ARMNN_THROW_INVALIDARG_IF_FALSE</a>(<a class="code" href="namespacearmnn.html#aefc7bff008047b9f763c2cf82c1a0fcb">IsSequenceLayerType</a>(*layerList[0], BinaryOperation::Add));</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="_exceptions_8hpp.html#a31e4268013316d114e8927e4c0035ec5">ARMNN_THROW_INVALIDARG_IF_FALSE</a>(<a class="code" href="namespacearmnn.html#aefc7bff008047b9f763c2cf82c1a0fcb">IsSequenceLayerType</a>(*layerList[1], BinaryOperation::Mul));</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <a class="code" href="_exceptions_8hpp.html#a31e4268013316d114e8927e4c0035ec5">ARMNN_THROW_INVALIDARG_IF_FALSE</a>(<a class="code" href="namespacearmnn.html#aefc7bff008047b9f763c2cf82c1a0fcb">IsSequenceLayerType</a>(*layerList[2], BinaryOperation::Add));</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; </div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keyword">auto</span> is1D = [](<span class="keyword">const</span> TensorInfo expanded)</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; TensorInfo collapsed;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#aec9e2fd5ad76777cb83005a5ed7fe3de">CollapseLeadingUnitDimensions</a>(expanded, collapsed))</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; {</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">return</span> (collapsed.GetNumDimensions() == 1);</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> (expanded.GetNumDimensions() == 1);</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; };</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; </div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="comment">// One of the 2 inputs for MUL and the Second ADD must be 1D</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="comment">// ref: clframework/src/cpu/kernels/CpuAddMulAddKernel.cpp</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">auto</span>&amp; mulLayer = *(PolymorphicDowncast&lt;ElementwiseBinaryLayer*&gt;(layerList[1]));</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">auto</span>&amp; add2Layer = *(PolymorphicDowncast&lt;ElementwiseBinaryLayer*&gt;(layerList[2]));</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; Layer&amp; mulInput0 = mulLayer.GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetOwningLayer();</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; Layer&amp; mulInput1 = mulLayer.GetInputSlot(1).GetConnectedOutputSlot()-&gt;GetOwningLayer();</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; Layer&amp; add2Input0 = add2Layer.GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetOwningLayer();</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; Layer&amp; add2Input1 = add2Layer.GetInputSlot(1).GetConnectedOutputSlot()-&gt;GetOwningLayer();</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">if</span> (!is1D(mulInput0.GetOutputSlot(0).GetTensorInfo()) &amp;&amp; !is1D(mulInput1.GetOutputSlot(0).GetTensorInfo()))</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; {</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">if</span> (!is1D(add2Input0.GetOutputSlot(0).GetTensorInfo()) &amp;&amp; !is1D(add2Input1.GetOutputSlot(0).GetTensorInfo()))</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; fuseReLu = (layerList[3] != <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (fuseReLu)</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; activationDescriptor = &amp;PolymorphicDowncast&lt;ActivationLayer *&gt;(layerList[3])-&gt;GetParameters();</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="_exceptions_8hpp.html#a31e4268013316d114e8927e4c0035ec5">ARMNN_THROW_INVALIDARG_IF_FALSE</a>((activationDescriptor-&gt;m_Function == ActivationFunction::ReLu) ||</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; (activationDescriptor-&gt;m_Function == ActivationFunction::BoundedReLu));</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; </div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; numInputs = 0;</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; numOutputs = 0;</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">// Ensure that there are 6 input slots in the add/mul/add layers</span></div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="comment">// we are going to replace</span></div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> layerIdx = 0;</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputSlotCount = 0;</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">for</span> (layerIdx = 0; layerIdx &lt; 3; ++layerIdx)</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; {</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slotIdx = 0; slotIdx &lt; layerList[layerIdx]-&gt;GetNumInputSlots(); ++slotIdx)</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; {</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; InputSlot* inputSlot = &amp;layerList[layerIdx]-&gt;GetInputSlot(slotIdx);</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; OutputSlot* outputSlot = inputSlot-&gt;GetConnectedOutputSlot();</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">if</span> (outputSlot)</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">if</span> (layerIdx == 0)</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="comment">// Always count the input connections of the first add</span></div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; inputInfos.push_back(inputSlot-&gt;GetTensorInfo());</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; numInputs++;</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; {</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="comment">// For subsequent layers, we skip connections to the previous layers in the counting</span></div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">if</span> (&amp;outputSlot-&gt;GetOwningLayer() != layerList[layerIdx-1])</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; TensorInfo inputSlotInfo = inputSlot-&gt;GetTensorInfo();</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span> (numInputs == 2 || numInputs == 3)</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; {</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="comment">// Workaround the broadcast optimization to collapse shapes such as</span></div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="comment">// [1, 1, 1, 2] to [2] as required by backend</span></div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#aec9e2fd5ad76777cb83005a5ed7fe3de">CollapseLeadingUnitDimensions</a>(inputSlot-&gt;GetTensorInfo(), inputSlotInfo))</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; OutputSlot* previousLayerSlot = inputSlot-&gt;GetConnectedOutputSlot();</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">if</span> (previousLayerSlot)</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; {</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">if</span> (previousLayerSlot-&gt;GetOwningLayer().GetType() == LayerType::Constant)</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="comment">// First update the TensorInfo in the constant owning layer</span></div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; previousLayerSlot-&gt;SetTensorInfo(inputSlotInfo);</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="comment">// Then update the TensorInfo in the workload for the owning layer</span></div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; ConstantLayer* layer = PolymorphicDowncast&lt;ConstantLayer*&gt;(</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; &amp;previousLayerSlot-&gt;GetOwningLayer());</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; layer-&gt;m_LayerOutput</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; = std::make_unique&lt;ScopedTensorHandle&gt;(</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; ConstTensor(inputSlotInfo,</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; layer-&gt;m_LayerOutput.get()-&gt;GetConstTensor&lt;<span class="keywordtype">void</span>&gt;()));</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; inputInfos.push_back(inputSlotInfo);</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; numInputs++;</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; inputSlotCount++;</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; }</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; </div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="comment">// Check the input counts</span></div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordtype">bool</span> validInputCount = (inputSlotCount == 6) &amp;&amp; (inputInfos.size() == 4);</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">if</span> (! validInputCount)</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; {</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; </div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxIdx = (fuseReLu) ? 4 : 3;</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">for</span> (layerIdx = 0; layerIdx &lt; maxIdx; ++layerIdx)</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slotIdx = 0; slotIdx &lt; layerList[layerIdx]-&gt;GetNumOutputSlots(); ++slotIdx)</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; {</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; OutputSlot* outputSlot = &amp;layerList[layerIdx]-&gt;GetOutputSlot(slotIdx);</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; </div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> connectionIdx = 0; connectionIdx &lt; outputSlot-&gt;GetNumConnections(); ++connectionIdx)</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; {</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; InputSlot* inputSlot = outputSlot-&gt;GetConnection(connectionIdx);</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">if</span> (layerIdx &lt; (maxIdx-1))</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">if</span> (&amp;inputSlot-&gt;GetOwningLayer() != layerList[layerIdx+1])</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; {</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; outputInfos.push_back(outputSlot-&gt;GetTensorInfo());</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; numOutputs++;</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; }</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (layerList[layerIdx] != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; {</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; outputInfos.push_back(outputSlot-&gt;GetTensorInfo());</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; numOutputs++;</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; }</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; }</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; </div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">// Check the output count</span></div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordtype">bool</span> validOutputCount = (outputInfos.size() &gt; 0);</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span> (! validOutputCount)</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; {</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; </div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047aec211f7c20af43e742bf2570c3cb84f9">Add</a>, <a class="el" href="_exceptions_8hpp_source.html#l00212">ARMNN_THROW_INVALIDARG_IF_FALSE</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">BoundedReLu</a>, <a class="el" href="_neon_backend_optimization_utils_8hpp_source.html#l00014">CollapseLeadingUnitDimensions()</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="_layer_8hpp_source.html#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.html#l00083">OutputSlot::GetConnection()</a>, <a class="el" href="_layer_8hpp_source.html#l00337">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00158">OutputSlot::GetNumConnections()</a>, <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_layer_8hpp_source.html#l00339">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00053">InputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_8hpp_source.html#l00132">OutputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_8cpp_source.html#l00614">InputSlot::GetTensorInfo()</a>, <a class="el" href="_layer_8cpp_source.html#l00100">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_layer_8hpp_source.html#l00286">Layer::GetType()</a>, <a class="el" href="_subgraph_utils_8hpp_source.html#l00362">IsSequenceLayerType()</a>, <a class="el" href="_descriptors_8hpp_source.html#l00059">ActivationDescriptor::m_Function</a>, <a class="el" href="_constant_layer_8hpp_source.html#l00046">ConstantLayer::m_LayerOutput</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a62b6d55816cf737bfc6f42e60df1a3f2">Mul</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">ReLu</a>, and <a class="el" href="_layer_8cpp_source.html#l00095">OutputSlot::SetTensorInfo()</a>.</p>
</div>
</div>
<a id="a20f74b679d59b52e9fae3bbef8f10ffb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a20f74b679d59b52e9fae3bbef8f10ffb">&#9670;&nbsp;</a></span>CalcLevel()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int armnn::CalcLevel </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_event.html">Event</a> *&#160;</td>
<td class="paramname"><em>eventPtr</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.html#l00257">257</a> of file <a class="el" href="_profiling_8cpp_source.html">Profiling.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;{</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordtype">int</span> level = 0;</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">while</span> (eventPtr != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; {</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; eventPtr = eventPtr-&gt;GetParentEvent();</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; level++;</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; }</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">return</span> level;</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_profiling_event_8cpp_source.html#l00084">Event::GetParentEvent()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.html#l00490">ProfilerImpl::AnalyzeEventsAndWriteResults()</a>, and <a class="el" href="_profiling_8cpp_source.html#l00268">ProfilerImpl::PopulateParent()</a>.</p>
</div>
</div>
<a id="a738d3243c1dc564304d78908c6112e4f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a738d3243c1dc564304d78908c6112e4f">&#9670;&nbsp;</a></span>CalculateEdgeStrategy()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016">EdgeStrategy</a> armnn::CalculateEdgeStrategy </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;&#160;</td>
<td class="paramname"><em>backends</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>&#160;</td>
<td class="paramname"><em>srcFactoryId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;&#160;</td>
<td class="paramname"><em>layer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;&#160;</td>
<td class="paramname"><em>connectedLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.html">TensorHandleFactoryRegistry</a> &amp;&#160;</td>
<td class="paramname"><em>registry</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>importEnabled</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01729">1729</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160;{</div>
<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; <span class="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div>
<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; <span class="keywordflow">if</span> (toBackend == backends.end())</div>
<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; {</div>
<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;Backend id not found for the connected layer&quot;</span>);</div>
<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160; }</div>
<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; </div>
<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; <span class="keyword">auto</span> dstPrefs = toBackend-&gt;second.get()-&gt;GetHandleFactoryPreferences();</div>
<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; </div>
<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; <span class="comment">// Legacy API check for backward compatibility</span></div>
<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; <span class="keywordflow">if</span> (srcFactoryId == ITensorHandleFactory::LegacyFactoryId || dstPrefs.empty())</div>
<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; {</div>
<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; <span class="keywordflow">if</span> (layer.GetBackendId() != connectedLayer.GetBackendId())</div>
<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160; {</div>
<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::CopyToTarget;</div>
<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160; }</div>
<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; {</div>
<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::DirectCompatibility;</div>
<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160; }</div>
<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; }</div>
<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; </div>
<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160; <span class="comment">// TensorHandleFactory API present, so perform more sophisticated strategies.</span></div>
<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160; <span class="comment">// Dst Output layers don&#39;t require copy because they use import or map/unmap</span></div>
<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; <span class="keywordflow">if</span> (connectedLayer.GetType() == LayerType::Output)</div>
<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; {</div>
<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::DirectCompatibility;</div>
<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160; }</div>
<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; </div>
<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160; <span class="comment">// Search for direct match in prefs</span></div>
<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pref : dstPrefs)</div>
<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160; {</div>
<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160; <span class="keywordflow">if</span> (pref == srcFactoryId)</div>
<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160; {</div>
<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::DirectCompatibility;</div>
<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; }</div>
<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160; }</div>
<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160; </div>
<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160; <span class="comment">// Search for export/import options</span></div>
<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160; ITensorHandleFactory* srcFactory = registry.GetFactory(srcFactoryId);</div>
<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160; <span class="keywordflow">if</span> (srcFactory-&gt;GetExportFlags() != 0 &amp;&amp; importEnabled)</div>
<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160; {</div>
<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pref : dstPrefs)</div>
<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160; {</div>
<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160; ITensorHandleFactory* dstFactory = registry.GetFactory(pref);</div>
<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160; </div>
<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160; <span class="comment">// Handles cases when a destPref is not listed in TensorHandleFactoryRegistry</span></div>
<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160; <span class="keywordflow">if</span> (!dstFactory) {</div>
<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160; }</div>
<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160; <span class="keywordflow">if</span> ((dstFactory-&gt;GetImportFlags() &amp; srcFactory-&gt;GetExportFlags()) != 0)</div>
<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160; {</div>
<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160; <span class="keyword">auto</span> srcCapability = srcFactory-&gt;GetCapabilities(&amp;layer, &amp;layer, CapabilityClass::PaddingRequired);</div>
<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160; <span class="keyword">auto</span> dstCapability = dstFactory-&gt;GetCapabilities(&amp;connectedLayer,</div>
<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160; &amp;connectedLayer,</div>
<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160; CapabilityClass::PaddingRequired);</div>
<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160; <span class="keyword">auto</span> srcFallback = srcFactory-&gt;GetCapabilities(&amp;layer, &amp;layer, CapabilityClass::FallbackImportDisabled);</div>
<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160; <span class="keyword">auto</span> dstFallback = dstFactory-&gt;GetCapabilities(&amp;connectedLayer,</div>
<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160; &amp;connectedLayer,</div>
<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160; CapabilityClass::FallbackImportDisabled);</div>
<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160; <span class="comment">// Do not require memory copy if the source and destination do not require padding.</span></div>
<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160; <span class="keywordflow">if</span> (srcCapability.empty() &amp;&amp; dstCapability.empty() &amp;&amp; srcFallback.empty() &amp;&amp; dstFallback.empty())</div>
<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160; {</div>
<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::ExportToTarget;</div>
<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160; }</div>
<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160; }</div>
<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160; }</div>
<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160; }</div>
<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160; </div>
<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160; <span class="comment">// Search for copy options via map/unmap</span></div>
<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160; <span class="keywordflow">if</span> (srcFactory-&gt;SupportsMapUnmap())</div>
<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160; {</div>
<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pref : dstPrefs)</div>
<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160; {</div>
<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160; ITensorHandleFactory* dstFactory = registry.GetFactory(pref);</div>
<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160; <span class="keywordflow">if</span> (dstFactory &amp;&amp; dstFactory-&gt;SupportsMapUnmap())</div>
<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160; {</div>
<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::CopyToTarget;</div>
<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160; }</div>
<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160; }</div>
<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160; }</div>
<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160; </div>
<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::Undefined;</div>
<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852">CopyToTarget</a>, <a class="el" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650">DirectCompatibility</a>, <a class="el" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189">ExportToTarget</a>, <a class="el" href="namespacearmnn.html#a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d">FallbackImportDisabled</a>, <a class="el" href="_layer_8hpp_source.html#l00290">Layer::GetBackendId()</a>, <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00093">ITensorHandleFactory::GetCapabilities()</a>, <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00090">ITensorHandleFactory::GetExportFlags()</a>, <a class="el" href="_tensor_handle_factory_registry_8cpp_source.html#l00039">TensorHandleFactoryRegistry::GetFactory()</a>, <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00091">ITensorHandleFactory::GetImportFlags()</a>, <a class="el" href="_layer_8hpp_source.html#l00286">Layer::GetType()</a>, <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00050">ITensorHandleFactory::LegacyFactoryId</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>, <a class="el" href="namespacearmnn.html#a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389">PaddingRequired</a>, <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00088">ITensorHandleFactory::SupportsMapUnmap()</a>, and <a class="el" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016aec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
</div>
</div>
<a id="ac40d3e4035af5fbe68d9e126a8d6367c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac40d3e4035af5fbe68d9e126a8d6367c">&#9670;&nbsp;</a></span>CalculateGatherNdKeyIndices()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::map&lt; std::string, unsigned int &gt; CalculateGatherNdKeyIndices </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a>&#160;</td>
<td class="paramname"><em>inputInfo0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a>&#160;</td>
<td class="paramname"><em>inputInfo1</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Calculates the key index values needed for GatherNd: N, ND, K, W, C (N is always 1) </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">inputInfo0</td><td>- <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> of the corresponding input tensor: params </td></tr>
<tr><td class="paramname">inputInfo1</td><td>- <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> of the corresponding input tensor: indices </td></tr>
</table>
</dd>
</dl>
<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.html#l00313">313</a> of file <a class="el" href="_workload_utils_8cpp_source.html">WorkloadUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;{</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; std::vector&lt;unsigned int&gt; paramsShape;</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; inputInfo0.GetNumDimensions(); ++i)</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; {</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; paramsShape.push_back(inputInfo0.GetShape()[i]);</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; }</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; </div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; std::vector&lt;unsigned int&gt; indicesShape;</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; inputInfo1.GetNumDimensions(); ++i)</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; {</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; indicesShape.push_back(inputInfo1.GetShape()[i]);</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; }</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; </div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; std::map&lt;std::string, unsigned int&gt; keyIndices;</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; </div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="comment">// N: number of batches</span></div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; keyIndices[<span class="stringliteral">&quot;N&quot;</span>] = 1;</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; </div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="comment">// ND: number of dimensions that are sliced from params</span></div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; keyIndices[<span class="stringliteral">&quot;ND&quot;</span>] = indicesShape.back();</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; </div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="comment">// W: number of indices in each batch (all but the last dimension)</span></div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; keyIndices[<span class="stringliteral">&quot;W&quot;</span>] =</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(std::accumulate(std::begin(indicesShape),</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; std::end(indicesShape) - 1,</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; 1,</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; std::multiplies&lt;&gt;() ));</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="comment">// K: range of each index</span></div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; keyIndices[<span class="stringliteral">&quot;K&quot;</span>] =</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(std::accumulate(std::begin(paramsShape),</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; std::begin(paramsShape) + <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(keyIndices[<span class="stringliteral">&quot;ND&quot;</span>]),</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; 1,</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; std::multiplies&lt;&gt;() ));</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="comment">// C: number of channels for each index</span></div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; keyIndices[<span class="stringliteral">&quot;C&quot;</span>] =</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(std::accumulate(std::begin(paramsShape) + <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(keyIndices[<span class="stringliteral">&quot;ND&quot;</span>]),</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; std::end(paramsShape),</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; 1,</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; std::multiplies&lt;&gt;() ));</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; </div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">return</span> keyIndices;</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, and <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_gather_nd_workload_8cpp_source.html#l00099">ClGatherNdWorkload::ClGatherNdWorkload()</a>, <a class="el" href="_cl_gather_nd_workload_8cpp_source.html#l00016">ClGatherNdWorkloadValidate()</a>, <a class="el" href="_neon_gather_nd_workload_8cpp_source.html#l00097">NeonGatherNdWorkload::NeonGatherNdWorkload()</a>, and <a class="el" href="_neon_gather_nd_workload_8cpp_source.html#l00014">NeonGatherNdWorkloadValidate()</a>.</p>
</div>
</div>
<a id="ad52508167694d6d259525b3eec1a4267"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad52508167694d6d259525b3eec1a4267">&#9670;&nbsp;</a></span>CalculateSlotOption()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a> armnn::CalculateSlotOption </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;&#160;</td>
<td class="paramname"><em>backends</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_output_slot.html">OutputSlot</a> &amp;&#160;</td>
<td class="paramname"><em>outputSlot</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.html">TensorHandleFactoryRegistry</a> &amp;&#160;</td>
<td class="paramname"><em>registry</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>exportEnabled</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01576">1576</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;{</div>
<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; <span class="comment">// First ensure the from backends can support the TensorHandeAPI</span></div>
<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; Layer&amp; layer = outputSlot.GetOwningLayer();</div>
<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; <span class="keyword">auto</span> frmBackend = backends.find(layer.GetBackendId());</div>
<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; <span class="keywordflow">if</span> (frmBackend == backends.end() ||</div>
<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; !frmBackend-&gt;second-&gt;SupportsTensorAllocatorAPI())</div>
<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; {</div>
<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</div>
<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; }</div>
<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; </div>
<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; <span class="keywordtype">bool</span> outputConnection = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; connection : outputSlot.GetConnections())</div>
<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; {</div>
<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; <span class="keyword">const</span> Layer&amp; connectedLayer = connection-&gt;GetOwningLayer();</div>
<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; <span class="keywordflow">if</span> (connectedLayer.GetType() == LayerType::Output)</div>
<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; {</div>
<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; outputConnection = <span class="keyword">true</span>;</div>
<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; }</div>
<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; }</div>
<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; </div>
<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; IBackendInternal* srcBackend = frmBackend-&gt;second.get();</div>
<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160; <span class="keyword">auto</span> srcPrefs = srcBackend-&gt;GetHandleFactoryPreferences();</div>
<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; </div>
<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; <span class="comment">// Initialize the scores</span></div>
<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; std::map&lt;ITensorHandleFactory::FactoryId, int&gt; factoryScores;</div>
<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pref : srcPrefs)</div>
<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; {</div>
<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; <span class="keywordflow">if</span> (exportEnabled)</div>
<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160; {</div>
<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; ITensorHandleFactory* factory = registry.GetFactory(pref);</div>
<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; <span class="keywordflow">if</span> (outputConnection)</div>
<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; {</div>
<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; <span class="comment">// Check if this is fallback case</span></div>
<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; <span class="keywordtype">bool</span> fallbackConnection = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; inputSlot : layer.GetInputSlots())</div>
<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; {</div>
<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; <span class="keywordflow">if</span> (inputSlot.GetConnectedOutputSlot()-&gt;GetOwningLayer().GetBackendId() != layer.GetBackendId())</div>
<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; {</div>
<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; fallbackConnection = <span class="keyword">true</span>;</div>
<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160; }</div>
<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160; }</div>
<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; <span class="keywordflow">if</span> (fallbackConnection)</div>
<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; {</div>
<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; <span class="keyword">auto</span> factoryCap = factory-&gt;GetCapabilities(&amp;layer, &amp;layer, CapabilityClass::FallbackImportDisabled);</div>
<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; <span class="comment">// Cannot use factory import if fallback import is not supported.</span></div>
<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; <span class="keywordflow">if</span> (!factoryCap.empty())</div>
<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; {</div>
<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; }</div>
<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; }</div>
<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (factory-&gt;GetExportFlags() == 0)</div>
<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; {</div>
<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; }</div>
<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; }</div>
<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; <span class="keywordflow">if</span> (!outputConnection)</div>
<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; {</div>
<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; <span class="keyword">auto</span> factoryCap = factory-&gt;GetCapabilities(&amp;layer, &amp;layer, CapabilityClass::FallbackImportDisabled);</div>
<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; <span class="comment">// Cannot use factory import if fallback import is not supported.</span></div>
<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; <span class="keywordflow">if</span> (!factoryCap.empty())</div>
<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; {</div>
<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; }</div>
<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; }</div>
<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; </div>
<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; }</div>
<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; {</div>
<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160; <span class="comment">// Only consider factories that support map/unmap</span></div>
<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; ITensorHandleFactory* factory = registry.GetFactory(pref);</div>
<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; <span class="keywordflow">if</span> (!factory-&gt;SupportsMapUnmap())</div>
<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; {</div>
<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; <span class="comment">// The current tensor handle factory does not support the map/unmap strategy, move to the next one</span></div>
<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; }</div>
<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; }</div>
<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; </div>
<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; </div>
<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; <span class="keyword">auto</span> it = factoryScores.find(pref);</div>
<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; <span class="keywordflow">if</span> (it == factoryScores.end())</div>
<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; {</div>
<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; <span class="comment">// Add new score to the table</span></div>
<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; factoryScores[pref] = 0;</div>
<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; }</div>
<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; }</div>
<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; </div>
<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; <span class="comment">// Score each handle factory based on how many times it requires copies on the slot connections</span></div>
<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; connection : outputSlot.GetConnections())</div>
<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; {</div>
<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; <span class="keyword">const</span> Layer&amp; connectedLayer = connection-&gt;GetOwningLayer();</div>
<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; </div>
<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; <span class="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div>
<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; <span class="keywordflow">if</span> (toBackend == backends.end())</div>
<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; {</div>
<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;Backend id not found for the connected layer&quot;</span>);</div>
<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160; }</div>
<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; </div>
<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; <span class="keyword">auto</span> dstPrefs = toBackend-&gt;second.get()-&gt;GetHandleFactoryPreferences();</div>
<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; src : srcPrefs)</div>
<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; {</div>
<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; <span class="keywordflow">if</span> (factoryScores.find(src) == factoryScores.end()) <span class="comment">// Don&#39;t consider excluded factories</span></div>
<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160; {</div>
<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160; }</div>
<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; </div>
<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; dst : dstPrefs)</div>
<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; {</div>
<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a5ee4a1cca55f69b31e625c786655ed1a">RequiresCopy</a>(src, dst, registry))</div>
<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; {</div>
<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; <span class="comment">// Copy avoided, increase the score</span></div>
<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160; factoryScores[src]++;</div>
<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160; }</div>
<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; }</div>
<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; }</div>
<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; }</div>
<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; </div>
<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; <span class="comment">// Find the lowest score</span></div>
<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; <span class="keywordtype">int</span> minScore = std::numeric_limits&lt;int&gt;::max();</div>
<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it : factoryScores)</div>
<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160; {</div>
<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; minScore = std::min(minScore, it.second);</div>
<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160; }</div>
<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160; </div>
<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160; <span class="comment">// Collect factories matching the best(lowest) score</span></div>
<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; std::vector&lt;ITensorHandleFactory::FactoryId&gt; optimalFactories;</div>
<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it : factoryScores)</div>
<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160; {</div>
<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160; <span class="keywordflow">if</span> (it.second == minScore)</div>
<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; {</div>
<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; optimalFactories.push_back(it.first);</div>
<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; }</div>
<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; }</div>
<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; </div>
<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160; <span class="comment">// For all compatible Factories matching the best score, find the preferred one for the current layer.</span></div>
<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; srcPref : srcPrefs)</div>
<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160; {</div>
<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; comp : optimalFactories)</div>
<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; {</div>
<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160; <span class="keywordflow">if</span> (comp == srcPref)</div>
<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; {</div>
<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; <span class="keywordflow">return</span> comp;</div>
<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160; }</div>
<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160; }</div>
<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; }</div>
<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160; </div>
<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160; <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</div>
<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d">FallbackImportDisabled</a>, <a class="el" href="_layer_8hpp_source.html#l00290">Layer::GetBackendId()</a>, <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00093">ITensorHandleFactory::GetCapabilities()</a>, <a class="el" href="_layer_8hpp_source.html#l00145">OutputSlot::GetConnections()</a>, <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00090">ITensorHandleFactory::GetExportFlags()</a>, <a class="el" href="_tensor_handle_factory_registry_8cpp_source.html#l00039">TensorHandleFactoryRegistry::GetFactory()</a>, <a class="el" href="_i_backend_internal_8cpp_source.html#l00143">IBackendInternal::GetHandleFactoryPreferences()</a>, <a class="el" href="_layer_8hpp_source.html#l00258">Layer::GetInputSlots()</a>, <a class="el" href="_layer_8hpp_source.html#l00132">OutputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_8hpp_source.html#l00286">Layer::GetType()</a>, <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00050">ITensorHandleFactory::LegacyFactoryId</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>, <a class="el" href="_network_8cpp_source.html#l01454">RequiresCopy()</a>, and <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00088">ITensorHandleFactory::SupportsMapUnmap()</a>.</p>
</div>
</div>
<a id="a5f34318a121e010053655204df94720c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5f34318a121e010053655204df94720c">&#9670;&nbsp;</a></span>CalculateSlotOptionForInput()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a> armnn::CalculateSlotOptionForInput </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;&#160;</td>
<td class="paramname"><em>backends</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_output_slot.html">OutputSlot</a> &amp;&#160;</td>
<td class="paramname"><em>slot</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.html">TensorHandleFactoryRegistry</a> &amp;&#160;</td>
<td class="paramname"><em>registry</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>importEnabled</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01474">1474</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;{</div>
<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; Layer&amp; layer = slot.GetOwningLayer();</div>
<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; </div>
<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; <span class="keywordflow">if</span> (layer.GetType() != LayerType::Input)</div>
<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; {</div>
<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;layer must be of type \&quot;Input\&quot;.&quot;</span>);</div>
<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160; }</div>
<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; </div>
<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; <span class="comment">// Explicitly select the tensorhandle factory for InputLayer because the rules for it are slightly different. It</span></div>
<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; <span class="comment">// doesn&#39;t matter which backend it is assigned to because they all use the same implementation, which</span></div>
<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; <span class="comment">// requires Map/Unmap support. This means that, so long as the handle type supports map/unmap semantics, we can</span></div>
<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; <span class="comment">// select a factory with maximum compatibility with the layers connected to the InputLayer.</span></div>
<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; </div>
<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; <span class="comment">// First ensure the from backends can support the TensorHandeAPI</span></div>
<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; <span class="keyword">auto</span> frmBackend = backends.find(layer.GetBackendId());</div>
<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; <span class="keywordflow">if</span> (frmBackend == backends.end() ||</div>
<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; !frmBackend-&gt;second-&gt;SupportsTensorAllocatorAPI())</div>
<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; {</div>
<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</div>
<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; }</div>
<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; </div>
<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; <span class="comment">// Go through all connections to the output slot and determine the TensorHandleFactory which results in the</span></div>
<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; <span class="comment">// fewest copies.</span></div>
<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; std::map&lt;ITensorHandleFactory::FactoryId, int&gt; factoryScores;</div>
<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160; <span class="keywordtype">int</span> topScore = 0;</div>
<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160; <a class="code" href="namespacearmnn.html#a947e07902b1b5d98b57eeae34053146b">ITensorHandleFactory::FactoryId</a> topChoice = ITensorHandleFactory::LegacyFactoryId;</div>
<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; </div>
<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; connection : slot.GetConnections())</div>
<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; {</div>
<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; </div>
<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; <span class="keyword">const</span> Layer&amp; connectedLayer = connection-&gt;GetOwningLayer();</div>
<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; </div>
<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; <span class="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div>
<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; <span class="keywordflow">if</span> (toBackend == backends.end())</div>
<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; {</div>
<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;Backend id not found for the connected layer&quot;</span>);</div>
<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; }</div>
<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; </div>
<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; <span class="keywordflow">if</span> (!toBackend-&gt;second.get()-&gt;SupportsTensorAllocatorAPI())</div>
<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; {</div>
<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160; <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="l01519"></a><span class="lineno"> 1519</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; }</div>
<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160; </div>
<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160; <span class="keyword">auto</span> dstPrefs = toBackend-&gt;second.get()-&gt;GetHandleFactoryPreferences();</div>
<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; dst : dstPrefs)</div>
<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160; {</div>
<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; <span class="comment">// Input layers use the mem copy workload or import, so the selected factory must</span></div>
<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; <span class="comment">// support either the map/unmap API or Import API</span></div>
<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; ITensorHandleFactory* factory = registry.GetFactory(dst);</div>
<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; <span class="keywordflow">if</span> (importEnabled &amp;&amp; factory-&gt;GetImportFlags() == 0)</div>
<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; {</div>
<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; }</div>
<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!importEnabled &amp;&amp; !factory-&gt;SupportsMapUnmap())</div>
<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; {</div>
<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; }</div>
<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; </div>
<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; <span class="keyword">auto</span> it = factoryScores.find(dst);</div>
<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; <span class="keywordflow">if</span> (it == factoryScores.end())</div>
<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; {</div>
<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; <span class="comment">// Add new score to the table</span></div>
<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; factoryScores[dst] = 0;</div>
<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; <span class="keywordflow">if</span> (topChoice == ITensorHandleFactory::LegacyFactoryId)</div>
<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; {</div>
<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; topChoice = dst;</div>
<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; }</div>
<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; }</div>
<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; {</div>
<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; <span class="comment">// Increase the score</span></div>
<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; factoryScores[dst]++;</div>
<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; </div>
<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; <span class="comment">// Track the best option</span></div>
<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; <span class="keywordflow">if</span> (factoryScores[dst] &gt; topScore)</div>
<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; {</div>
<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; topScore = factoryScores[dst];</div>
<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; topChoice = dst;</div>
<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; }</div>
<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; }</div>
<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; }</div>
<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; }</div>
<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; </div>
<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; <span class="keywordflow">return</span> topChoice;</div>
<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_layer_8hpp_source.html#l00290">Layer::GetBackendId()</a>, <a class="el" href="_layer_8hpp_source.html#l00145">OutputSlot::GetConnections()</a>, <a class="el" href="_tensor_handle_factory_registry_8cpp_source.html#l00039">TensorHandleFactoryRegistry::GetFactory()</a>, <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00091">ITensorHandleFactory::GetImportFlags()</a>, <a class="el" href="_layer_8hpp_source.html#l00132">OutputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_8hpp_source.html#l00286">Layer::GetType()</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00050">ITensorHandleFactory::LegacyFactoryId</a>, and <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00088">ITensorHandleFactory::SupportsMapUnmap()</a>.</p>
</div>
</div>
<a id="ab46c7f5f4736d550ab0e5e05a0fff4a9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab46c7f5f4736d550ab0e5e05a0fff4a9">&#9670;&nbsp;</a></span>CalculateSlotOptionForOutput()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a> armnn::CalculateSlotOptionForOutput </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;&#160;</td>
<td class="paramname"><em>backends</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_output_slot.html">OutputSlot</a> &amp;&#160;</td>
<td class="paramname"><em>slot</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.html">TensorHandleFactoryRegistry</a> &amp;&#160;</td>
<td class="paramname"><em>registry</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01566">1566</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;{</div>
<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(backends, slot, registry);</div>
<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; <span class="keywordflow">return</span> ITensorHandleFactory::DeferredFactoryId;</div>
<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00051">ITensorHandleFactory::DeferredFactoryId</a>, and <a class="el" href="_ignore_unused_8hpp_source.html#l00014">IgnoreUnused()</a>.</p>
</div>
</div>
<a id="a189b5dedbf7a3cbcbe7760ac72c7b07d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a189b5dedbf7a3cbcbe7760ac72c7b07d">&#9670;&nbsp;</a></span>ChainReduceLayers()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;<a class="el" href="classarmnn_1_1_i_connectable_layer.html">IConnectableLayer</a>*&gt; armnn::ChainReduceLayers </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;&#160;</td>
<td class="paramname"><em>optimizationViews</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_reduce_descriptor.html">ReduceDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>desc</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00278">278</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html">ArmComputeSubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;{</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="comment">// Vector of new chained layers, used for substitution.</span></div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; std::vector&lt;IConnectableLayer*&gt; layers;</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; </div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="comment">// Vector of axes so each layer is reshaped correctly.</span></div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; std::vector&lt;uint32_t&gt; axes;</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> recalulatedAxis = 0;</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; </div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">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="l00290"></a><span class="lineno"> 290</span>&#160; {</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="comment">// Get TensorInfo from base layer and reduce shape using axis.</span></div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; TensorInfo layerInfo = baseLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; </div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; axes.emplace_back(desc.m_vAxis[i]);</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; </div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keyword">const</span> TensorInfo&amp; reducedTensorInfo = <a class="code" href="namespacearmnn.html#a9d43aa01b882d8776ab9403eea3cf779">ComputeReductionTensorShape</a>(layerInfo,</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; axes,</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; desc.m_KeepDims);</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; </div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="comment">// Create a vector for the single axis to be assigned to the descriptor.</span></div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// Update axis if keepDims is set reduce layers correctly.</span></div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; std::vector&lt;uint32_t&gt; singleAxis(1, desc.m_vAxis[i] - recalulatedAxis);</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; </div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="comment">// Create a descriptor and assign single axis.</span></div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; ReduceDescriptor newReduceDescriptor = baseLayer-&gt;GetParameters();</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; newReduceDescriptor.m_vAxis.assign(singleAxis.begin(), singleAxis.end());</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; </div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="comment">// Add new layer to graph.</span></div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; std::string layerName = <span class="stringliteral">&quot;reduce_layer_&quot;</span> + std::to_string(i);</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; </div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; Layer* replacementLayer = PolymorphicDowncast&lt;Layer*&gt;(</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; optimizationViews.GetINetwork()-&gt;AddReduceLayer(newReduceDescriptor,</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; layerName.c_str()));</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; </div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="comment">// Connect previous layer with new layer.</span></div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="comment">// The first and last layer will be connected when the subgraph is replaced.</span></div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">if</span> (!layers.empty())</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; {</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; layers[i - 1]-&gt;GetOutputSlot(0).Connect(replacementLayer-&gt;GetInputSlot(0));</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; }</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; </div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="comment">// Set updated tensorInfo for new layer.</span></div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; replacementLayer-&gt;GetOutputSlot(0).SetTensorInfo(reducedTensorInfo);</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; </div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">if</span> (!desc.m_KeepDims)</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; {</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; recalulatedAxis++;</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; }</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; </div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; layers.emplace_back(replacementLayer);</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; }</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">return</span> layers;</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_network_8cpp_source.html#l00444">INetwork::AddReduceLayer()</a>, <a class="el" href="_arm_compute_utils_8hpp_source.html#l00320">ComputeReductionTensorShape()</a>, <a class="el" href="_optimization_views_8hpp_source.html#l00069">OptimizationViews::GetINetwork()</a>, <a class="el" href="_layer_8hpp_source.html#l00337">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00339">Layer::GetOutputSlot()</a>, <a class="el" href="_descriptors_8hpp_source.html#l01554">ReduceDescriptor::m_KeepDims</a>, <a class="el" href="_descriptors_8hpp_source.html#l01556">ReduceDescriptor::m_vAxis</a>, and <a class="el" href="_layer_8cpp_source.html#l00095">OutputSlot::SetTensorInfo()</a>.</p>
</div>
</div>
<a id="a84f86b4de5adf0b164e811c87051a0ee"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a84f86b4de5adf0b164e811c87051a0ee">&#9670;&nbsp;</a></span>CheckFlag()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool armnn::CheckFlag </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a>&#160;</td>
<td class="paramname"><em>flags</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277">MemorySource</a>&#160;</td>
<td class="paramname"><em>source</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_memory_sources_8hpp_source.html#l00041">41</a> of file <a class="el" href="_memory_sources_8hpp_source.html">MemorySources.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> (<span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.html#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a><span class="keyword">&gt;</span>(source) &amp; flags) != 0;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_loaded_network_8cpp_source.html#l01486">LoadedNetwork::ImportInputs()</a>, and <a class="el" href="_loaded_network_8cpp_source.html#l01632">LoadedNetwork::ImportOutputs()</a>.</p>
</div>
</div>
<a id="aa52ce4f1fab044ad0c73f9613e2ef6ce"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa52ce4f1fab044ad0c73f9613e2ef6ce">&#9670;&nbsp;</a></span>CheckFp16Support()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::CheckFp16Support </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;&#160;</td>
<td class="paramname"><em>backends</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>availablePreferredBackends</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01026">1026</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;{</div>
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keywordtype">bool</span> hasFp16 = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <span class="comment">// Check if the first preferred backend has FP16 support</span></div>
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="keyword">auto</span> firstBackend = availablePreferredBackends[0];</div>
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <span class="keyword">auto</span> backendObjPtr = backends.find(firstBackend)-&gt;second.get();</div>
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; </div>
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; <span class="keyword">auto</span> hasFp16Capability = BackendOptions::BackendOption{<span class="stringliteral">&quot;HasFp16&quot;</span>, <span class="keyword">true</span>};</div>
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="keyword">auto</span> backendCapabilities = backendObjPtr-&gt;GetCapabilities();</div>
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; </div>
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a406399d2a16ead98e4e93cdd57adead4">HasMatchingCapability</a>(hasFp16Capability, backendCapabilities))</div>
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; {</div>
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <span class="comment">// First preferred backend has FP16 support. Enable reduce FP32 to FP16 when fp16-turbo-mode is enabled.</span></div>
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; hasFp16 = <span class="keyword">true</span>;</div>
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(debug) &lt;&lt; <span class="stringliteral">&quot;The first available preferred backend: &quot;</span> &lt;&lt; firstBackend</div>
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; &lt;&lt; <span class="stringliteral">&quot;, has FP16 support.&quot;</span>;</div>
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; }</div>
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; {</div>
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; <span class="stringliteral">&quot;The first available preferred backend: &quot;</span> &lt;&lt; firstBackend</div>
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; &lt;&lt; <span class="stringliteral">&quot;, does not have FP16 support. &quot;</span></div>
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; &lt;&lt; <span class="stringliteral">&quot;The FP16 turbo mode option will be disable. It will run using FP32.&quot;</span>;</div>
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; }</div>
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; </div>
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <span class="comment">// Check if the rest of the available preferred backends have FP16 support</span></div>
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 1; i &lt; availablePreferredBackends.size(); ++i)</div>
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; {</div>
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; <span class="keyword">auto</span> backend = availablePreferredBackends[i];</div>
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; backendObjPtr = backends.find(backend)-&gt;second.get();</div>
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; backendCapabilities = backendObjPtr-&gt;GetCapabilities();</div>
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespacearmnn.html#a406399d2a16ead98e4e93cdd57adead4">HasMatchingCapability</a>(hasFp16Capability, backendCapabilities))</div>
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; {</div>
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; <span class="stringliteral">&quot;Next preferred backend: &quot;</span> &lt;&lt; backend &lt;&lt; <span class="stringliteral">&quot;, does not have FP16 support. &quot;</span></div>
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; &lt;&lt; <span class="stringliteral">&quot;It will run using FP32 when falling back to this backend.&quot;</span>;</div>
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; }</div>
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; {</div>
<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(debug) &lt;&lt; <span class="stringliteral">&quot;Next preferred backend: &quot;</span> &lt;&lt; backend &lt;&lt; <span class="stringliteral">&quot;, has FP16 support.&quot;</span>;</div>
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; }</div>
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; }</div>
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; </div>
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; <span class="keywordflow">return</span> hasFp16;</div>
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_logging_8hpp_source.html#l00212">ARMNN_LOG</a>, <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d">debug</a>, <a class="el" href="_backend_helper_8cpp_source.html#l00085">HasMatchingCapability()</a>, and <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01906">Optimize()</a>.</p>
</div>
</div>
<a id="a8bf1222ae8931bf663fa076b3e3b6f0e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8bf1222ae8931bf663fa076b3e3b6f0e">&#9670;&nbsp;</a></span>CheckScaleSetOnQuantizedType()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::CheckScaleSetOnQuantizedType </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> *&#160;</td>
<td class="paramname"><em>layer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt;&#160;</td>
<td class="paramname"><em>errMessages</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00801">801</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160;{</div>
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordtype">bool</span> noErrors = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputs = layer-&gt;GetNumOutputSlots();</div>
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numOutputs; i++) {</div>
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; OutputSlot&amp; outputSlot = layer-&gt;GetOutputSlot(i);</div>
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; TensorInfo <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a> = outputSlot.GetTensorInfo();</div>
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="keyword">auto</span> quantizationDataType = <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType();</div>
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <span class="keyword">auto</span> quantizationScales = <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScales();</div>
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="comment">// For any Quantized Tensor ensure scale(s) are set</span></div>
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="keywordflow">switch</span>(quantizationDataType) {</div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div>
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16:</div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordflow">if</span> ((quantizationDataType == DataType::QAsymmU8 || quantizationDataType == DataType::QAsymmS8)</div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; &amp;&amp; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.HasPerAxisQuantization()) {</div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Per Axis Quantization is not supported in &quot;</span></div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="stringliteral">&quot;Asymmetric Quantization Datatype.&quot;</span>);</div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; }</div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <span class="comment">// Softmax under QuantisedAsymm8 must always be scale (1.0f/256.0f) and offset 0</span></div>
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.HasPerAxisQuantization() &amp;&amp; quantizationDataType == DataType::QAsymmU8 &amp;&amp;</div>
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; (<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale() != (1.0f / 256.0f) ||</div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset() != 0) &amp;&amp;</div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; layer-&gt;GetType() == <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0">armnn::LayerType::Softmax</a>) {</div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; std::stringstream ss;</div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;Quantization parameters for Softmax layer (Scale: &quot;</span> &lt;&lt;</div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale() &lt;&lt; <span class="stringliteral">&quot; and Offset: &quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset() &lt;&lt;</div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="stringliteral">&quot;) are incorrect and have been updated to Scale: 0.00390625 and Offset: 0&quot;</span>;</div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; ss.str();</div>
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.SetQuantizationScale((1.0f / 256.0f));</div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.SetQuantizationOffset(0);</div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; outputSlot.SetTensorInfo(info);</div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <a class="code" href="namespacearmnn.html#a3cf1cee98e0ed8b54263ec7279f6ec69">ReportError</a>(ss.str(), errMessages);</div>
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; }</div>
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; }</div>
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; }</div>
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="keywordflow">return</span> noErrors;</div>
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_logging_8hpp_source.html#l00212">ARMNN_LOG</a>, <a class="el" href="_layer_8hpp_source.html#l00335">Layer::GetNumOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.html#l00339">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.html#l00100">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_layer_8hpp_source.html#l00286">Layer::GetType()</a>, <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, <a class="el" href="_network_8cpp_source.html#l00762">ReportError()</a>, <a class="el" href="_layer_8cpp_source.html#l00095">OutputSlot::SetTensorInfo()</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0">Softmax</a>, and <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01073">AssignBackendsIConnectable()</a>.</p>
</div>
</div>
<a id="aa588395c0d3b0074091b497835aaa309"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa588395c0d3b0074091b497835aaa309">&#9670;&nbsp;</a></span>CheckSupportRule()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::CheckSupportRule </td>
<td>(</td>
<td class="paramtype">F&#160;</td>
<td class="paramname"><em>rule</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt;&#160;</td>
<td class="paramname"><em>reasonIfUnsupported</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>reason</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_support_rules_8hpp_source.html#l00037">37</a> of file <a class="el" href="_layer_support_rules_8hpp_source.html">LayerSupportRules.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;{</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">bool</span> supported = rule();</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">if</span> (!supported &amp;&amp; reason)</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; {</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; reasonIfUnsupported.value() += std::string(reason) + <span class="stringliteral">&quot;\n&quot;</span>; <span class="comment">// Append the reason on a new line</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> supported;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_optional_8hpp_source.html#l00146">OptionalReferenceSwitch&lt; std::is_reference&lt; T &gt;::value, T &gt;::value()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_ref_layer_support_8cpp_source.html#l00560">RefLayerSupport::IsActivationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00628">RefLayerSupport::IsAdditionSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00665">RefLayerSupport::IsArgMinMaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00697">RefLayerSupport::IsBatchMatMulSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00742">RefLayerSupport::IsBatchNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00788">RefLayerSupport::IsBatchToSpaceNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00823">RefLayerSupport::IsBroadcastToSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00853">RefLayerSupport::IsCastSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00883">RefLayerSupport::IsChannelShuffleSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00915">RefLayerSupport::IsComparisonSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00949">RefLayerSupport::IsConcatSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00981">RefLayerSupport::IsConstantSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01039">RefLayerSupport::IsConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01108">RefLayerSupport::IsConvolution3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01176">RefLayerSupport::IsDebugSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01206">RefLayerSupport::IsDepthToSpaceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01235">RefLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01304">RefLayerSupport::IsDequantizeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01339">RefLayerSupport::IsDetectionPostProcessSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01381">RefLayerSupport::IsDivisionSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01418">RefLayerSupport::IsElementwiseUnarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01469">RefLayerSupport::IsFakeQuantizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01487">RefLayerSupport::IsFillSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01512">RefLayerSupport::IsFloorSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01534">RefLayerSupport::IsFullyConnectedSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01600">RefLayerSupport::IsGatherNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01631">RefLayerSupport::IsGatherSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01670">RefLayerSupport::IsInstanceNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01701">RefLayerSupport::IsL2NormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00061">RefLayerSupport::IsLayerSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01735">RefLayerSupport::IsLogicalBinarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01763">RefLayerSupport::IsLogSoftmaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01789">RefLayerSupport::IsLstmSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01900">RefLayerSupport::IsMaximumSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01937">RefLayerSupport::IsMeanSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01999">RefLayerSupport::IsMemCopySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02028">RefLayerSupport::IsMinimumSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02065">RefLayerSupport::IsMultiplicationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02102">RefLayerSupport::IsNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02140">RefLayerSupport::IsPadSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02170">RefLayerSupport::IsPermuteSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02201">RefLayerSupport::IsPooling2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02231">RefLayerSupport::IsPooling3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02777">RefLayerSupport::IsPreluSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02286">RefLayerSupport::IsQuantizeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02321">RefLayerSupport::IsRankSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02336">RefLayerSupport::IsReduceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02365">RefLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02389">RefLayerSupport::IsResizeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02419">RefLayerSupport::IsReverseV2Supported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02458">RefLayerSupport::IsScatterNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02516">RefLayerSupport::IsShapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02534">RefLayerSupport::IsSliceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02563">RefLayerSupport::IsSoftmaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02592">RefLayerSupport::IsSpaceToBatchNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02620">RefLayerSupport::IsSpaceToDepthSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02650">RefLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02680">RefLayerSupport::IsStackSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02712">RefLayerSupport::IsStridedSliceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02740">RefLayerSupport::IsSubtractionSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02811">RefLayerSupport::IsTileSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02840">RefLayerSupport::IsTransposeConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02908">RefLayerSupport::IsTransposeSupported()</a>, and <a class="el" href="_ref_layer_support_8cpp_source.html#l02939">RefLayerSupport::IsUnidirectionalSequenceLstmSupported()</a>.</p>
</div>
</div>
<a id="a1391582cd6e145b67c98f3410667968e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1391582cd6e145b67c98f3410667968e">&#9670;&nbsp;</a></span>ClAbsWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClAbsWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_abs_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_cl_abs_workload_8cpp_source.html">ClAbsWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">return</span> arm_compute::CLAbsLayer::validate(&amp;aclInput, &amp;aclOutput);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01032">ClLayerSupport::IsElementwiseUnarySupported()</a>.</p>
</div>
</div>
<a id="a42ef3cee193102dc7755193579209cca"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a42ef3cee193102dc7755193579209cca">&#9670;&nbsp;</a></span>ClActivationWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClActivationWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_activation_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_cl_activation_workload_8cpp_source.html">ClActivationWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(descriptor);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> arm_compute::CLActivationLayer::validate(&amp;aclInput,</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; &amp;aclOutput,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; activationLayerInfo);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00705">ClLayerSupport::IsActivationSupported()</a>.</p>
</div>
</div>
<a id="a24fc3e8e29d3fa56cc6b2d81e48625d1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a24fc3e8e29d3fa56cc6b2d81e48625d1">&#9670;&nbsp;</a></span>ClAdditionValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClAdditionValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_addition_workload_8cpp_source.html#l00045">45</a> of file <a class="el" href="_cl_addition_workload_8cpp_source.html">ClAdditionWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;{</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLArithmeticAddition::validate(&amp;aclInput0Info,</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; &amp;aclInput1Info,</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; g_AclConvertPolicy,</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; activationInfo);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00717">ClLayerSupport::IsAdditionSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.html#l00189">ClLayerSupport::IsLayerSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.html#l00292">ClBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="ab80423b306d8e0436b9a316922911d4d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab80423b306d8e0436b9a316922911d4d">&#9670;&nbsp;</a></span>ClArgMinMaxWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClArgMinMaxWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_arg_min_max_descriptor.html">ArgMinMaxDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_arg_min_max_workload_8cpp_source.html#l00031">31</a> of file <a class="el" href="_cl_arg_min_max_workload_8cpp_source.html">ClArgMinMaxWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;{</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">auto</span> numDims = input.GetNumDimensions();</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">auto</span> unsignedAxis = <a class="code" href="namespacearmnn_utils.html#ac93cb1365b4bcb67df2a3164606096c5">armnnUtils::GetUnsignedAxis</a>(numDims, descriptor.m_Axis);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">int</span> aclAxis = armnn::numeric_cast&lt;int&gt;(CalcAclAxis(numDims, unsignedAxis));</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">if</span> (descriptor.m_Function == ArgMinMaxFunction::Max)</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> arm_compute::CLArgMinMaxLayer::validate(&amp;aclInput, aclAxis, &amp;aclOutput,</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; arm_compute::ReductionOperation::ARG_IDX_MAX);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> arm_compute::CLArgMinMaxLayer::validate(&amp;aclInput, aclAxis, &amp;aclOutput,</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; arm_compute::ReductionOperation::ARG_IDX_MIN);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00730">ClLayerSupport::IsArgMinMaxSupported()</a>.</p>
</div>
</div>
<a id="adfe10e7086e3e3b98927cf84aee03dd0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adfe10e7086e3e3b98927cf84aee03dd0">&#9670;&nbsp;</a></span>ClBackendId()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::ClBackendId </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</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.html#l00010">10</a> of file <a class="el" href="_cl_backend_id_8hpp_source.html">ClBackendId.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;GpuAcc&quot;</span>; }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_backend_8cpp_source.html#l00044">ClBackend::GetIdStatic()</a>.</p>
</div>
</div>
<a id="a21911dfddb6d7787c7afcdc5fc25d4a7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a21911dfddb6d7787c7afcdc5fc25d4a7">&#9670;&nbsp;</a></span>ClBatchMatMulValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClBatchMatMulValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfoX</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfoY</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_batch_mat_mul_descriptor.html">BatchMatMulDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_batch_mat_mul_workload_8cpp_source.html#l00024">24</a> of file <a class="el" href="_cl_batch_mat_mul_workload_8cpp_source.html">ClBatchMatMulWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">if</span> (descriptor.m_AdjointX || descriptor.m_AdjointY )</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">throw</span> Exception(<span class="stringliteral">&quot;Support for adjoint not implemented.&quot;</span>);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; }</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">if</span> (descriptor.m_DataLayoutX != <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a> || descriptor.m_DataLayoutY != <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a> )</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; {</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">throw</span> Exception(<span class="stringliteral">&quot;Only supported the MatMul in the last 2 dimensions&quot;</span>);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; }</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; arm_compute::TensorInfo aclInputInfoX = armcomputetensorutils::BuildArmComputeTensorInfo(inputInfoX);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; arm_compute::TensorInfo aclInputInfoY = armcomputetensorutils::BuildArmComputeTensorInfo(inputInfoY);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(outputInfo);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// GeMM dispatches kernel handles dynamic inputs differently to static so this flag needs to be set</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; aclInputInfoX.set_are_values_constant(<span class="keyword">false</span>);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; aclInputInfoY.set_are_values_constant(<span class="keyword">false</span>);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; arm_compute::MatMulInfo matMulInfo;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; matMulInfo.adj_lhs(descriptor.m_TransposeX);</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; matMulInfo.adj_rhs(descriptor.m_TransposeY);</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">return</span> arm_compute::CLMatMul::validate(&amp;aclInputInfoX, &amp;aclInputInfoY, &amp;aclOutputInfo, matMulInfo, activationInfo);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.html#l01617">BatchMatMulDescriptor::m_AdjointX</a>, <a class="el" href="_descriptors_8hpp_source.html#l01618">BatchMatMulDescriptor::m_AdjointY</a>, <a class="el" href="_descriptors_8hpp_source.html#l01621">BatchMatMulDescriptor::m_DataLayoutX</a>, <a class="el" href="_descriptors_8hpp_source.html#l01622">BatchMatMulDescriptor::m_DataLayoutY</a>, and <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00743">ClLayerSupport::IsBatchMatMulSupported()</a>.</p>
</div>
</div>
<a id="a29bd65c1ec4ff9f75b636ec8e7b038be"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a29bd65c1ec4ff9f75b636ec8e7b038be">&#9670;&nbsp;</a></span>ClBatchNormalizationValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClBatchNormalizationValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>mean</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>var</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>beta</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>gamma</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_batch_normalization_descriptor.html">BatchNormalizationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_batch_normalization_float_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_cl_batch_normalization_float_workload_8cpp_source.html">ClBatchNormalizationFloatWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo =</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo =</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclMeanInfo =</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(mean, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclVarInfo =</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(var, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclBetaInfo =</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(beta, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclGammaInfo =</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(gamma, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> arm_compute::CLBatchNormalizationLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; &amp;aclMeanInfo,</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; &amp;aclVarInfo,</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; &amp;aclBetaInfo,</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; &amp;aclGammaInfo,</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; descriptor.m_Eps,</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; activationInfo);</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00758">ClLayerSupport::IsBatchNormalizationSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.html#l00292">ClBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="ae87476befb36d9cc4fb926337ba65b5d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae87476befb36d9cc4fb926337ba65b5d">&#9670;&nbsp;</a></span>ClBatchToSpaceNdWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClBatchToSpaceNdWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_batch_to_space_nd_descriptor.html">BatchToSpaceNdDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_batch_to_space_nd_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_cl_batch_to_space_nd_workload_8cpp_source.html">ClBatchToSpaceNdWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusBatchToSpace = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusReshapeInput = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusReshapeOutput = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; arm_compute::TensorInfo aclReshapeInputInfo = aclInputInfo;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; arm_compute::TensorInfo aclReshapeOutputInfo = aclOutputInfo;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="comment">// When a spacial dimension is missing (rank=3) set W to 1</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rank = input.GetNumDimensions();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">if</span> (rank == 3)</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> arm_compute::TensorShape inputShape = aclInputInfo.tensor_shape();</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> arm_compute::TensorShape outputShape = aclOutputInfo.tensor_shape();</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">if</span> (descriptor.m_DataLayout == <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">// In ACL dimensions are right to left: C, W, H, N</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; aclInputInfo.set_tensor_shape({inputShape.x(), 1, inputShape.y(), inputShape.z()});</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; aclOutputInfo.set_tensor_shape({outputShape.x(), 1, outputShape.y(), outputShape.z()});</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (descriptor.m_DataLayout == <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>)</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="comment">// In ACL dimensions are right to left: W, H, C, N</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; aclInputInfo.set_tensor_shape({1, inputShape.x(), inputShape.y(), inputShape.z()});</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; aclOutputInfo.set_tensor_shape({1, outputShape.x(), outputShape.y(), outputShape.z()});</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported or unknown DataLayout&quot;</span>, <a class="code" href="_exceptions_8hpp.html#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>());</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; statusReshapeInput = arm_compute::CLReshapeLayer::validate(&amp;aclInputInfo, &amp;aclReshapeInputInfo);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; statusReshapeOutput = arm_compute::CLReshapeLayer::validate(&amp;aclReshapeOutputInfo, &amp;aclOutputInfo);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="comment">// ArmNN blockShape is [H, W] ACl asks for W, H</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; int32_t blockHeight = armnn::numeric_cast&lt;int32_t&gt;(descriptor.m_BlockShape[0]);</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; int32_t blockWidth = (rank == 3) ? 1 : armnn::numeric_cast&lt;int32_t&gt;(descriptor.m_BlockShape[1]);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">const</span> arm_compute::CropInfo cropInfo = BuildArmComputeCropInfo(descriptor, rank);</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; statusBatchToSpace = arm_compute::CLBatchToSpaceLayer::validate(rank == 3 ? &amp;aclReshapeInputInfo : &amp;aclInputInfo,</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; blockWidth,</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; blockHeight,</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; rank == 3 ? &amp;aclReshapeOutputInfo : &amp;aclOutputInfo,</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; cropInfo);</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">if</span> (statusReshapeInput.error_code() == arm_compute::ErrorCode::OK &amp;&amp;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; statusReshapeOutput.error_code() == arm_compute::ErrorCode::OK &amp;&amp;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; statusBatchToSpace.error_code() == arm_compute::ErrorCode::OK)</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; {</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="stringliteral">&quot;All BatchToSpace layers validate status OK.&quot;</span>);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="stringliteral">&quot;BatchToSpace layer validate status failed.&quot;</span></div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; + statusBatchToSpace.error_description()</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; + statusReshapeInput.error_description()</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; + statusReshapeOutput.error_description());</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00779">ClLayerSupport::IsBatchToSpaceNdSupported()</a>.</p>
</div>
</div>
<a id="a7f82264f26183ae3c66390e33be14ec6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7f82264f26183ae3c66390e33be14ec6">&#9670;&nbsp;</a></span>ClCastValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClCastValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_cast_workload_8cpp_source.html#l00020">20</a> of file <a class="el" href="_cl_cast_workload_8cpp_source.html">ClCastWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> arm_compute::CLCast::validate(&amp;aclInput, &amp;aclOutput, g_AclConvertPolicy);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00791">ClLayerSupport::IsCastSupported()</a>.</p>
</div>
</div>
<a id="a02e646180897aca9fcbc02d16efdd784"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a02e646180897aca9fcbc02d16efdd784">&#9670;&nbsp;</a></span>ClChannelShuffleValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClChannelShuffleValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_channel_shuffle_descriptor.html">ChannelShuffleDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_channel_shuffle_workload_8cpp_source.html#l00020">20</a> of file <a class="el" href="_cl_channel_shuffle_workload_8cpp_source.html">ClChannelShuffleWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="comment">// In Arm NN and in NNAPI, channel shuffle implementation is datalayout agnostic and it has axis as a parameter.</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="comment">// The channel shuffle Implementation for Neon is dependent on datalayout and does not have axis as a parameter,</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="comment">// it only supports channel shuffle for 4D tensors in dimension C (1 or 3).</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">arm_compute::DataLayout</a> aclDataLayout;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">if</span> (input.GetNumDimensions() == 4)</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; {</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">switch</span> (descriptor.m_Axis)</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">case</span> 1:</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; aclDataLayout = ConvertDataLayout(<a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">case</span> 3:</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; aclDataLayout = ConvertDataLayout(<a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Unsupported axis&quot;</span>};</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; aclInputInfo.set_data_layout(aclDataLayout);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; aclOutputInfo.set_data_layout(aclDataLayout);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> arm_compute::CLChannelShuffleLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, descriptor.m_NumGroups);</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Unsupported number of dimensions&quot;</span>};</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00801">ClLayerSupport::IsChannelShuffleSupported()</a>.</p>
</div>
</div>
<a id="af6f6476c5d1c4c85153020f5229ebd14"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af6f6476c5d1c4c85153020f5229ebd14">&#9670;&nbsp;</a></span>ClComparisonWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClComparisonWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_comparison_descriptor.html">ComparisonDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_comparison_workload_8cpp_source.html#l00024">24</a> of file <a class="el" href="_cl_comparison_workload_8cpp_source.html">ClComparisonWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58c">arm_compute::ComparisonOperation</a> comparisonOperation = <a class="code" href="namespacearmnn.html#ac1438a97bbc2aee5cd8470d9d2a3aebc">ConvertComparisonOperationToAcl</a>(descriptor);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLComparison::validate(&amp;aclInput0Info,</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; &amp;aclInput1Info,</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; comparisonOperation);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00813">ClLayerSupport::IsComparisonSupported()</a>.</p>
</div>
</div>
<a id="a0784b1fdac2844c5d6f331ab6e9af547"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0784b1fdac2844c5d6f331ab6e9af547">&#9670;&nbsp;</a></span>ClConcatWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClConcatWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>inputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_origins_descriptor.html">OriginsDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_concat_workload_8cpp_source.html#l00027">27</a> of file <a class="el" href="_cl_concat_workload_8cpp_source.html">ClConcatWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; aclInputs;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> TensorInfo* input : inputs)</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; {</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(*input, <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; aclInputs.emplace_back(aclInputInfo);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; std::vector&lt;const arm_compute::ITensorInfo*&gt; aclInputPtrs;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">for</span> (arm_compute::ITensorInfo&amp; input : aclInputs)</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; aclInputPtrs.emplace_back(&amp;input);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">size_t</span> aclAxis = CalcAxis(descriptor);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> arm_compute::CLConcatenateLayer::validate(aclInputPtrs, &amp;aclOutputInfo, aclAxis);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00827">ClLayerSupport::IsConcatSupported()</a>.</p>
</div>
</div>
<a id="a2f5c2e8794174361f2308f4a0d3f9c73"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2f5c2e8794174361f2308f4a0d3f9c73">&#9670;&nbsp;</a></span>ClConstantWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClConstantWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_constant_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_cl_constant_workload_8cpp_source.html">ClConstantWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo neonOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; std::array&lt;arm_compute::DataType,8&gt; supportedTypes = {</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; arm_compute::DataType::F16,</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; arm_compute::DataType::F32,</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; arm_compute::DataType::QASYMM8,</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; arm_compute::DataType::QASYMM8_SIGNED,</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; arm_compute::DataType::QSYMM16,</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; arm_compute::DataType::QSYMM8,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; arm_compute::DataType::QSYMM8_PER_CHANNEL,</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; arm_compute::DataType::S32</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; };</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">auto</span> it = std::find(begin(supportedTypes), end(supportedTypes), neonOutputInfo.data_type());</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">if</span> (it != end(supportedTypes))</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; {</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{};</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; }</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Unsupported DataType&quot;</span>};</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00868">ClLayerSupport::IsConstantSupported()</a>.</p>
</div>
</div>
<a id="a744cd226e45f7c948e0533abbd166b1f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a744cd226e45f7c948e0533abbd166b1f">&#9670;&nbsp;</a></span>ClContextBufferHasIdentifier()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool armnn::ClContextBufferHasIdentifier </td>
<td>(</td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>buf</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.html#l00152">152</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.html">ClContextSchema_generated.h</a>.</p>
<div class="fragment"><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; {</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">return</span> flatbuffers::BufferHasIdentifier(</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; buf, <a class="code" href="namespacearmnn.html#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a>());</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.html#l00148">ClContextIdentifier()</a>.</p>
</div>
</div>
<a id="ab4e35e40c433e5fb0a0b89ca7c89988d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab4e35e40c433e5fb0a0b89ca7c89988d">&#9670;&nbsp;</a></span>ClContextExtension()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const char* armnn::ClContextExtension </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.html#l00167">167</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.html">ClContextSchema_generated.h</a>.</p>
<div class="fragment"><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;armnn&quot;</span>;</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ab672391d036102ab6864bb181d4844d5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab672391d036102ab6864bb181d4844d5">&#9670;&nbsp;</a></span>ClContextIdentifier()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const char* armnn::ClContextIdentifier </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.html#l00148">148</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.html">ClContextSchema_generated.h</a>.</p>
<div class="fragment"><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ARMN&quot;</span>;</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_context_schema__generated_8h_source.html#l00152">ClContextBufferHasIdentifier()</a>, <a class="el" href="_cl_context_schema__generated_8h_source.html#l00171">FinishClContextBuffer()</a>, <a class="el" href="_cl_context_schema__generated_8h_source.html#l00177">FinishSizePrefixedClContextBuffer()</a>, <a class="el" href="_cl_context_schema__generated_8h_source.html#l00157">VerifyClContextBuffer()</a>, and <a class="el" href="_cl_context_schema__generated_8h_source.html#l00162">VerifySizePrefixedClContextBuffer()</a>.</p>
</div>
</div>
<a id="a46efae0191388fd33db4e95c5d79e2be"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a46efae0191388fd33db4e95c5d79e2be">&#9670;&nbsp;</a></span>ClConvertFp16ToFp32WorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClConvertFp16ToFp32WorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_convert_fp16_to_fp32_workload_8cpp_source.html#l00044">44</a> of file <a class="el" href="_cl_convert_fp16_to_fp32_workload_8cpp_source.html">ClConvertFp16ToFp32Workload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">if</span> (input.GetDataType() != DataType::Float16)</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Input should be Float16&quot;</span>);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (output.GetDataType() != DataType::Float32)</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Output should be Float32&quot;</span>);</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLDepthConvertLayer::validate(</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; &amp;aclInputInfo, &amp;aclOutputInfo, g_AclConvertPolicy, 0);</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, and <a class="el" href="_tensor_8hpp_source.html#l00200">TensorInfo::GetDataType()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00876">ClLayerSupport::IsConvertFp16ToFp32Supported()</a>.</p>
</div>
</div>
<a id="a37f6946bfb7a9c7d64881b7a2e13945f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a37f6946bfb7a9c7d64881b7a2e13945f">&#9670;&nbsp;</a></span>ClConvertFp32ToFp16WorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClConvertFp32ToFp16WorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_convert_fp32_to_fp16_workload_8cpp_source.html#l00044">44</a> of file <a class="el" href="_cl_convert_fp32_to_fp16_workload_8cpp_source.html">ClConvertFp32ToFp16Workload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">if</span> (input.GetDataType() != DataType::Float32)</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Input should be Float32&quot;</span>);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (output.GetDataType() != DataType::Float16)</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Output should be Float16&quot;</span>);</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLDepthConvertLayer::validate(</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; &amp;aclInputInfo, &amp;aclOutputInfo, g_AclConvertPolicy, 0);</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, and <a class="el" href="_tensor_8hpp_source.html#l00200">TensorInfo::GetDataType()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00886">ClLayerSupport::IsConvertFp32ToFp16Supported()</a>.</p>
</div>
</div>
<a id="a61cf0886d4c1a6e24c101a57ccb2ec31"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a61cf0886d4c1a6e24c101a57ccb2ec31">&#9670;&nbsp;</a></span>ClConvolution2dWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClConvolution2dWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_convolution2d_descriptor.html">Convolution2dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>weights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>biases</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>isFastMathEnabled</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_convolution2d_workload_8cpp_source.html#l00023">23</a> of file <a class="el" href="_cl_convolution2d_workload_8cpp_source.html">ClConvolution2dWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; aclWeightsInfo.set_are_values_constant(weights.IsConstant());</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(descriptor.m_DilationX,</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; descriptor.m_DilationY);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; arm_compute::TensorInfo aclBiasesInfo;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">if</span> (!biases.has_value())</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="stringliteral">&quot;ArmNN ClConvolution2dWorkload has empty bias value.&quot;</span>};</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="comment">// There&#39;s currently a problem with non const bias, so we&#39;ll explicitly block it here.</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (!biases.value().IsConstant())</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="stringliteral">&quot;ArmNN ClDepthwiseConv2dWorkload does not support non constant bias.&quot;</span>};</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; aclBiasesInfo.set_are_values_constant(biases.value().IsConstant());</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; arm_compute::PadStrideInfo layerInfo = BuildArmComputePadStrideInfo(descriptor);</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; </div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">return</span> arm_compute::CLConvolutionLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; &amp;aclWeightsInfo,</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; optionalAclBiasesInfo,</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; layerInfo,</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; arm_compute::WeightsInfo(),</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; aclDilationInfo,</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; activationInfo,</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; isFastMathEnabled);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00896">ClLayerSupport::IsConvolution2dSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.html#l00292">ClBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="ae387b3587bcce82eb33623b300097a8c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae387b3587bcce82eb33623b300097a8c">&#9670;&nbsp;</a></span>ClConvolution3dWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClConvolution3dWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_convolution3d_descriptor.html">Convolution3dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>weights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>biases</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>isFastMathEnabled</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_convolution3d_workload_8cpp_source.html#l00023">23</a> of file <a class="el" href="_cl_convolution3d_workload_8cpp_source.html">ClConvolution3dWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; arm_compute::TensorInfo aclBiasesInfo;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; arm_compute::TensorInfo* optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">if</span> (!biases.has_value())</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="stringliteral">&quot;ArmNN ClConvolution3dWorkload has empty bias value.&quot;</span>};</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; }</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> arm_compute::Conv3dInfo aclConv3DInfo = <a class="code" href="namespacearmnn.html#a855760e957668804d33c0691a802496e">ComputeConv3DInfo</a>(descriptor,</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; isFastMathEnabled,</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> arm_compute::CLConv3D::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; &amp;aclWeightsInfo,</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; optionalAclBiasesInfo,</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; aclConv3DInfo);</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00929">ClLayerSupport::IsConvolution3dSupported()</a>.</p>
</div>
</div>
<a id="ab3624c723d9a0ec93722b19060b76115"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab3624c723d9a0ec93722b19060b76115">&#9670;&nbsp;</a></span>ClDepthToSpaceWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClDepthToSpaceWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_depth_to_space_workload_8cpp_source.html#l00022">22</a> of file <a class="el" href="_cl_depth_to_space_workload_8cpp_source.html">ClDepthToSpaceWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = descriptor.m_DataLayout;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, dataLayout);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; int32_t blockSize = armnn::numeric_cast&lt;int32_t&gt;(descriptor.m_BlockSize);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, dataLayout);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLDepthToSpaceLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; blockSize);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.html#l01095">SpaceToDepthDescriptor::m_DataLayout</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00972">ClLayerSupport::IsDepthToSpaceSupported()</a>.</p>
</div>
</div>
<a id="aa6670a2fcf9f365da69f3f3092dfa64b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa6670a2fcf9f365da69f3f3092dfa64b">&#9670;&nbsp;</a></span>ClDepthwiseConvolutionWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClDepthwiseConvolutionWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html">DepthwiseConvolution2dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>weights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>biases</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_depthwise_convolution_workload_8cpp_source.html#l00026">26</a> of file <a class="el" href="_cl_depthwise_convolution_workload_8cpp_source.html">ClDepthwiseConvolutionWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// ArmNN format for weights for depthwise is [1, H, W, C] independently of the input/output layout</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="comment">// ACL format for weights for depthwise is:</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// - [1, H, W, C] for [N, H, W, C] input/output layout (matches with ArmNN)</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">// - [1, C, H, W] for [N, C, H, W] input/output layout</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">// Therefore ArmNN weights have to be permuted when input/output layout is [N, C, H, W] to pass them to ACL.</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// The PermuteDepthwiseConv2dWeights backend optimization takes care of this, but it has not been performed yet,</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">// so we do the permute here for the TensorInfo weights.</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclDepthMultiplier;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; TensorInfo weightsPermuted;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; std::tie(weightsPermuted, aclDepthMultiplier) = <a class="code" href="namespacearmnn.html#ac4aa9e41515b354234645f115c49de32">Convert1HWOTensorInfoToAcl</a>(weights, input,descriptor.m_DataLayout);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="comment">// Convert the weights into the compute library format</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weightsPermuted, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; aclWeightsInfo.set_are_values_constant(weights.IsConstant());</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; arm_compute::TensorInfo aclBiasesInfo;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; arm_compute::TensorInfo* optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; {</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">if</span> (!biases.has_value())</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; {</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="stringliteral">&quot;ArmNN ClDepthwiseConv2dWorkload has empty bias value.&quot;</span>};</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; }</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; aclBiasesInfo.set_are_values_constant(biases.value().IsConstant());</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">const</span> arm_compute::PadStrideInfo aclPadStrideInfo = BuildArmComputePadStrideInfo(descriptor);</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">const</span> arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; descriptor.m_DilationX,</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; descriptor.m_DilationY);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">return</span> arm_compute::CLDepthwiseConvolutionLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; &amp;aclWeightsInfo,</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; optionalAclBiasesInfo,</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; aclPadStrideInfo,</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; aclDepthMultiplier,</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; activationInfo,</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; aclDilationInfo);</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; </div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00984">ClLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.html#l01001">ClLayerSupport::IsDilatedDepthwiseConvolutionSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.html#l00292">ClBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="a75045734c29d7d6635342c05adbc151b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a75045734c29d7d6635342c05adbc151b">&#9670;&nbsp;</a></span>ClDequantizeWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClDequantizeWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_dequantize_workload_8cpp_source.html#l00022">22</a> of file <a class="el" href="_cl_dequantize_workload_8cpp_source.html">ClDequantizeWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> arm_compute::CLDequantizationLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00962">ClLayerSupport::IsDequantizeSupported()</a>.</p>
</div>
</div>
<a id="a0591ff61ac269187164ea23713d33852"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0591ff61ac269187164ea23713d33852">&#9670;&nbsp;</a></span>ClDivisionWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClDivisionWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_division_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_cl_division_workload_8cpp_source.html">ClDivisionWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput2 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">return</span> arm_compute::CLArithmeticDivision::validate(&amp;aclInput1, &amp;aclInput2, &amp;aclOutput, activationInfo);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01019">ClLayerSupport::IsDivisionSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.html#l00189">ClLayerSupport::IsLayerSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.html#l00292">ClBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="a374539d87fe79db6ab505524a0830d1f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a374539d87fe79db6ab505524a0830d1f">&#9670;&nbsp;</a></span>ClElementwiseBinaryValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClElementwiseBinaryValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_elementwise_binary_descriptor.html">ElementwiseBinaryDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_elementwise_binary_workload_8cpp_source.html#l00064">64</a> of file <a class="el" href="_cl_elementwise_binary_workload_8cpp_source.html">ClElementwiseBinaryWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;{</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">switch</span> (descriptor.m_Operation)</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047add4fe0cc913f704600b97d1f5dd285de">armnn::BinaryOperation::Power</a>:</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">return</span> arm_compute::CLElementwisePower::validate(&amp;aclInput0Info,</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; &amp;aclInput1Info,</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; activationInfo);</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a2d17ea57d7f86acde5c60cef8e123a53">armnn::BinaryOperation::SqDiff</a>:</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">return</span> arm_compute::CLElementwiseSquaredDiff::validate(&amp;aclInput0Info,</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; &amp;aclInput1Info,</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; activationInfo);</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unknown binary operator&quot;</span>, <a class="code" href="_exceptions_8hpp.html#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>());</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00189">ClLayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
<a id="a9831849c09391e90e50de46e2ee16403"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9831849c09391e90e50de46e2ee16403">&#9670;&nbsp;</a></span>ClExpWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClExpWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_exp_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_cl_exp_workload_8cpp_source.html">ClExpWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::CLExpLayer::validate(&amp;aclInput, &amp;aclOutput);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01032">ClLayerSupport::IsElementwiseUnarySupported()</a>.</p>
</div>
</div>
<a id="a8874961260f35da85229554f92e16ca9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8874961260f35da85229554f92e16ca9">&#9670;&nbsp;</a></span>ClFloorWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClFloorWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_floor_float_workload_8cpp_source.html#l00014">14</a> of file <a class="el" href="_cl_floor_float_workload_8cpp_source.html">ClFloorFloatWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;{</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keywordflow">return</span> arm_compute::CLFloor::validate(&amp;aclInput, &amp;aclOutput);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01096">ClLayerSupport::IsFloorSupported()</a>.</p>
</div>
</div>
<a id="a18c7eef8533ca0acbbe081cd1a1fec98"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a18c7eef8533ca0acbbe081cd1a1fec98">&#9670;&nbsp;</a></span>ClFullyConnectedWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClFullyConnectedWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>weights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>biases</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.html">FullyConnectedDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_fully_connected_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_cl_fully_connected_workload_8cpp_source.html">ClFullyConnectedWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; arm_compute::TensorInfo aclWeights = BuildArmComputeTensorInfo(weights);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; aclWeights.set_are_values_constant(weights.IsConstant());</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; arm_compute::TensorInfo aclBiases;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; arm_compute::TensorInfo* optionalAclBiases = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; biases.has_value(),</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="stringliteral">&quot;ClFullyConnectedWorkload: Bias was enabled in the descriptor but no value was supplied.&quot;</span>);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; aclBiases = BuildArmComputeTensorInfo(biases.value());</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; aclBiases.set_are_values_constant(biases.value().IsConstant());</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; optionalAclBiases = &amp;aclBiases;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">const</span> arm_compute::FullyConnectedLayerInfo fullyConnectedLayerInfo =</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="namespacearmnn.html#ae2e0c1d8160fadce44d479379790718e">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a>(descriptor, activationDescriptor);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> arm_compute::CLFullyConnectedLayer::validate(&amp;aclInput,</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; &amp;aclWeights,</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; optionalAclBiases,</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; &amp;aclOutput,</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; fullyConnectedLayerInfo);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01106">ClLayerSupport::IsFullyConnectedSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.html#l00292">ClBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="adc7c6ed4375eb58ea8fa20d6ec704a27"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adc7c6ed4375eb58ea8fa20d6ec704a27">&#9670;&nbsp;</a></span>ClGatherNdWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClGatherNdWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>paramsInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>indicesInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Validate Mul</p>
<p>Validate ReduceSum</p>
<p>Validate Gather</p>
<p>Validate Reshape</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.html#l00016">16</a> of file <a class="el" href="_cl_gather_nd_workload_8cpp_source.html">ClGatherNdWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="comment">// Calculate ND, K, W, C.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; std::map&lt;std::string, unsigned int&gt; keyIndices = <a class="code" href="namespacearmnn.html#ac40d3e4035af5fbe68d9e126a8d6367c">CalculateGatherNdKeyIndices</a>(paramsInfo, indicesInfo);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"> /// Validate Mul</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"></span> <span class="comment">// Indices with shape { W, ND }</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> indices_W_ND_Info = indicesInfo;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; indices_W_ND_Info.<a class="code" href="classarmnn_1_1_tensor_info.html#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>], keyIndices[<span class="stringliteral">&quot;ND&quot;</span>] });</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclIndicesInfo = BuildArmComputeTensorInfo(indices_W_ND_Info);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="comment">// Flattened coefficients with shape { ND }</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> flattenedCoeff_Info = indicesInfo;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; flattenedCoeff_Info.<a class="code" href="classarmnn_1_1_tensor_info.html#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;ND&quot;</span>] });</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclFlattenedCoeffInfo = BuildArmComputeTensorInfo(flattenedCoeff_Info);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="comment">// Output of Mul with shape { W, ND }</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputMulInfo = BuildArmComputeTensorInfo(indices_W_ND_Info);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">auto</span> statusMul = arm_compute::CLPixelWiseMultiplication::validate(&amp;aclIndicesInfo,</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; &amp;aclFlattenedCoeffInfo,</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; &amp;aclOutputMulInfo,</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; 1.0f,</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; arm_compute::ConvertPolicy::WRAP,</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; arm_compute::RoundingPolicy::TO_ZERO,</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; arm_compute::ActivationLayerInfo());</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="comment"> /// Validate ReduceSum</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment"></span> <span class="comment">// Flattened indices with shape { W }</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> flattenedIndices_Info = indicesInfo;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; flattenedIndices_Info.<a class="code" href="classarmnn_1_1_tensor_info.html#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>] });</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclFlattenedIndicesInfo = BuildArmComputeTensorInfo(flattenedIndices_Info);</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; </div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> std::vector&lt;unsigned int&gt; armnnReduceAxes(1, 1);</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> coords = BuildArmComputeReductionCoordinates(aclOutputMulInfo.num_dimensions(),</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; indices_W_ND_Info.<a class="code" href="classarmnn_1_1_tensor_info.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(),</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; armnnReduceAxes);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">auto</span> statusReduceSum = arm_compute::CLReductionOperation::validate(&amp;aclOutputMulInfo,</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; &amp;aclFlattenedIndicesInfo,</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(coords[0]),</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; arm_compute::ReductionOperation::SUM,</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">false</span>);</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment"> /// Validate Gather</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment"></span> <span class="comment">// Params with shape { K, C }</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> params_K_C_Info = paramsInfo;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; params_K_C_Info.<a class="code" href="classarmnn_1_1_tensor_info.html#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;K&quot;</span>], keyIndices[<span class="stringliteral">&quot;C&quot;</span>] });</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclParamsInfo = BuildArmComputeTensorInfo(params_K_C_Info);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">// Output of gather with shape { W, C }</span></div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> outputGather_Info = outputInfo;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; outputGather_Info.<a class="code" href="classarmnn_1_1_tensor_info.html#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>], keyIndices[<span class="stringliteral">&quot;C&quot;</span>] });</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGatherInfo = BuildArmComputeTensorInfo(outputGather_Info);</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keyword">auto</span> aclAxis = <a class="code" href="namespacearmnn.html#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(0, params_K_C_Info);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">auto</span> statusGather =</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; arm_compute::CLGather::validate(&amp;aclParamsInfo, &amp;aclFlattenedIndicesInfo, &amp;aclOutputGatherInfo, aclAxis);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment"> /// Validate Reshape</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment"></span> <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(outputInfo);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; </div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">auto</span> statusReshape = arm_compute::CLReshapeLayer::validate(&amp;aclOutputGatherInfo, &amp;aclOutputInfo);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"> /// Return OK if all the layers are valid</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"></span> <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (statusMul.error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; statusReduceSum.error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; statusGather.error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; statusReshape.error_code() == okCode)</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="stringliteral">&quot;All GatherND layers validate status OK.&quot;</span>);</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="stringliteral">&quot;GatherND layer validate status failed.&quot;</span>);</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_workload_utils_8cpp_source.html#l00313">CalculateGatherNdKeyIndices()</a>, and <a class="el" href="_tensor_8hpp_source.html#l00195">TensorInfo::SetShape()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01137">ClLayerSupport::IsGatherNdSupported()</a>.</p>
</div>
</div>
<a id="aff9e3b78a938c14a4420ce6365b997fb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aff9e3b78a938c14a4420ce6365b997fb">&#9670;&nbsp;</a></span>ClGatherWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClGatherWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>indices</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_gather_descriptor.html">GatherDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_gather_workload_8cpp_source.html#l00015">15</a> of file <a class="el" href="_cl_gather_workload_8cpp_source.html">ClGatherWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclIndices = BuildArmComputeTensorInfo(indices);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.html#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(descriptor.m_Axis, input);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">return</span> arm_compute::CLGather::validate(&amp;aclInput, &amp;aclIndices, &amp;aclOutput, aclAxis);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01123">ClLayerSupport::IsGatherSupported()</a>.</p>
</div>
</div>
<a id="ab1545eea543ad790732f0722ce35cc80"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab1545eea543ad790732f0722ce35cc80">&#9670;&nbsp;</a></span>ClImportTensorHandleFactoryId()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::ClImportTensorHandleFactoryId </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</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.html#l00014">14</a> of file <a class="el" href="_cl_import_tensor_handle_factory_8hpp_source.html">ClImportTensorHandleFactory.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{</div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Arm/Cl/ImportTensorHandleFactory&quot;</span>;</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_import_tensor_handle_factory_8cpp_source.html#l00093">ClImportTensorHandleFactory::GetIdStatic()</a>.</p>
</div>
</div>
<a id="a79d362f0c6e04d51807e0d81b5b05f3a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a79d362f0c6e04d51807e0d81b5b05f3a">&#9670;&nbsp;</a></span>ClInstanceNormalizationWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClInstanceNormalizationWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_instance_normalization_descriptor.html">InstanceNormalizationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_instance_normalization_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_cl_instance_normalization_workload_8cpp_source.html">ClInstanceNormalizationWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> arm_compute::CLInstanceNormalizationLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; descriptor.m_Gamma,</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; descriptor.m_Beta,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; descriptor.m_Eps);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01155">ClLayerSupport::IsInstanceNormalizationSupported()</a>.</p>
</div>
</div>
<a id="aef334cdb24000c330f4d2e5f1b384784"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aef334cdb24000c330f4d2e5f1b384784">&#9670;&nbsp;</a></span>ClL2NormalizationWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClL2NormalizationWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_l2_normalization_descriptor.html">L2NormalizationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_l2_normalization_float_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_cl_l2_normalization_float_workload_8cpp_source.html">ClL2NormalizationFloatWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordtype">int</span> axis = (descriptor.m_DataLayout == DataLayout::NCHW) ? 2 : 0;</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">return</span> arm_compute::CLL2NormalizeLayer::validate(&amp;aclInput, &amp;aclOutput, axis, descriptor.m_Eps);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01167">ClLayerSupport::IsL2NormalizationSupported()</a>.</p>
</div>
</div>
<a id="a7900acef495ac8033a08d3ed74f06970"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7900acef495ac8033a08d3ed74f06970">&#9670;&nbsp;</a></span>ClLogicalAndWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClLogicalAndWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_logical_and_workload_8cpp_source.html#l00020">20</a> of file <a class="el" href="_cl_logical_and_workload_8cpp_source.html">ClLogicalAndWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo0 = BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo1 = BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLLogicalAnd::validate(&amp;aclInputInfo0,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; &amp;aclInputInfo1,</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; &amp;aclOutputInfo);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01179">ClLayerSupport::IsLogicalBinarySupported()</a>.</p>
</div>
</div>
<a id="ace776a194a715c709136a9966ada1a48"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ace776a194a715c709136a9966ada1a48">&#9670;&nbsp;</a></span>ClLogicalNotWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClLogicalNotWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_logical_not_workload_8cpp_source.html#l00020">20</a> of file <a class="el" href="_cl_logical_not_workload_8cpp_source.html">ClLogicalNotWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLLogicalNot::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; &amp;aclOutputInfo);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01032">ClLayerSupport::IsElementwiseUnarySupported()</a>.</p>
</div>
</div>
<a id="a89391e63f7a679b023e6bd1798186db6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a89391e63f7a679b023e6bd1798186db6">&#9670;&nbsp;</a></span>ClLogicalOrWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClLogicalOrWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_logical_or_workload_8cpp_source.html#l00020">20</a> of file <a class="el" href="_cl_logical_or_workload_8cpp_source.html">ClLogicalOrWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo0 = BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo1 = BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLLogicalOr::validate(&amp;aclInputInfo0,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; &amp;aclInputInfo1,</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; &amp;aclOutputInfo);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01179">ClLayerSupport::IsLogicalBinarySupported()</a>.</p>
</div>
</div>
<a id="a7071f5d6693d3014ddcb34c886ffc734"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7071f5d6693d3014ddcb34c886ffc734">&#9670;&nbsp;</a></span>ClLogSoftmaxWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClLogSoftmaxWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#ac14705405cbcdd580df613de6766fe65">LogSoftmaxDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_log_softmax_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_cl_log_softmax_workload_8cpp_source.html">ClLogSoftmaxWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.html#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(descriptor.m_Axis, input);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> arm_compute::CLLogSoftmaxLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, descriptor.m_Beta, aclAxis);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01207">ClLayerSupport::IsLogSoftmaxSupported()</a>.</p>
</div>
</div>
<a id="a64806be3c31d35b75546da7c6b6b46d0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a64806be3c31d35b75546da7c6b6b46d0">&#9670;&nbsp;</a></span>ClLogWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClLogWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_log_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_cl_log_workload_8cpp_source.html">ClLogWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::CLLogLayer::validate(&amp;aclInput, &amp;aclOutput);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01032">ClLayerSupport::IsElementwiseUnarySupported()</a>.</p>
</div>
</div>
<a id="a90ab88fe4c7aa9466c4653404a6b2213"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a90ab88fe4c7aa9466c4653404a6b2213">&#9670;&nbsp;</a></span>ClLstmFloatWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClLstmFloatWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>cellStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>scratchBuffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>cellStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_descriptor.html">LstmDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_input_params_info.html">LstmInputParamsInfo</a> &amp;&#160;</td>
<td class="paramname"><em>paramsInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_lstm_float_workload_8cpp_source.html#l00244">244</a> of file <a class="el" href="_cl_lstm_float_workload_8cpp_source.html">ClLstmFloatWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;{</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; lstm_params_info;</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; </div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="comment">// The inputs and the outputs</span></div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; </div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="comment">// Basic parameters</span></div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; </div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; </div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; {</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; </div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; {</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; lstm_params_info.set_cifg_params(&amp;aclInputToInputWeightsInfo, &amp;aclRecurrentToInputWeightsInfo,</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</span> ?</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; &amp;aclCellToInputWeightsInfo: <span class="keyword">nullptr</span>,</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; &amp;aclInputGateBiasInfo);</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; </div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; {</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; </div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; lstm_params_info.set_projection_params(&amp;aclProjectionWeightsInfo,</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ?</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; &amp;aclProjectionBiasInfo: <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; </div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; {</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; lstm_params_info.set_peephole_params(&amp;aclCellToForgetWeightsInfo, &amp;aclCellToOutputWeightsInfo);</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; }</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; </div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; </div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="comment">// for preparing the object for the class ActivationLayerInfo, we need to consider 5 situations</span></div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; arm_compute::ActivationLayerInfo activationLayerInfo =</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="namespacearmnn.html#aa1e93ef5f9ee3dbb5e7faa9578f180ae">ConvertLstmActivationFuncToAclLayerInfo</a>(descriptor.m_ActivationFunc);</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; </div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; {</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; }</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; </div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; </div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; </div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; </div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ?</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keyword">nullptr</span> : &amp;aclInputLayerNormWeightsInfo,</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; }</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; </div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">return</span> arm_compute::CLLSTMLayer::validate(&amp;aclInputInfo, &amp;aclInputToForgetWeightsInfo,</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; &amp;aclInputToCellWeightsInfo,</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; &amp;aclInputToOutputWeightsInfo,</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; &amp;aclForgetGateBiasInfo,</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; &amp;aclCellBiasInfo,</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; &amp;aclOutputGateBiasInfo,</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; &amp;aclOutputStateInInfo, &amp;aclCellStateInInfo,</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; &amp;aclScratchBufferInfo, &amp;aclOutputStateOutInfo,</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; &amp;aclCellStateOutInfo, &amp;aclOutputInfo,</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; lstm_params_info, activationLayerInfo,</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; cell_threshold, projection_threshold);</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01219">ClLayerSupport::IsLstmSupported()</a>.</p>
</div>
</div>
<a id="a553706c6338ffc52b0d916859f642587"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a553706c6338ffc52b0d916859f642587">&#9670;&nbsp;</a></span>ClMaximumWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClMaximumWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_maximum_workload_8cpp_source.html#l00024">24</a> of file <a class="el" href="_cl_maximum_workload_8cpp_source.html">ClMaximumWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLElementwiseMax::validate(&amp;aclInput0Info,</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; &amp;aclInput1Info,</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; &amp;aclOutputInfo);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00189">ClLayerSupport::IsLayerSupported()</a>, and <a class="el" href="_cl_layer_support_8cpp_source.html#l01243">ClLayerSupport::IsMaximumSupported()</a>.</p>
</div>
</div>
<a id="a048a8ea8b1b39343a73ca7458024ea54"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a048a8ea8b1b39343a73ca7458024ea54">&#9670;&nbsp;</a></span>ClMeanValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClMeanValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_mean_descriptor.html">MeanDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_mean_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_cl_mean_workload_8cpp_source.html">ClMeanWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> coords = BuildArmComputeReductionCoordinates(aclInputInfo.num_dimensions(),</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; input.GetNumDimensions(),</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; descriptor.m_Axis);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> arm_compute::CLReduceMean::validate(&amp;aclInputInfo, coords, descriptor.m_KeepDims, &amp;aclOutputInfo);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01255">ClLayerSupport::IsMeanSupported()</a>.</p>
</div>
</div>
<a id="a8c04c8e796a4fbec706df42ed9c27e4e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8c04c8e796a4fbec706df42ed9c27e4e">&#9670;&nbsp;</a></span>ClMinimumWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClMinimumWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_minimum_workload_8cpp_source.html#l00024">24</a> of file <a class="el" href="_cl_minimum_workload_8cpp_source.html">ClMinimumWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLElementwiseMin::validate(&amp;aclInput0Info,</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; &amp;aclInput1Info,</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; &amp;aclOutputInfo);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00189">ClLayerSupport::IsLayerSupported()</a>, and <a class="el" href="_cl_layer_support_8cpp_source.html#l01267">ClLayerSupport::IsMinimumSupported()</a>.</p>
</div>
</div>
<a id="a9638165cb6c1baae3b2b5fd9f0f75201"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9638165cb6c1baae3b2b5fd9f0f75201">&#9670;&nbsp;</a></span>ClMultiplicationWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClMultiplicationWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_multiplication_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_cl_multiplication_workload_8cpp_source.html">ClMultiplicationWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput2 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">auto</span> convertPolicy = (<a class="code" href="namespacearmnn.html#ad44c007f21af2d0375e3ef9400a1b275">IsQuantizedType</a>(input0.GetDataType()) || <a class="code" href="namespacearmnn.html#ad44c007f21af2d0375e3ef9400a1b275">IsQuantizedType</a>(input1.GetDataType())) ?</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; arm_compute::ConvertPolicy::SATURATE :</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; arm_compute::ConvertPolicy::WRAP;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="comment">// At the time of writing, configure() will fail if a rounding policy other than TO_ZERO is supplied to it,</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="comment">// when providing a scale of 1.0 for F32 tensors, even though the provided rounding policy appears to be</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// ignored for F32 tensors.</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">return</span> arm_compute::CLPixelWiseMultiplication::validate(&amp;aclInput1,</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; &amp;aclInput2,</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; &amp;aclOutput,</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; 1.0f,</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; convertPolicy,</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; arm_compute::RoundingPolicy::TO_ZERO,</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; activationInfo);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00189">ClLayerSupport::IsLayerSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.html#l01279">ClLayerSupport::IsMultiplicationSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.html#l00292">ClBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="a66a3a6c05b38e48508bbbb3f32023ab7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a66a3a6c05b38e48508bbbb3f32023ab7">&#9670;&nbsp;</a></span>ClNegWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClNegWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_neg_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_cl_neg_workload_8cpp_source.html">ClNegWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::CLNegLayer::validate(&amp;aclInput, &amp;aclOutput);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01032">ClLayerSupport::IsElementwiseUnarySupported()</a>.</p>
</div>
</div>
<a id="a144c2e243a255715f309999077ed1792"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a144c2e243a255715f309999077ed1792">&#9670;&nbsp;</a></span>ClNormalizationWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClNormalizationWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_normalization_descriptor.html">NormalizationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_normalization_float_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_cl_normalization_float_workload_8cpp_source.html">ClNormalizationFloatWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; arm_compute::NormalizationLayerInfo layerInfo = BuildArmComputeNormalizationLayerInfo(descriptor);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> arm_compute::CLNormalizationLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, layerInfo);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01292">ClLayerSupport::IsNormalizationSupported()</a>.</p>
</div>
</div>
<a id="adcf7b7d939bac1cfaeb333c7b3175bb8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adcf7b7d939bac1cfaeb333c7b3175bb8">&#9670;&nbsp;</a></span>ClPadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClPadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_pad_descriptor.html">PadDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_pad_workload_8cpp_source.html#l00062">62</a> of file <a class="el" href="_cl_pad_workload_8cpp_source.html">ClPadWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;{</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; std::vector&lt;std::pair&lt;unsigned int, unsigned int&gt;&gt; reversed_PadList(descriptor.m_PadList.size());</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; std::reverse_copy(std::begin(descriptor.m_PadList),</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; std::end(descriptor.m_PadList),</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; std::begin(reversed_PadList));</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; arm_compute::PaddingList padList = <span class="keyword">static_cast&lt;</span>arm_compute::PaddingList<span class="keyword">&gt;</span>(reversed_PadList);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">// PixelValue is currently unused when validating, but it&#39;s required to pass in PaddingMode.</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; arm_compute::PixelValue pixelValue = GetPixelValue(&amp;aclInputInfo, descriptor.m_PadValue);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus =</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; arm_compute::CLPadLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; padList,</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; pixelValue,</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="namespacearmnn.html#adf5a024ace0dbe2af2d5b1a1b9623771">ConvertPaddingModeToAcl</a>(descriptor.m_PaddingMode));</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; </div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01306">ClLayerSupport::IsPadSupported()</a>.</p>
</div>
</div>
<a id="a26c25df9e2271333ab4d4ef71db41dca"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a26c25df9e2271333ab4d4ef71db41dca">&#9670;&nbsp;</a></span>ClPermuteWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClPermuteWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_permute_descriptor.html">PermuteDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_permute_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_cl_permute_workload_8cpp_source.html">ClPermuteWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.html">armnn::PermutationVector</a>&amp; mappings = descriptor.m_DimMappings;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> arm_compute::CLPermute::validate(&amp;aclInputInfo, &amp;aclOutputInfo,</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; armcomputetensorutils::BuildArmComputePermutationVector(mappings));</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01318">ClLayerSupport::IsPermuteSupported()</a>.</p>
</div>
</div>
<a id="a8a21bb33f7f054ce7b48a8c7df9e6d4a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8a21bb33f7f054ce7b48a8c7df9e6d4a">&#9670;&nbsp;</a></span>ClPooling2dWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClPooling2dWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.html">Pooling2dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_pooling2d_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_cl_pooling2d_workload_8cpp_source.html">ClPooling2dWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; arm_compute::PoolingLayerInfo layerInfo = BuildArmComputePoolingLayerInfo(descriptor);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> arm_compute::CLPoolingLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, layerInfo);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01326">ClLayerSupport::IsPooling2dSupported()</a>.</p>
</div>
</div>
<a id="a85776d92e056832a524c6f2cf4741ced"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a85776d92e056832a524c6f2cf4741ced">&#9670;&nbsp;</a></span>ClPooling3dWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClPooling3dWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_pooling3d_descriptor.html">Pooling3dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_pooling3d_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_cl_pooling3d_workload_8cpp_source.html">ClPooling3dWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; {</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; arm_compute::Pooling3dLayerInfo layerInfo = BuildArmComputePooling3dLayerInfo(descriptor);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> arm_compute::CLPooling3dLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, layerInfo);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01334">ClLayerSupport::IsPooling3dSupported()</a>.</p>
</div>
</div>
<a id="ae58d1f4437a779274037bc86efac9e26"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae58d1f4437a779274037bc86efac9e26">&#9670;&nbsp;</a></span>ClPreluWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClPreluWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>alpha</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_prelu_workload_8cpp_source.html#l00016">16</a> of file <a class="el" href="_cl_prelu_workload_8cpp_source.html">ClPreluWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclAlpha = armcomputetensorutils::BuildArmComputeTensorInfo(alpha);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">return</span> arm_compute::CLPReluLayer::validate(&amp;aclInput,</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; &amp;aclAlpha,</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; &amp;aclOutput);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01342">ClLayerSupport::IsPreluSupported()</a>.</p>
</div>
</div>
<a id="a8cdb508cb0ebc06e39dc1661815d73b0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8cdb508cb0ebc06e39dc1661815d73b0">&#9670;&nbsp;</a></span>ClQLstmWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClQLstmWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>cellStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>cellStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_q_lstm_descriptor.html">QLstmDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_input_params_info.html">LstmInputParamsInfo</a> &amp;&#160;</td>
<td class="paramname"><em>paramsInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_q_lstm_workload_8cpp_source.html#l00247">247</a> of file <a class="el" href="_cl_q_lstm_workload_8cpp_source.html">ClQLstmWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;{</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; aclParamsInfo;</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; </div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="comment">// Input/Output tensor info</span></div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; </div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; </div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="comment">// Mandatory tensor info</span></div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; </div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="comment">// Optional tensor info</span></div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; </div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; </div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; </div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; </div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; </div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="comment">// Create tensor info for optional params if they are enabled</span></div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; {</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; {</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; </div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; </div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="comment">// Set peephole params info</span></div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; aclParamsInfo.set_peephole_params(&amp;aclCellToForgetWeightsInfo,</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; &amp;aclCellToOutputWeightsInfo);</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; }</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; </div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; {</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; </div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; {</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; }</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; </div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="comment">// Set projection params info</span></div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; aclParamsInfo.set_projection_params(</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; &amp;aclProjectionWeightsInfo,</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ? &amp;aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; }</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; </div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; {</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; </div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; </div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="comment">// Set layer norm params info</span></div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; aclParamsInfo.set_layer_normalization_params(</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; paramsInfo.m_InputLayerNormWeights != <span class="keyword">nullptr</span> ? &amp;aclInputLayerNormWeightsInfo : <span class="keyword">nullptr</span>,</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; }</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; </div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; {</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; </div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="comment">// Set CIFG params info</span></div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; aclParamsInfo.set_cifg_params(</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; &amp;aclInputToInputWeightsInfo,</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; &amp;aclRecurrentToInputWeightsInfo,</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</span> ? &amp;aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; &amp;aclInputGateBiasInfo);</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; }</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; </div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="comment">// Set scalar descriptor params</span></div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; aclParamsInfo.set_cell_clip_params(descriptor.m_CellClip);</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; aclParamsInfo.set_projection_clip_params(descriptor.m_ProjectionClip);</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; aclParamsInfo.set_hidden_state_params(descriptor.m_HiddenStateZeroPoint, descriptor.m_HiddenStateScale);</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; aclParamsInfo.set_matmul_scale_params(descriptor.m_InputIntermediateScale,</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; descriptor.m_ForgetIntermediateScale,</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; descriptor.m_CellIntermediateScale,</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; descriptor.m_OutputIntermediateScale);</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; </div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="comment">// QLSTM CL validate</span></div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">return</span> arm_compute::CLQLSTMLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; &amp;aclInputToForgetWeightsInfo,</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; &amp;aclInputToCellWeightsInfo,</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; &amp;aclInputToOutputWeightsInfo,</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; &amp;aclForgetGateBiasInfo,</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; &amp;aclCellBiasInfo,</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; &amp;aclOutputGateBiasInfo,</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; &amp;aclCellStateInInfo,</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; &amp;aclOutputStateInInfo,</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; &amp;aclCellStateOutInfo,</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; &amp;aclOutputStateOutInfo,</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; aclParamsInfo);</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01350">ClLayerSupport::IsQLstmSupported()</a>.</p>
</div>
</div>
<a id="a5fb7fe07abfb2373103d842b47a24726"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5fb7fe07abfb2373103d842b47a24726">&#9670;&nbsp;</a></span>ClQuantizedLstmWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClQuantizedLstmWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>previousCellStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>previousOutputIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>cellStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.html">QuantizedLstmInputParamsInfo</a> &amp;&#160;</td>
<td class="paramname"><em>paramsInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_quantized_lstm_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_cl_quantized_lstm_workload_8cpp_source.html">ClQuantizedLstmWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="comment">// Inputs</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclPreviousCellStateInInfo = BuildArmComputeTensorInfo(previousCellStateIn);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclPreviousOutputInInfo = BuildArmComputeTensorInfo(previousOutputIn);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="comment">// Outputs</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="comment">// Basic parameters</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToInputWeightsInfo</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToInputWeightsInfo</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">return</span> arm_compute::CLLSTMLayerQuantized::validate(&amp;aclInputInfo, &amp;aclInputToInputWeightsInfo,</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; &amp;aclInputToForgetWeightsInfo, &amp;aclInputToCellWeightsInfo,</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; &amp;aclInputToOutputWeightsInfo, &amp;aclRecurrentToInputWeightsInfo,</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; &amp;aclRecurrentToForgetWeightsInfo, &amp;aclRecurrentToCellWeightsInfo,</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; &amp;aclRecurrentToOutputWeightsInfo, &amp;aclInputGateBiasInfo,</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; &amp;aclForgetGateBiasInfo, &amp;aclCellBiasInfo, &amp;aclOutputGateBiasInfo,</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; &amp;aclPreviousCellStateInInfo, &amp;aclPreviousOutputInInfo,</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; &amp;aclCellStateOutInfo, &amp;aclOutputInfo);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01384">ClLayerSupport::IsQuantizedLstmSupported()</a>.</p>
</div>
</div>
<a id="a9c1b478e30a1e8a4ecac874cf15f13d4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9c1b478e30a1e8a4ecac874cf15f13d4">&#9670;&nbsp;</a></span>ClQuantizeWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClQuantizeWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_quantize_workload_8cpp_source.html#l00022">22</a> of file <a class="el" href="_cl_quantize_workload_8cpp_source.html">ClQuantizeWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> arm_compute::CLQuantizationLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; &amp;aclOutputInfo);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01402">ClLayerSupport::IsQuantizeSupported()</a>.</p>
</div>
</div>
<a id="a4c42dfd9db4a47e470b5800bb11a8374"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4c42dfd9db4a47e470b5800bb11a8374">&#9670;&nbsp;</a></span>ClReduceWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClReduceWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_reduce_descriptor.html">ReduceDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_reduce_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_cl_reduce_workload_8cpp_source.html">ClReduceWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">if</span> (descriptor.m_vAxis.size() == 1 || descriptor.m_vAxis.empty())</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; {</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> coords = BuildArmComputeReductionCoordinates(aclInputInfo.num_dimensions(),</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; input.GetNumDimensions(),</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; descriptor.m_vAxis);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">return</span> arm_compute::CLReductionOperation::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(coords[0]),</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="namespacearmnn.html#a03ab984d93d0f240f31274499b72e6b0">ConvertReductionOperationToAcl</a>(descriptor),</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; descriptor.m_KeepDims);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// Validate layer if there are multiple axes.</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> status;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="_arm_compute_utils_8hpp.html#a97d67174b2c48969547ba4bac79e5ea2">IS_MULTI_AXES_REDUCE_SUPPORTED</a>(<a class="code" href="namespacearmnn.html#a4c42dfd9db4a47e470b5800bb11a8374">ClReduceWorkloadValidate</a>, input, descriptor, status);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> status;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.html#l01556">ReduceDescriptor::m_vAxis</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01412">ClLayerSupport::IsReduceSupported()</a>.</p>
</div>
</div>
<a id="af5bb7a834a74983cbbc249785d0c392b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af5bb7a834a74983cbbc249785d0c392b">&#9670;&nbsp;</a></span>ClReshapeWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClReshapeWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_reshape_workload_8cpp_source.html#l00015">15</a> of file <a class="el" href="_cl_reshape_workload_8cpp_source.html">ClReshapeWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordflow">return</span> arm_compute::CLReshapeLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01424">ClLayerSupport::IsReshapeSupported()</a>.</p>
</div>
</div>
<a id="a95b187d3c6b7b46f4fbdc60be69fc02c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a95b187d3c6b7b46f4fbdc60be69fc02c">&#9670;&nbsp;</a></span>ClResizeWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClResizeWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_resize_descriptor.html">ResizeDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_resize_workload_8cpp_source.html#l00022">22</a> of file <a class="el" href="_cl_resize_workload_8cpp_source.html">ClResizeWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">arm_compute::DataLayout</a> aclDataLayout = ConvertDataLayout(descriptor.m_DataLayout);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; aclInputInfo.set_data_layout(aclDataLayout);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; aclOutputInfo.set_data_layout(aclDataLayout);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; arm_compute::InterpolationPolicy aclInterpolationPolicy =</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="namespacearmnn.html#ae9bdcb8ac91731109dc423d6ed476204">ConvertResizeMethodToAclInterpolationPolicy</a>(descriptor.m_Method);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; arm_compute::SamplingPolicy samplingPolicy = descriptor.m_HalfPixelCenters ? arm_compute::SamplingPolicy::CENTER :</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; arm_compute::SamplingPolicy::TOP_LEFT;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> arm_compute::CLScale::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; arm_compute::ScaleKernelInfo(aclInterpolationPolicy,</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; arm_compute::BorderMode::REPLICATE,</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; arm_compute::PixelValue(0.f),</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; samplingPolicy,</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">true</span>,</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; descriptor.m_AlignCorners));</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01433">ClLayerSupport::IsResizeSupported()</a>.</p>
</div>
</div>
<a id="a71d44017e7d06987e1206a26d9ec09ea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a71d44017e7d06987e1206a26d9ec09ea">&#9670;&nbsp;</a></span>ClReverseV2WorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClReverseV2WorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>axis</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_reverse_v2_workload_8cpp_source.html#l00016">16</a> of file <a class="el" href="_cl_reverse_v2_workload_8cpp_source.html">ClReverseV2Workload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclAxis = BuildArmComputeTensorInfo(axis);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">return</span> arm_compute::CLReverse::validate(&amp;aclInput, &amp;aclOutput, &amp;aclAxis, <span class="keyword">true</span>);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01441">ClLayerSupport::IsReverseV2Supported()</a>.</p>
</div>
</div>
<a id="a3f6f9f0d3567ae04b49ea88727845900"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3f6f9f0d3567ae04b49ea88727845900">&#9670;&nbsp;</a></span>ClRsqrtWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClRsqrtWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_rsqrt_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_cl_rsqrt_workload_8cpp_source.html">ClRsqrtWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::CLRsqrtLayer::validate(&amp;aclInput, &amp;aclOutput);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01032">ClLayerSupport::IsElementwiseUnarySupported()</a>.</p>
</div>
</div>
<a id="a49d6ee4e08176ca6afcc0e53f61e8075"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a49d6ee4e08176ca6afcc0e53f61e8075">&#9670;&nbsp;</a></span>ClScatterNdWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClScatterNdWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>indicesInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>updatesInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_scatter_nd_descriptor.html">ScatterNdDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_scatter_nd_workload_8cpp_source.html#l00020">20</a> of file <a class="el" href="_cl_scatter_nd_workload_8cpp_source.html">ClScatterNdWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(inputInfo);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclIndicesInfo = BuildArmComputeTensorInfo(indicesInfo);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclUpdatesInfo = BuildArmComputeTensorInfo(updatesInfo);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(outputInfo);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; arm_compute::ScatterInfo scatterInfo = BuildArmComputeScatterInfo(descriptor);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">return</span> arm_compute::CLScatter::validate(descriptor.m_InputEnabled ? &amp;aclInputInfo : <span class="keyword">nullptr</span>,</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; &amp;aclUpdatesInfo,</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; &amp;aclIndicesInfo,</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; scatterInfo);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01453">ClLayerSupport::IsScatterNdSupported()</a>.</p>
</div>
</div>
<a id="ac5cd8464c73415025cb8c8f6ada74e15"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac5cd8464c73415025cb8c8f6ada74e15">&#9670;&nbsp;</a></span>ClSinWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClSinWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_sin_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_cl_sin_workload_8cpp_source.html">ClSinWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::CLSinLayer::validate(&amp;aclInput, &amp;aclOutput);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01032">ClLayerSupport::IsElementwiseUnarySupported()</a>.</p>
</div>
</div>
<a id="a6d85d2806d0a90140832ad8113c1d350"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6d85d2806d0a90140832ad8113c1d350">&#9670;&nbsp;</a></span>ClSliceWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClSliceWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_slice_descriptor.html">SliceDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_slice_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_cl_slice_workload_8cpp_source.html">ClSliceWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; std::tie(starts, ends) = <a class="code" href="namespacearmnn.html#ae7c459566269bf22b16513d61865272b">SetClSliceData</a>(descriptor.m_Begin, descriptor.m_Size);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">return</span> arm_compute::CLSlice::validate(&amp;aclInput, &amp;aclOutput, starts, ends);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01469">ClLayerSupport::IsSliceSupported()</a>.</p>
</div>
</div>
<a id="abc6f7e5fe77e5aed3f7842755dd34073"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abc6f7e5fe77e5aed3f7842755dd34073">&#9670;&nbsp;</a></span>ClSoftmaxWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClSoftmaxWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_softmax_descriptor.html">SoftmaxDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_softmax_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_cl_softmax_workload_8cpp_source.html">ClSoftmaxWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.html#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(descriptor.m_Axis, input);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> arm_compute::CLSoftmaxLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, descriptor.m_Beta, aclAxis);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01477">ClLayerSupport::IsSoftmaxSupported()</a>.</p>
</div>
</div>
<a id="a534b28fd4b345bbc938d055ff5b8970f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a534b28fd4b345bbc938d055ff5b8970f">&#9670;&nbsp;</a></span>ClSpaceToBatchNdWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClSpaceToBatchNdWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.html">SpaceToBatchNdDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_space_to_batch_nd_workload_8cpp_source.html#l00016">16</a> of file <a class="el" href="_cl_space_to_batch_nd_workload_8cpp_source.html">ClSpaceToBatchNdWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusSpaceToBatch = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusReshapeInput = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusReshapeOutput = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; arm_compute::TensorInfo aclReshapeInputInfo = aclInputInfo;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; arm_compute::TensorInfo aclReshapeOutputInfo = aclOutputInfo;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="comment">// When a spacial dimension is missing (rank=3) set W to 1</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rank = input.GetNumDimensions();</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">if</span> (rank == 3)</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; {</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> arm_compute::TensorShape inputShape = aclInputInfo.tensor_shape();</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> arm_compute::TensorShape outputShape = aclOutputInfo.tensor_shape();</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">if</span> (descriptor.m_DataLayout == <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// In ACL dimensions are right to left: C, W, H, N</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; aclInputInfo.set_tensor_shape({inputShape.x(), 1, inputShape.y(), inputShape.z()});</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; aclOutputInfo.set_tensor_shape({outputShape.x(), 1, outputShape.y(), outputShape.z()});</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (descriptor.m_DataLayout == <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>)</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; {</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">// In ACL dimensions are right to left: W, H, C, N</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; aclInputInfo.set_tensor_shape({1, inputShape.x(), inputShape.y(), inputShape.z()});</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; aclOutputInfo.set_tensor_shape({1, outputShape.x(), outputShape.y(), outputShape.z()});</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported or unknown DataLayout&quot;</span>, <a class="code" href="_exceptions_8hpp.html#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>());</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; statusReshapeInput = arm_compute::CLReshapeLayer::validate(&amp;aclInputInfo, &amp;aclReshapeInputInfo);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; statusReshapeOutput = arm_compute::CLReshapeLayer::validate(&amp;aclReshapeOutputInfo, &amp;aclOutputInfo);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">// ArmNN blockShape is [H, W] ACl asks for W, H</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; int32_t blockHeight = armnn::numeric_cast&lt;int32_t&gt;(descriptor.m_BlockShape[0]);</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; int32_t blockWidth = (rank == 3) ? 1 : armnn::numeric_cast&lt;int32_t&gt;(descriptor.m_BlockShape[1]);</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; </div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> padLeft = (rank == 3) ? 0 : descriptor.m_PadList[1].first;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> padRight = (rank == 3) ? 0 : descriptor.m_PadList[1].second;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; arm_compute::Size2D paddingLeftTop = BuildArmComputeSize2D(padLeft,</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; descriptor.m_PadList[0].first);</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; arm_compute::Size2D paddingRightBottom = BuildArmComputeSize2D(padRight,</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; descriptor.m_PadList[0].second);</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLSpaceToBatchLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; blockWidth,</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; blockHeight,</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; paddingLeftTop,</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; paddingRightBottom,</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; &amp;aclOutputInfo);</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">if</span> (statusReshapeInput.error_code() == arm_compute::ErrorCode::OK &amp;&amp;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; statusReshapeOutput.error_code() == arm_compute::ErrorCode::OK &amp;&amp;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; statusSpaceToBatch.error_code() == arm_compute::ErrorCode::OK)</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="stringliteral">&quot;All SpaceToBatch layers validate status OK.&quot;</span>);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; {</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="stringliteral">&quot;SpaceToBatch layer validate status failed.&quot;</span></div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; + statusSpaceToBatch.error_description()</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; + statusReshapeInput.error_description()</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; + statusReshapeOutput.error_description());</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01485">ClLayerSupport::IsSpaceToBatchNdSupported()</a>.</p>
</div>
</div>
<a id="a4fa3292a277dde3b46be6a44b2de9713"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4fa3292a277dde3b46be6a44b2de9713">&#9670;&nbsp;</a></span>ClSpaceToDepthWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClSpaceToDepthWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.html">SpaceToDepthDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_space_to_depth_workload_8cpp_source.html#l00054">54</a> of file <a class="el" href="_cl_space_to_depth_workload_8cpp_source.html">ClSpaceToDepthWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;{</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = descriptor.m_DataLayout;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, dataLayout);</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; int32_t blockSize = armnn::numeric_cast&lt;int32_t&gt;(descriptor.m_BlockSize);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, dataLayout);</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLSpaceToDepthLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; blockSize);</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.html#l01095">SpaceToDepthDescriptor::m_DataLayout</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01497">ClLayerSupport::IsSpaceToDepthSupported()</a>.</p>
</div>
</div>
<a id="a3ac8a60f837b19b20987e4fd238ce0cd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3ac8a60f837b19b20987e4fd238ce0cd">&#9670;&nbsp;</a></span>ClSplitterWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClSplitterWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; std::reference_wrapper&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>outputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>splitAxis</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_splitter_workload_8cpp_source.html#l00032">32</a> of file <a class="el" href="_cl_splitter_workload_8cpp_source.html">ClSplitterWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;{</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">size_t</span> numOutputs = outputs.size();</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; aclOutputs;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; aclOutputs.reserve(numOutputs);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; aclOutputPtr;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; aclOutputPtr.reserve(numOutputs);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0u; i &lt; outputs.size(); ++i)</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; aclOutputs.emplace_back(BuildArmComputeTensorInfo(outputs[i]));</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; aclOutputPtr.emplace_back(&amp;aclOutputs.back());</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; }</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxis = CalcAclAxis(input.GetNumDimensions(), splitAxis);</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> arm_compute::CLSplit::validate(&amp;aclInputInfo, aclOutputPtr, aclAxis);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01509">ClLayerSupport::IsSplitterSupported()</a>.</p>
</div>
</div>
<a id="a34e66b74a990db4b29ea4f904c69d7d9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a34e66b74a990db4b29ea4f904c69d7d9">&#9670;&nbsp;</a></span>ClSqrtWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClSqrtWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_sqrt_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_cl_sqrt_workload_8cpp_source.html">ClSqrtWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; ActivationDescriptor descriptor;</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; descriptor.m_Function = ActivationFunction::Sqrt;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(descriptor);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> arm_compute::CLActivationLayer::validate(&amp;aclInput, &amp;aclOutput, activationLayerInfo);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01032">ClLayerSupport::IsElementwiseUnarySupported()</a>.</p>
</div>
</div>
<a id="a776783e716aa3dd5975c72696d0b7abb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a776783e716aa3dd5975c72696d0b7abb">&#9670;&nbsp;</a></span>ClStackWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClStackWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>inputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_stack_descriptor.html">StackDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_stack_workload_8cpp_source.html#l00029">29</a> of file <a class="el" href="_cl_stack_workload_8cpp_source.html">ClStackWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; aclInputPtrs;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; arm_compute::TensorInfo aclInputInfo;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> TensorInfo* input : inputs)</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; {</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; aclInputInfo = BuildArmComputeTensorInfo(*input);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; aclInputPtrs.emplace_back(&amp;aclInputInfo);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">int</span> aclAxis = CalcAxis(descriptor.m_Axis, descriptor.m_InputShape.GetNumDimensions());</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> arm_compute::CLStackLayer::validate(aclInputPtrs, aclAxis, &amp;aclOutputInfo);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01542">ClLayerSupport::IsStackSupported()</a>.</p>
</div>
</div>
<a id="a157e0508f6d6d08e3ca4cf6c661242e6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a157e0508f6d6d08e3ca4cf6c661242e6">&#9670;&nbsp;</a></span>ClStridedSliceWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClStridedSliceWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.html">StridedSliceDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_strided_slice_workload_8cpp_source.html#l00027">27</a> of file <a class="el" href="_cl_strided_slice_workload_8cpp_source.html">ClStridedSliceWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> strides;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; std::tie(starts, ends, strides) = <a class="code" href="namespacearmnn.html#a21850e0777395246bfd30d95f8ffdd31">SetClStridedSliceData</a>(descriptor.m_Begin, descriptor.m_End, descriptor.m_Stride);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">auto</span> numDimensions = armnn::numeric_cast&lt;int&gt;(input.GetNumDimensions());</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; int32_t begin_mask = <a class="code" href="namespacearmnn.html#ad69ffa576a596b9eb20ab6a41420c541">ConvertMaskToACLFormat</a>(descriptor.m_BeginMask, numDimensions);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; int32_t end_mask = <a class="code" href="namespacearmnn.html#ad69ffa576a596b9eb20ab6a41420c541">ConvertMaskToACLFormat</a>(descriptor.m_EndMask, numDimensions);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; int32_t shrink_axis_mask = <a class="code" href="namespacearmnn.html#ad69ffa576a596b9eb20ab6a41420c541">ConvertMaskToACLFormat</a>(descriptor.m_ShrinkAxisMask, numDimensions);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> arm_compute::CLStridedSlice::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; starts,</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; ends,</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; strides,</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; begin_mask,</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; end_mask,</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; shrink_axis_mask);</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01554">ClLayerSupport::IsStridedSliceSupported()</a>.</p>
</div>
</div>
<a id="afa9933f1d9de469ffba5ba0fcee769f8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afa9933f1d9de469ffba5ba0fcee769f8">&#9670;&nbsp;</a></span>ClSubtractionValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClSubtractionValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_subtraction_workload_8cpp_source.html#l00046">46</a> of file <a class="el" href="_cl_subtraction_workload_8cpp_source.html">ClSubtractionWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLArithmeticSubtraction::validate(&amp;aclInput0Info,</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; &amp;aclInput1Info,</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; g_AclConvertPolicy,</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; activationInfo);</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; </div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00189">ClLayerSupport::IsLayerSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.html#l01566">ClLayerSupport::IsSubtractionSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.html#l00292">ClBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="ac86fc56b9a27576bfe930a7012a402d5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac86fc56b9a27576bfe930a7012a402d5">&#9670;&nbsp;</a></span>ClTensorHandleFactoryId()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::ClTensorHandleFactoryId </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</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.html#l00015">15</a> of file <a class="el" href="_cl_tensor_handle_factory_8hpp_source.html">ClTensorHandleFactory.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;{</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Arm/Cl/TensorHandleFactory&quot;</span>;</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_tensor_handle_factory_8cpp_source.html#l00094">ClTensorHandleFactory::GetIdStatic()</a>.</p>
</div>
</div>
<a id="a44d0d727df44d696742871b343db5757"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a44d0d727df44d696742871b343db5757">&#9670;&nbsp;</a></span>ClTileWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClTileWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_tile_descriptor.html">TileDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_tile_workload_8cpp_source.html#l00016">16</a> of file <a class="el" href="_cl_tile_workload_8cpp_source.html">ClTileWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; std::vector&lt;uint32_t&gt; aclMultiples = descriptor.m_Multiples;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; std::reverse(aclMultiples.begin(),aclMultiples.end());</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">return</span> arm_compute::CLTile::validate(&amp;aclInput, &amp;aclOutput, aclMultiples);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01579">ClLayerSupport::IsTileSupported()</a>.</p>
</div>
</div>
<a id="a719ea81939d6a25f8636b52c59165d66"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a719ea81939d6a25f8636b52c59165d66">&#9670;&nbsp;</a></span>ClTransposeConvolution2dWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClTransposeConvolution2dWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.html">TransposeConvolution2dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>weights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>biases</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_transpose_convolution2d_workload_8cpp_source.html#l00026">26</a> of file <a class="el" href="_cl_transpose_convolution2d_workload_8cpp_source.html">ClTransposeConvolution2dWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; arm_compute::TensorInfo aclBiasesInfo;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">if</span> (!biases.has_value())</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="stringliteral">&quot;ArmNN ClTransposeConv2dWorkload has empty bias value.&quot;</span>};</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; }</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; arm_compute::PadStrideInfo padStrideInfo = BuildArmComputePadStrideInfo(descriptor);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">return</span> arm_compute::CLDeconvolutionLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; &amp;aclWeightsInfo,</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; optionalAclBiasesInfo,</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; padStrideInfo);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01591">ClLayerSupport::IsTransposeConvolution2dSupported()</a>.</p>
</div>
</div>
<a id="a1c3a39fbecb45be0bb15dd665c9be61d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1c3a39fbecb45be0bb15dd665c9be61d">&#9670;&nbsp;</a></span>ClTransposeWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClTransposeWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_transpose_descriptor.html">TransposeDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_transpose_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_cl_transpose_workload_8cpp_source.html">ClTransposeWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.html">armnn::PermutationVector</a>&amp; mappings = descriptor.m_DimMappings;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> arm_compute::CLPermute::validate(&amp;aclInputInfo, &amp;aclOutputInfo,</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; armcomputetensorutils::BuildArmComputeTransposeVector(mappings));</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01607">ClLayerSupport::IsTransposeSupported()</a>.</p>
</div>
</div>
<a id="a096a87912dc4886d0ef6ed192daa5180"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a096a87912dc4886d0ef6ed192daa5180">&#9670;&nbsp;</a></span>ClUnidirectionalSequenceLstmFloatWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status ClUnidirectionalSequenceLstmFloatWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>cellStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>cellStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#ae6c5f1b51bd32133c4dcc632045d6b58">UnidirectionalSequenceLstmDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_input_params_info.html">LstmInputParamsInfo</a> &amp;&#160;</td>
<td class="paramname"><em>paramsInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_unidirectional_sequence_lstm_float_workload_8cpp_source.html#l00508">508</a> of file <a class="el" href="_cl_unidirectional_sequence_lstm_float_workload_8cpp_source.html">ClUnidirectionalSequenceLstmFloatWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160;{</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; TensorShape inputLayerShape = input.GetShape();</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; TensorShape outputLayerShape = output.GetShape();</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; </div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keywordflow">if</span> (inputLayerShape.GetNumDimensions() != 3)</div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; {</div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="stringliteral">&quot;Unidirectional Sequence LSTM layer validate status failed.&quot;</span>);</div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; }</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; </div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxTime = descriptor.m_TimeMajor?inputLayerShape[0]:inputLayerShape[1];</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchSize = descriptor.m_TimeMajor?inputLayerShape[1]:inputLayerShape[0];</div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputSize = inputLayerShape[2];</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputSize = outputLayerShape[2];</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; </div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeInput({maxTime, batchSize, inputSize});</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeOutput({maxTime, batchSize, outputSize});</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; </div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute1 = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="stringliteral">&quot;Permute1 status&quot;</span>);</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusSplit = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="stringliteral">&quot;Split status&quot;</span>);</div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusLSTM = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="stringliteral">&quot;LSTM status&quot;</span>);</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusConcat = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="stringliteral">&quot;Concat status&quot;</span>);</div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute2 = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="stringliteral">&quot;Permute2 status&quot;</span>);</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; </div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; </div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="comment">// Permute validate</span></div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; TensorInfo permuteOutInfo = <a class="code" href="namespacearmnn_utils.html#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(input, { 1U, 0U, 2U });</div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; arm_compute::TensorInfo aclPermuteOutInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permuteOutInfo);</div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; {</div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; statusPermute1 = arm_compute::CLPermute::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; &amp;aclPermuteOutInfo,</div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; }</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; </div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="comment">// Split and Concat Tensors validate</span></div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; splitterOutputsTensorInfos;</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; concatInputsTensorInfos;</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; splitterOutputsTensorInfosPtr;</div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; std::vector&lt;const arm_compute::ITensorInfo*&gt; concatInputsTensorInfosPtr;</div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; splitterOutputsTensorInfos.reserve(maxTime);</div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; concatInputsTensorInfos.reserve(maxTime);</div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; {</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; arm_compute::TensorInfo splitter_out;</div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; arm_compute::TensorInfo concat_in;</div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; </div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keyword">auto</span> splitterTensorInfo = TensorInfo(input);</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="keyword">auto</span> concatTensorInfo = TensorInfo(output);</div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; splitterTensorInfo.SetShape({batchSize, inputSize});</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; concatTensorInfo.SetShape({batchSize, outputSize});</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; </div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; arm_compute::TensorInfo aclSplitterTensorInfo</div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(splitterTensorInfo);</div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; arm_compute::TensorInfo aclConcatTensorInfo</div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(concatTensorInfo);</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; </div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; splitterOutputsTensorInfos.emplace_back(aclSplitterTensorInfo);</div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; concatInputsTensorInfos.emplace_back(aclConcatTensorInfo);</div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; splitterOutputsTensorInfosPtr.emplace_back(&amp;splitterOutputsTensorInfos[i]);</div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; concatInputsTensorInfosPtr.emplace_back(&amp;concatInputsTensorInfos[i]);</div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; }</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; </div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="comment">// Split validate</span></div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numberDimensions = 3;</div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimension = 0; <span class="comment">// splitting on 0-dimension (i.e. maxTime dimension)</span></div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisSplit = CalcAclAxis(numberDimensions, dimension);</div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; </div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <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="l00598"></a><span class="lineno"> 598</span>&#160; {</div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; {</div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; statusSplit = arm_compute::CLSplit::validate(&amp;aclPermuteOutInfo,</div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; splitterOutputsTensorInfosPtr,</div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; aclAxisSplit);</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; }</div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; {</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; statusSplit = arm_compute::CLSplit::validate(&amp;aclInputInfo, splitterOutputsTensorInfosPtr, aclAxisSplit);</div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; }</div>
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; }</div>
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; </div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="comment">// LSTM validate</span></div>
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; </div>
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; lstm_params_info;</div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; </div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numUnits = cellStateIn.GetShape()[1];</div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> scratchBufferFactor = 4;</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; </div>
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordflow">if</span> (descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; {</div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="comment">// scratchBuffer = { batchSize, numUnits * 3 } with CIFG</span></div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; scratchBufferFactor = 3;</div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; }</div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; </div>
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keyword">const</span> TensorInfo&amp; scratchBuffer = TensorInfo({ batchSize, numUnits * scratchBufferFactor }, input.GetDataType());</div>
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; </div>
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="comment">// The inputs and outputs</span></div>
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div>
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div>
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; </div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="comment">// Basic parameters</span></div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div>
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div>
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div>
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div>
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; </div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div>
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div>
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; </div>
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div>
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; </div>
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; </div>
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; {</div>
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div>
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; {</div>
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div>
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; }</div>
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; </div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; lstm_params_info.set_cifg_params(&amp;aclInputToInputWeightsInfo,</div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; &amp;aclRecurrentToInputWeightsInfo,</div>
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; descriptor.m_PeepholeEnabled ? &amp;aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div>
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; &amp;aclInputGateBiasInfo);</div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; </div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; {</div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; {</div>
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; }</div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; </div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; lstm_params_info.set_projection_params(&amp;aclProjectionWeightsInfo,</div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; paramsInfo.m_ProjectionBias ? &amp;aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; }</div>
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; </div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; {</div>
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div>
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div>
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; </div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; lstm_params_info.set_peephole_params(&amp;aclCellToForgetWeightsInfo, &amp;aclCellToOutputWeightsInfo);</div>
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; }</div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; </div>
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; {</div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; {</div>
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div>
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; }</div>
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div>
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div>
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; </div>
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ? <span class="keyword">nullptr</span> :</div>
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; &amp;aclInputLayerNormWeightsInfo,</div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div>
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</div>
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; }</div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; </div>
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="comment">// Need to be set at negative threshold to be compatible for ACL</span></div>
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</div>
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; </div>
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; arm_compute::ActivationLayerInfo activationLayerInfo =</div>
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <a class="code" href="namespacearmnn.html#aa1e93ef5f9ee3dbb5e7faa9578f180ae">ConvertLstmActivationFuncToAclLayerInfo</a>(descriptor.m_ActivationFunc);</div>
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; </div>
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i != maxTime; ++i)</div>
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; {</div>
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; </div>
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="comment">// Set LSTM input and output ITensors depending on:</span></div>
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="comment">// input format (timeMajor) &amp; number of LSTM batches (maxTime).</span></div>
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; arm_compute::ITensorInfo* outputLSTM;</div>
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; arm_compute::ITensorInfo* inputLSTM;</div>
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="comment">// If there is only one LSTM time major batch, we will not concat OR permute.</span></div>
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="comment">// Set input of LSTM to be first input ITensor.</span></div>
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="comment">// Set output of LSTM to be final output ITensor.</span></div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="comment">// LSTM input/output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; !descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; {</div>
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.html#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclInputInfo.tensor_shape(), 1U);</div>
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; TensorShape outputShape = <a class="code" href="namespacearmnn_utils.html#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclOutputInfo.tensor_shape(), 1U);</div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; TensorShape outputShapeShrink({outputShape[1], outputShape[2]});</div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="keyword">auto</span> acl_output_shape_shrink = BuildArmComputeTensorShape(outputShapeShrink);</div>
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(acl_input_shape_shrink);</div>
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; inputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo);</div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo)-&gt;set_tensor_shape(acl_output_shape_shrink);</div>
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo);</div>
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; }</div>
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <span class="comment">// If there is only one LSTM batch major batch, we will not concat, only permute.</span></div>
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <span class="comment">// Set input of LSTM to be output of initial permute.</span></div>
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="comment">// Set output of LSTM to be first element of m_ConcatInputs &amp; use that value later in permute.</span></div>
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="comment">// LSTM output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div>
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; !descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; {</div>
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.html#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclPermuteOutInfo.tensor_shape(), 1U);</div>
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div>
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div>
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; aclPermuteOutInfo.set_tensor_shape(acl_input_shape_shrink);</div>
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; inputLSTM = &amp;aclPermuteOutInfo;</div>
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; }</div>
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="comment">// Batch major AND/OR 2+ LSTM batches so will use concat AND/OR permute later on.</span></div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; {</div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; inputLSTM = splitterOutputsTensorInfosPtr[i];</div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; }</div>
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; </div>
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; statusLSTM = arm_compute::CLLSTMLayer::validate(inputLSTM,</div>
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; &amp;aclInputToForgetWeightsInfo,</div>
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; &amp;aclInputToCellWeightsInfo,</div>
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; &amp;aclInputToOutputWeightsInfo,</div>
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div>
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div>
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div>
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; &amp;aclForgetGateBiasInfo,</div>
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; &amp;aclCellBiasInfo,</div>
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; &amp;aclOutputGateBiasInfo,</div>
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; &amp;aclOutputStateInInfo,</div>
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; &amp;aclCellStateInInfo,</div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; &amp;aclScratchBufferInfo,</div>
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; &amp;aclOutputStateOutInfo,</div>
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; &amp;aclCellStateOutInfo,</div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; outputLSTM,</div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; lstm_params_info,</div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; activationLayerInfo,</div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; cell_threshold,</div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; projection_threshold);</div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; </div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">if</span> (statusLSTM.error_code() != arm_compute::ErrorCode::OK)</div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; {</div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; }</div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; }</div>
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; </div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="comment">// Concat validate</span></div>
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; </div>
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <span class="comment">// Expand dimensions of LSTM outputs adding one empty dimension to fit concatenate inputs.</span></div>
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; TensorShape shape = <a class="code" href="namespacearmnn_utils.html#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(concatInputsTensorInfosPtr[0]-&gt;tensor_shape(), 1U);</div>
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; TensorShape shapeExpandTimeMajor({1, shape[0], shape[1]});</div>
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; TensorShape shapeExpandBatchMajor({shape[0], 1, shape[1]});</div>
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; </div>
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; TensorInfo concatOuputTensorInfo = TensorInfo(output);</div>
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; concatOuputTensorInfo.SetShape(timeMajorShapeOutput);</div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; arm_compute::TensorInfo aclConcatOuputTensorInfo= BuildArmComputeTensorInfo(concatOuputTensorInfo);</div>
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; </div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keywordflow">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="l00815"></a><span class="lineno"> 815</span>&#160; {</div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; {</div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="keyword">auto</span> acl_shape_expand = BuildArmComputeTensorShape(shapeExpandTimeMajor);</div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; concatInputsTensorInfos[i].set_tensor_shape(acl_shape_expand);</div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; }</div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; </div>
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisConcat = CalcAclAxis(numberDimensions, dimension);</div>
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; {</div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; statusConcat = arm_compute::CLConcatenateLayer::validate(concatInputsTensorInfosPtr,</div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; &amp;aclConcatOuputTensorInfo,</div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; aclAxisConcat);</div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; }</div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; {</div>
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; statusConcat = arm_compute::CLConcatenateLayer::validate(concatInputsTensorInfosPtr,</div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; aclAxisConcat);</div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; }</div>
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; }</div>
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="comment">// If only one LSTM batch, we do not concat and/or permute.</span></div>
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="comment">// Must ensure final output info is expanded to correct batch major dimensions.</span></div>
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; {</div>
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; {</div>
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div>
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; BuildArmComputeTensorShape(shapeExpandBatchMajor));</div>
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; }</div>
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; {</div>
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div>
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; BuildArmComputeTensorShape(shapeExpandTimeMajor));</div>
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; }</div>
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; }</div>
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="comment">// Permute validate</span></div>
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; {</div>
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; <span class="comment">// Output now time major. Permute output back to batch major.</span></div>
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; <span class="keywordflow">if</span> (maxTime != 1)</div>
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; {</div>
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; statusPermute2 = arm_compute::CLPermute::validate(&amp;aclConcatOuputTensorInfo,</div>
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div>
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; }</div>
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; {</div>
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; statusPermute2 = arm_compute::CLPermute::validate(concatInputsTensorInfosPtr[0],</div>
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div>
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; }</div>
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; }</div>
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; </div>
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div>
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="keywordflow">if</span> (statusPermute1.error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; statusSplit.error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; statusLSTM .error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; statusConcat.error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; statusPermute2.error_code() == okCode)</div>
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; {</div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="stringliteral">&quot;All Unidirectional Sequence LSTM layer validate status OK.&quot;</span>);</div>
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; }</div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; {</div>
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <span class="stringliteral">&quot;Unidirectional Sequence LSTM layer validate status failed.&quot;</span>);</div>
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; }</div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8cpp_source.html#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, and <a class="el" href="_descriptors_8hpp_source.html#l01154">LstmDescriptor::m_TimeMajor</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l01615">ClLayerSupport::IsUnidirectionalSequenceLstmSupported()</a>.</p>
</div>
</div>
<a id="aec9e2fd5ad76777cb83005a5ed7fe3de"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aec9e2fd5ad76777cb83005a5ed7fe3de">&#9670;&nbsp;</a></span>CollapseLeadingUnitDimensions()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool armnn::CollapseLeadingUnitDimensions </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>out</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_backend_optimization_utils_8hpp_source.html#l00014">14</a> of file <a class="el" href="_neon_backend_optimization_utils_8hpp_source.html">NeonBackendOptimizationUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{</div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDimensions = in.GetNumDimensions();</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; (numDimensions-1); ++i)</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; {</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keywordflow">if</span> (in.GetShape()[i] != 1)</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; {</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; }</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; }</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = in.GetShape()[numDimensions-1];</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; out = in;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; out.SetShape({w});</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, and <a class="el" href="_tensor_8hpp_source.html#l00195">TensorInfo::SetShape()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_backend_optimization_utils_8hpp_source.html#l00087">BuildAddMulAddTensorInfoLists()</a>.</p>
</div>
</div>
<a id="ae91e1849e95350c8e50912a217999eac"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae91e1849e95350c8e50912a217999eac">&#9670;&nbsp;</a></span>Combine() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a> armnn::Combine </td>
<td>(</td>
<td class="paramtype">Arg&#160;</td>
<td class="paramname"><em>source</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Args...&#160;</td>
<td class="paramname"><em>rest</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_memory_sources_8hpp_source.html#l00036">36</a> of file <a class="el" href="_memory_sources_8hpp_source.html">MemorySources.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.html#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a><span class="keyword">&gt;</span>(source) | <a class="code" href="namespacearmnn.html#ae91e1849e95350c8e50912a217999eac">Combine</a>(rest...);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_memory_sources_8hpp_source.html#l00030">Combine()</a>.</p>
</div>
</div>
<a id="a5d94c2125c725df5b619d16db9d4a8e9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5d94c2125c725df5b619d16db9d4a8e9">&#9670;&nbsp;</a></span>Combine() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a> armnn::Combine </td>
<td>(</td>
<td class="paramtype">Arg&#160;</td>
<td class="paramname"><em>sourceA</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Arg&#160;</td>
<td class="paramname"><em>sourceB</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_memory_sources_8hpp_source.html#l00030">30</a> of file <a class="el" href="_memory_sources_8hpp_source.html">MemorySources.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.html#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a><span class="keyword">&gt;</span>(sourceA) | <span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.html#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a><span class="keyword">&gt;</span>(sourceB);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_memory_sources_8hpp_source.html#l00036">Combine()</a>.</p>
</div>
</div>
<a id="a44a3b98b37a25c995aa9e4dae7d7b456"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a44a3b98b37a25c995aa9e4dae7d7b456">&#9670;&nbsp;</a></span>ComputeAclAxis()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int armnn::ComputeAclAxis </td>
<td>(</td>
<td class="paramtype">const int &amp;&#160;</td>
<td class="paramname"><em>armnnAxis</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>tensor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Function to convert ArmNN axis (left to right) to ACL axis (right to left) ranging from [-rank, rank) </p>
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00246">246</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;{</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordtype">int</span> rank = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(tensor.<a class="code" href="classarmnn_1_1_tensor_info.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>());</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; </div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(rank != 0, <span class="stringliteral">&quot;The number of dimensions in this tensor cannot be zero.&quot;</span>);</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(armnnAxis &lt; rank, <span class="stringliteral">&quot;Incompatible value of armnnAxis.&quot;</span>);</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>((-1 * rank) &lt;= armnnAxis, <span class="stringliteral">&quot;Incompatible value of armnnAxis.&quot;</span>);</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; </div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordtype">int</span> sign = (armnnAxis &lt; 0) ? -1 : 1;</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordtype">int</span> aclAxis = sign * rank - 1 - armnnAxis;</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; </div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">return</span> aclAxis;</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>, and <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_gather_workload_8cpp_source.html#l00029">ClGatherWorkload::ClGatherWorkload()</a>, <a class="el" href="_cl_log_softmax_workload_8cpp_source.html#l00028">ClLogSoftmaxWorkload::ClLogSoftmaxWorkload()</a>, <a class="el" href="_cl_softmax_workload_8cpp_source.html#l00028">ClSoftmaxWorkload::ClSoftmaxWorkload()</a>, <a class="el" href="_neon_gather_workload_8cpp_source.html#l00027">NeonGatherWorkload::NeonGatherWorkload()</a>, <a class="el" href="_neon_log_softmax_workload_8cpp_source.html#l00033">NeonLogSoftmaxWorkload::NeonLogSoftmaxWorkload()</a>, and <a class="el" href="_neon_softmax_workload_8cpp_source.html#l00033">NeonSoftmaxWorkload::NeonSoftmaxWorkload()</a>.</p>
</div>
</div>
<a id="a855760e957668804d33c0691a802496e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a855760e957668804d33c0691a802496e">&#9670;&nbsp;</a></span>ComputeConv3DInfo() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">arm_compute::Conv3dInfo armnn::ComputeConv3DInfo </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_convolution3d_descriptor.html">armnn::Convolution3dDescriptor</a>&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>isFastMathEnabled</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Utility function used to setup an arm_compute::Conv3dInfo object from convolution3d descriptor. </p>
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00261">261</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;{</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keyword">const</span> arm_compute::Size3D stride{descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.html#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>, descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.html#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>, descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.html#a5164336f6a1b15be0d434a6bbf7289da">m_StrideZ</a>};</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keyword">const</span> arm_compute::Padding3D padding{descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.html#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>, descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.html#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>,</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.html#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>, descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.html#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>,</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.html#a83ca447892f460dabaa2f87d3dc3db61">m_PadFront</a>, descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.html#a11d5c25face9b54e90f79ee8bdc1d0fb">m_PadBack</a>};</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keyword">const</span> arm_compute::Size3D dilation{descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.html#aa3c6a77a963a98ccb8ea7b8fd008a8c1">m_DilationX</a>, descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.html#a302b688d88dd73cde0fb1faef6679907">m_DilationY</a>, descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.html#a16543bce17aa2e4d6e81c88f74227192">m_DilationZ</a>};</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; </div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo =</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <a class="code" href="namespacearmnn.html#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(activationDescriptor);</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> roundType = arm_compute::DimensionRoundingType::FLOOR;</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; </div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">return</span> arm_compute::Conv3dInfo{stride, padding, activationInfo, dilation, roundType, isFastMathEnabled};</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_arm_compute_utils_8hpp_source.html#l00087">ConvertActivationDescriptorToAclActivationLayerInfo()</a>, <a class="el" href="_descriptors_8hpp_source.html#l00647">Convolution3dDescriptor::m_DilationX</a>, <a class="el" href="_descriptors_8hpp_source.html#l00649">Convolution3dDescriptor::m_DilationY</a>, <a class="el" href="_descriptors_8hpp_source.html#l00651">Convolution3dDescriptor::m_DilationZ</a>, <a class="el" href="_descriptors_8hpp_source.html#l00639">Convolution3dDescriptor::m_PadBack</a>, <a class="el" href="_descriptors_8hpp_source.html#l00635">Convolution3dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.html#l00637">Convolution3dDescriptor::m_PadFront</a>, <a class="el" href="_descriptors_8hpp_source.html#l00629">Convolution3dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.html#l00631">Convolution3dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.html#l00633">Convolution3dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.html#l00641">Convolution3dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.html#l00643">Convolution3dDescriptor::m_StrideY</a>, and <a class="el" href="_descriptors_8hpp_source.html#l00645">Convolution3dDescriptor::m_StrideZ</a>.</p>
</div>
</div>
<a id="a3f2c9ea2505a2cac1d05e17e989aff2b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3f2c9ea2505a2cac1d05e17e989aff2b">&#9670;&nbsp;</a></span>ComputeConv3DInfo() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">arm_compute::Conv3dInfo armnn::ComputeConv3DInfo </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_convolution3d_queue_descriptor.html">armnn::Convolution3dQueueDescriptor</a>&#160;</td>
<td class="paramname"><em>queueDescriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>isFastMathEnabled</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00278">278</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;{</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keyword">auto</span> descriptor = queueDescriptor.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>;</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keyword">const</span> arm_compute::Size3D stride{descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.html#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>, descriptor.m_StrideY, descriptor.m_StrideZ};</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keyword">const</span> arm_compute::Padding3D padding{descriptor.m_PadLeft, descriptor.m_PadRight,</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; descriptor.m_PadTop, descriptor.m_PadBottom,</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; descriptor.m_PadFront, descriptor.m_PadBack};</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keyword">const</span> arm_compute::Size3D dilation{descriptor.m_DilationX, descriptor.m_DilationY, descriptor.m_DilationZ};</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; </div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo =</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <a class="code" href="namespacearmnn.html#abfb0841058a8190d30851f07eca3991f">ConvertAdditionalInfoToAclActivationLayerInfo</a>(queueDescriptor);</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> roundType = arm_compute::DimensionRoundingType::FLOOR;</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; </div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">return</span> arm_compute::Conv3dInfo{stride, padding, activationInfo, dilation, roundType, isFastMathEnabled};</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_arm_compute_utils_8hpp_source.html#l00105">ConvertAdditionalInfoToAclActivationLayerInfo()</a>, <a class="el" href="_workload_data_8hpp_source.html#l00066">QueueDescriptorWithParameters&lt; LayerDescriptor &gt;::m_Parameters</a>, and <a class="el" href="_descriptors_8hpp_source.html#l00641">Convolution3dDescriptor::m_StrideX</a>.</p>
</div>
</div>
<a id="a9d43aa01b882d8776ab9403eea3cf779"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9d43aa01b882d8776ab9403eea3cf779">&#9670;&nbsp;</a></span>ComputeReductionTensorShape()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> armnn::ComputeReductionTensorShape </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; uint32_t &gt; &amp;&#160;</td>
<td class="paramname"><em>vAxis</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const bool&#160;</td>
<td class="paramname"><em>keepDims</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Function to compute the output tensor shape based on the axes and if keepDims is set. </p>
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00320">320</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;{</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keyword">auto</span> reducedTensorInfo = input;</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rank = reducedTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputRank = 0;</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="comment">// Calculate output dimension</span></div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">if</span> (keepDims)</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; {</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; outputRank = rank;</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; }</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (vAxis.empty())</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; {</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; outputRank = 1;</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; }</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (vAxis.size() &gt; reducedTensorInfo.GetNumDimensions())</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">throw</span> LayerValidationException(<span class="stringliteral">&quot;ReduceLayer: Dimensions to reduce can not be bigger than input dimensions&quot;</span>);</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; }</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; {</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; outputRank = reducedTensorInfo.GetNumDimensions() - armnn::numeric_cast&lt;unsigned int&gt;(vAxis.size());</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">if</span> (outputRank == 0)</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; {</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; outputRank = 1;</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; }</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; std::vector&lt;unsigned int&gt; dimSizes(outputRank, 1);</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">if</span> (!vAxis.empty())</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; {</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="comment">// Skip the dimension that has been reduced unless keepDims is true.</span></div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputIndex = 0;</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; reducedTensorInfo.GetNumDimensions(); ++i)</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; {</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">if</span> (std::find(vAxis.begin(), vAxis.end(), i) == vAxis.end())</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; {</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; dimSizes[outputIndex] = armnn::numeric_cast&lt;unsigned int&gt;(reducedTensorInfo.GetShape()[i]);</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; ++outputIndex;</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; }</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (keepDims)</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; {</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; dimSizes[outputIndex] = 1;</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; ++outputIndex;</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; }</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; }</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; }</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keyword">const</span> TensorShape inferredShape = TensorShape(outputRank, dimSizes.data());</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; reducedTensorInfo.SetShape(inferredShape);</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">return</span> reducedTensorInfo;</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00278">ChainReduceLayers()</a>.</p>
</div>
</div>
<a id="ae33fcc729c3eeda77a443a11f13da7ba"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae33fcc729c3eeda77a443a11f13da7ba">&#9670;&nbsp;</a></span>ComputeSoftmaxAclAxis()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">T armnn::ComputeSoftmaxAclAxis </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_softmax_descriptor.html">SoftmaxDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>softmaxDesc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>tensor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00227">227</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;{</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <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="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">if</span> (softmaxDesc.m_Axis == -1)</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; {</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; }</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; </div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim = tensor.<a class="code" href="classarmnn_1_1_tensor_info.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(dim != 0, <span class="stringliteral">&quot;The number of dimensions in this tensor cannot be zero.&quot;</span>);</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; </div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="comment">// Currently ArmNN support axis 1.</span></div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keyword">auto</span> aclAxis = (<span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(dim) - 1);</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; aclAxis = aclAxis &gt; 0 ? aclAxis -1 : aclAxis;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; </div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">return</span> aclAxis;</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>, <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, and <a class="el" href="_descriptors_8hpp_source.html#l00192">SoftmaxDescriptor::m_Axis</a>.</p>
</div>
</div>
<a id="a2f68926d52d1aa3590bd467e041def05"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2f68926d52d1aa3590bd467e041def05">&#9670;&nbsp;</a></span>ComputeSplitAxis()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::set&lt; unsigned int &gt; ComputeSplitAxis </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#a60291543fe872b795e71e05bcd835fd1">armnn::SplitterDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>desc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Calculates the axis values for split operation. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">desc</td><td>- Splitter Descriptor </td></tr>
<tr><td class="paramname">input</td><td>- Input tensor shape </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>- A set containing axis values of slitter operation </dd></dl>
<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.html#l00377">377</a> of file <a class="el" href="_workload_utils_8cpp_source.html">WorkloadUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;{</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numSplit = desc.<a class="code" href="structarmnn_1_1_views_descriptor.html#a35546e7b56e6e972a495b48748478ede">GetNumViews</a>();</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDimensions = desc.<a class="code" href="structarmnn_1_1_views_descriptor.html#a78e8266be865fdd92cadd04d6e25ae1f">GetNumDimensions</a>();</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; std::set&lt;unsigned int&gt; splitAxis;</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">if</span> (desc.<a class="code" href="structarmnn_1_1_views_descriptor.html#a0863c05ae66572108c23853f8f003b55">HasAxis</a>())</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; {</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; splitAxis.insert(<a class="code" href="namespacearmnn_utils.html#ac93cb1365b4bcb67df2a3164606096c5">armnnUtils::GetUnsignedAxis</a>(desc.<a class="code" href="structarmnn_1_1_views_descriptor.html#a78e8266be865fdd92cadd04d6e25ae1f">GetNumDimensions</a>(), desc.<a class="code" href="structarmnn_1_1_views_descriptor.html#a109d4dc452ce677b1e0791cb2a6b781e">GetAxis</a>()));</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; }</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; {</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numSplit; ++i)</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; {</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimIdx = 0; dimIdx &lt; numDimensions; ++dimIdx)</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; {</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">if</span> (desc.<a class="code" href="structarmnn_1_1_views_descriptor.html#a3c1ab47a0a319413b3a4b5757ed5b80b">GetViewSizes</a>(i)[dimIdx] != input[dimIdx])</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; {</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; splitAxis.insert(dimIdx);</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; }</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; }</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; }</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; }</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">return</span> splitAxis;</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8cpp_source.html#l00382">ViewsDescriptor::GetAxis()</a>, <a class="el" href="_descriptors_8cpp_source.html#l00307">ViewsDescriptor::GetNumDimensions()</a>, <a class="el" href="_descriptors_8cpp_source.html#l00302">ViewsDescriptor::GetNumViews()</a>, <a class="el" href="_tensor_utils_8cpp_source.html#l00236">armnnUtils::GetUnsignedAxis()</a>, <a class="el" href="_descriptors_8cpp_source.html#l00347">ViewsDescriptor::GetViewSizes()</a>, and <a class="el" href="_descriptors_8cpp_source.html#l00388">ViewsDescriptor::HasAxis()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_splitter_workload_8cpp_source.html#l00056">ClSplitterWorkload::ClSplitterWorkload()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01594">NeonLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.html#l01509">ClLayerSupport::IsSplitterSupported()</a>, and <a class="el" href="_neon_splitter_workload_8cpp_source.html#l00057">NeonSplitterWorkload::NeonSplitterWorkload()</a>.</p>
</div>
</div>
<a id="a83b1d61a12c9e1911c2b6d79c35ef551"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a83b1d61a12c9e1911c2b6d79c35ef551">&#9670;&nbsp;</a></span>Concatenate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Concatenate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_concat_queue_descriptor.html">ConcatQueueDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> * &gt;&#160;</td>
<td class="paramname"><em>inputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> * &gt;&#160;</td>
<td class="paramname"><em>outputs</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_concatenate_8cpp_source.html#l00014">14</a> of file <a class="el" href="_concatenate_8cpp_source.html">Concatenate.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">const</span> TensorInfo&amp; outputInfo0 = <a class="code" href="namespacearmnn_utils.html#acee63cd08da47910fc166a1990988fa8">GetTensorInfo</a>(outputs[0]);</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; std::unique_ptr&lt;Encoder&lt;float&gt;&gt; encoderPtr = MakeEncoder&lt;float&gt;(outputInfo0, outputs[0]-&gt;<a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>());</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; Encoder&lt;float&gt;&amp; encoder = *encoderPtr;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = 0 ; index &lt; outputInfo0.GetNumElements(); ++index)</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indices[<a class="code" href="namespacearmnn.html#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>] = { 0 };</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexRemainder = index;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimensionStride = outputInfo0.GetNumElements();</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; outputInfo0.GetNumDimensions(); i++)</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; dimensionStride /= outputInfo0.GetShape()[i];</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; indices[i] = indexRemainder / dimensionStride; <span class="comment">// Use integer division to round down.</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; indexRemainder -= indices[i] * dimensionStride;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; }</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> viewIdx = 0; viewIdx &lt; data.m_ViewOrigins.size(); ++viewIdx)</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; ConcatQueueDescriptor::ViewOrigin <span class="keyword">const</span>&amp; view = data.m_ViewOrigins[viewIdx];</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">//Split view extents are defined by the size of (the corresponding) input tensor.</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">const</span> TensorInfo&amp; inputInfo = <a class="code" href="namespacearmnn_utils.html#acee63cd08da47910fc166a1990988fa8">GetTensorInfo</a>(inputs[viewIdx]);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; inputInfo.GetNumDimensions() == outputInfo0.GetNumDimensions(),</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="stringliteral">&quot;The number of output dimensions does not match the number of input dimensions.&quot;</span>);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="comment">// Check all dimensions to see if this element is inside the given input view.</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">bool</span> insideView = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; inputInfo.GetNumDimensions(); i++)</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (indices[i] &lt; view.m_Origin[i])</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; insideView = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">if</span> (indices[i] &gt;= view.m_Origin[i] + inputInfo.GetShape()[i])</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; {</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; insideView = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">if</span> (insideView)</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; std::unique_ptr&lt;Decoder&lt;float&gt;&gt; decoderPtr =</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; MakeDecoder&lt;float&gt;(inputInfo,inputs[viewIdx]-&gt;<a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>());</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; Decoder&lt;float&gt;&amp; decoder = *decoderPtr;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inIndex = 0;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimensionStride = 1;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = inputInfo.GetNumDimensions(); i-- &gt; 0;)</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; inIndex += dimensionStride * (indices[i] - view.m_Origin[i]);</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; dimensionStride *= inputInfo.GetShape()[i];</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; decoder += inIndex;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; encoder.Set(decoder.Get());</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">//What should we do if input views overlap on the output tensor?</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">//We could error, take the average, or shm else...</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="comment">//For now just stop after finding first view (input) that matches.</span></div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; ++encoder;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>, <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00198">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_ref_workload_utils_8hpp_source.html#l00033">GetTensorInfo()</a>, <a class="el" href="_workload_data_8hpp_source.html#l00138">ConcatQueueDescriptor::ViewOrigin::m_Origin</a>, <a class="el" href="_workload_data_8hpp_source.html#l00143">ConcatQueueDescriptor::m_ViewOrigins</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>, <a class="el" href="_types_8hpp_source.html#l00031">MaxNumOfTensorDimensions</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="a6ed414c05eb6d4c89e0e4a475a0479c0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ed414c05eb6d4c89e0e4a475a0479c0">&#9670;&nbsp;</a></span>ConditionalThrow() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::ConditionalThrow </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>condition</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_exceptions_8hpp_source.html#l00174">174</a> of file <a class="el" href="_exceptions_8hpp_source.html">Exceptions.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;{</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">if</span> (!condition)</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; {</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">throw</span> ExceptionType();</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ae4ab3bf0697ad13316a6bcba0a8fade5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae4ab3bf0697ad13316a6bcba0a8fade5">&#9670;&nbsp;</a></span>ConditionalThrow() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::ConditionalThrow </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>condition</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>message</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_exceptions_8hpp_source.html#l00165">165</a> of file <a class="el" href="_exceptions_8hpp_source.html">Exceptions.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;{</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">if</span> (!condition)</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; {</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">throw</span> ExceptionType(message);</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; }</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ae57b7f9e2cb7080bf10b28d1f72b558e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae57b7f9e2cb7080bf10b28d1f72b558e">&#9670;&nbsp;</a></span>ConditionalThrowIfNotEqual()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::ConditionalThrowIfNotEqual </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>message</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const ComparedType &amp;&#160;</td>
<td class="paramname"><em>leftHandSide</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const ComparedType &amp;&#160;</td>
<td class="paramname"><em>rightHandSide</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>ComparedType must support: operator==(const ComparedType&amp;) operator&lt;&lt;(ostream&amp;, const ComparedType&amp;) </p>
<p class="definition">Definition at line <a class="el" href="_exceptions_8hpp_source.html#l00189">189</a> of file <a class="el" href="_exceptions_8hpp_source.html">Exceptions.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;{</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span> (!(leftHandSide == rightHandSide))</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; {</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; std::stringstream ss;</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; ss &lt;&lt; message &lt;&lt; <span class="stringliteral">&quot; : &quot;</span> &lt;&lt; leftHandSide &lt;&lt; <span class="stringliteral">&quot; != &quot;</span> &lt;&lt; rightHandSide;</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">throw</span> ExceptionType(ss.str());</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ae9034dd6e9c5bed6badf4f7513339f74"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae9034dd6e9c5bed6badf4f7513339f74">&#9670;&nbsp;</a></span>ConfigureDetailsObject()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::ConfigureDetailsObject </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_json_child_object.html">JsonChildObject</a> &amp;&#160;</td>
<td class="paramname"><em>detailsObject</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::string&#160;</td>
<td class="paramname"><em>layerDetailsStr</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.html#l00306">306</a> of file <a class="el" href="_profiling_8cpp_source.html">Profiling.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;{</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; detailsObject.SetType(JsonObjectType::ExecObjectDesc);</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; detailsObject.SetAndParseDetails(layerDetailsStr);</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; </div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a4e2dd387ba6f0dc5164b4cdf8de3262aaf7a45ae663528701f33ee482ce67af62">ExecObjectDesc</a>, <a class="el" href="_json_printer_8hpp_source.html#l00044">JsonChildObject::SetAndParseDetails()</a>, and <a class="el" href="_json_printer_8hpp_source.html#l00079">JsonChildObject::SetType()</a>.</p>
</div>
</div>
<a id="aa59f7a819c3e29d10ffc41e5c0616872"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa59f7a819c3e29d10ffc41e5c0616872">&#9670;&nbsp;</a></span>ConfigureLogging()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void ConfigureLogging </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>printToStandardOutput</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>printToDebugOutput</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a>&#160;</td>
<td class="paramname"><em>severity</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Configures the logging behaviour of the ARMNN library. </p>
<p>printToStandardOutput: Set to true if log messages should be printed to the standard output. printToDebugOutput: Set to true if log messages be printed to a platform-specific debug output (where supported). severity: All log messages that are at this severity level or higher will be printed, others will be ignored. </p>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="_async_execution_sample_8cpp-example.html#a1">AsyncExecutionSample.cpp</a>, <a class="el" href="_custom_memory_allocator_sample_8cpp-example.html#a7">CustomMemoryAllocatorSample.cpp</a>, and <a class="el" href="_simple_sample_8cpp-example.html#a1">SimpleSample.cpp</a>.</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="_utils_8cpp_source.html#l00020">20</a> of file <a class="el" href="_utils_8cpp_source.html">Utils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <a class="code" href="namespacearmnn.html#a7f8325a4bc02f2f687ba1968b595ec0a">SetAllLoggingSinks</a>(printToStandardOutput, printToDebugOutput, <span class="keyword">false</span>);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="namespacearmnn.html#ac9aad76a34137b6359a867b282ea7cfb">SetLogFilter</a>(severity);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_logging_8cpp_source.html#l00191">SetAllLoggingSinks()</a>, and <a class="el" href="_logging_8cpp_source.html#l00073">SetLogFilter()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_armnn_device_8cpp_source.html#l00042">ArmnnDevice::ArmnnDevice()</a>, <a class="el" href="_unit_tests_8hpp_source.html#l00022">ConfigureLoggingTest()</a>, and <a class="el" href="_armnn_converter_8cpp_source.html#l00329">main()</a>.</p>
</div>
</div>
<a id="ab562537b5c1ef1e6cde9db9f5fa322bd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab562537b5c1ef1e6cde9db9f5fa322bd">&#9670;&nbsp;</a></span>ConfigureTuner()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void armnn::ConfigureTuner </td>
<td>(</td>
<td class="paramtype">arm_compute::CLTuner &amp;&#160;</td>
<td class="paramname"><em>tuner</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a>&#160;</td>
<td class="paramname"><em>level</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_tuning_utils_8hpp_source.html#l00044">44</a> of file <a class="el" href="_arm_compute_tuning_utils_8hpp_source.html">ArmComputeTuningUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; tuner.set_tune_new_kernels(<span class="keyword">true</span>); <span class="comment">// Turn on tuning initially.</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">switch</span> (level)</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">case</span> TuningLevel::Rapid:</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;Gpu tuning is activated. TuningLevel: Rapid (1)&quot;</span>;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; tuner.set_tuner_mode(arm_compute::CLTunerMode::RAPID);</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">case</span> TuningLevel::Normal:</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;Gpu tuning is activated. TuningLevel: Normal (2)&quot;</span>;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; tuner.set_tuner_mode(arm_compute::CLTunerMode::NORMAL);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">case</span> TuningLevel::Exhaustive:</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;Gpu tuning is activated. TuningLevel: Exhaustive (3)&quot;</span>;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; tuner.set_tuner_mode(arm_compute::CLTunerMode::EXHAUSTIVE);</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">case</span> TuningLevel::None:</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; tuner.set_tune_new_kernels(<span class="keyword">false</span>); <span class="comment">// Turn off tuning. Set to &quot;use&quot; only mode.</span></div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_logging_8hpp_source.html#l00212">ARMNN_LOG</a>, <a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f">Exhaustive</a>, <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754">None</a>, <a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0">Normal</a>, and <a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68">Rapid</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_backend_context_8cpp_source.html#l00061">ClBackendContext::ClBackendContext()</a>, and <a class="el" href="_gpu_fsa_backend_context_8cpp_source.html#l00061">GpuFsaBackendContext::GpuFsaBackendContext()</a>.</p>
</div>
</div>
<a id="a4f89a6ce848b8d9787761cdd1dbb751a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4f89a6ce848b8d9787761cdd1dbb751a">&#9670;&nbsp;</a></span>ConnectedToLayerType()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool armnn::ConnectedToLayerType </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td>
<td class="paramname"><em>layerType</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>dimSize</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks the <a class="el" href="classarmnn_1_1_layer.html">Layer</a>'s Connections to see if it's connected to a <a class="el" href="classarmnn_1_1_layer.html">Layer</a> with the provided layerType. </p>
<p>If dimSize is provided will also check if the connecting <a class="el" href="classarmnn_1_1_tensor.html" title="A tensor defined by a TensorInfo (shape and data type) and a mutable backing store.">Tensor</a> has more than that number of dimensions </p>
<p class="definition">Definition at line <a class="el" href="_subgraph_utils_8hpp_source.html#l00271">271</a> of file <a class="el" href="_subgraph_utils_8hpp_source.html">SubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;{</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; Layer&amp; parentLayer = baseLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetOwningLayer();</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; TensorInfo parentTensorInfo = baseLayer-&gt;GetInputSlot(0).GetTensorInfo();</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; </div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">if</span> (parentTensorInfo.GetNumDimensions() &gt; dimSize &amp;&amp; parentLayer.GetType() == layerType)</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; {</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; }</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; baseLayer-&gt;GetOutputSlot(0).GetNumConnections(); ++i)</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; Layer&amp; nextLayer = baseLayer-&gt;GetOutputSlot(0).GetConnection(i)-&gt;GetOwningLayer();</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; TensorInfo nextTensorInfo = baseLayer-&gt;GetOutputSlot(0).GetConnection(i)-&gt;GetTensorInfo();</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; </div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">if</span> (nextTensorInfo.GetNumDimensions() &gt; dimSize &amp;&amp; nextLayer.GetType() == layerType)</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; {</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; }</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; }</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_layer_8hpp_source.html#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.html#l00083">OutputSlot::GetConnection()</a>, <a class="el" href="_layer_8hpp_source.html#l00337">Layer::GetInputSlot()</a>, <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_layer_8hpp_source.html#l00339">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00053">InputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_8hpp_source.html#l00132">OutputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_8cpp_source.html#l00614">InputSlot::GetTensorInfo()</a>, and <a class="el" href="_layer_8hpp_source.html#l00286">Layer::GetType()</a>.</p>
</div>
</div>
<a id="ac5089a2ee61f22570982e7a56588365a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac5089a2ee61f22570982e7a56588365a">&#9670;&nbsp;</a></span>ConnectedToLayerWithNCHW()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool armnn::ConnectedToLayerWithNCHW </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks if the <a class="el" href="classarmnn_1_1_layer.html">Layer</a> is connected to any <a class="el" href="classarmnn_1_1_layer.html">Layer</a> that has an NCHW layout. </p>
<p class="definition">Definition at line <a class="el" href="_subgraph_utils_8hpp_source.html#l00250">250</a> of file <a class="el" href="_subgraph_utils_8hpp_source.html">SubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;{</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; Layer&amp; parentLayer = baseLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetOwningLayer();</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; </div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#ab6b4f5f3473b0ce4b241d454f8cbdd26">IsNCHW</a>(parentLayer))</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; {</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; }</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; baseLayer-&gt;GetOutputSlot(0).GetNumConnections(); ++i)</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; Layer&amp; nextLayer = baseLayer-&gt;GetOutputSlot(0).GetConnection(i)-&gt;GetOwningLayer();</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#ab6b4f5f3473b0ce4b241d454f8cbdd26">IsNCHW</a>(nextLayer))</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; {</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; }</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_layer_8hpp_source.html#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.html#l00083">OutputSlot::GetConnection()</a>, <a class="el" href="_layer_8hpp_source.html#l00337">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00339">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00053">InputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_8hpp_source.html#l00132">OutputSlot::GetOwningLayer()</a>, and <a class="el" href="_subgraph_utils_8hpp_source.html#l00213">IsNCHW()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_backend_8cpp_source.html#l00144">NeonBackend::OptimizeSubgraphView()</a>, and <a class="el" href="_cl_backend_8cpp_source.html#l00292">ClBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="ac4aa9e41515b354234645f115c49de32"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac4aa9e41515b354234645f115c49de32">&#9670;&nbsp;</a></span>Convert1HWOTensorInfoToAcl()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::tuple&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a>, unsigned int &gt; Convert1HWOTensorInfoToAcl </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>weightInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
<td class="paramname"><em>dataLayout</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Weights for depthwise have a datalayout of [1,H,W,O] = [1,H,W,I*M] This function coverts a <a class="el" href="classarmnn_1_1_tensor_info.html">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.html#l00177">177</a> of file <a class="el" href="_workload_utils_8cpp_source.html">WorkloadUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;{</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclDepthMultiplier = 1;</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; TensorInfo weightsPermuted;</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">if</span> (dataLayout == <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="comment">// No permutation required. Input and weights data layouts are the same.</span></div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; aclDepthMultiplier = weightInfo.GetShape()[3] / inputInfo.GetShape()[3];</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; weightsPermuted = weightInfo;</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; }</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; </div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dataLayout == <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>)</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; {</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="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="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// [ 1, H, W, I*M] --&gt; [ 1, I * M, H, W ]</span></div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; aclDepthMultiplier = weightInfo.GetShape()[3] / inputInfo.GetShape()[1];</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; PermutationVector permutationVector{ 0, 2, 3, 1 };</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; weightsPermuted = <a class="code" href="namespacearmnn_utils.html#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(weightInfo, permutationVector);</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; {</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(fmt::format(<span class="stringliteral">&quot;Unknown data layout for tensor info conversion: {}&quot;</span>,</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <a class="code" href="namespacearmnn.html#aeef70b7611ae71e97ab55c75ef72b210">GetDataLayoutName</a>(dataLayout)));</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; }</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; </div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">return</span> std::make_tuple(weightsPermuted, aclDepthMultiplier);</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_types_utils_8hpp_source.html#l00253">GetDataLayoutName()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>, and <a class="el" href="_permute_8cpp_source.html#l00125">armnnUtils::Permuted()</a>.</p>
</div>
</div>
<a id="af35f79341ec6c10a8bd4c8caf0585ffb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af35f79341ec6c10a8bd4c8caf0585ffb">&#9670;&nbsp;</a></span>Convert1HWOTensorToAcl()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::tuple&lt; <a class="el" href="classarmnn_1_1_const_tensor.html">ConstTensor</a>, unsigned int &gt; Convert1HWOTensorToAcl </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_const_tensor_handle.html">ConstTensorHandle</a> *&#160;</td>
<td class="paramname"><em>weightTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
<td class="paramname"><em>dataLayout</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>permuteBuffer</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Weights for depthwise have a datalayout of [1,H,W,O] = [1,H,W,I*M] This function coverts a ConstCpuTensorHandle from [1,H,W,I*M] to [1,I*M,H,W] (if NCHW) or keeps it at [1,H,W,I*M] (if NHWC) as required by the compute library. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">weightTensor</td><td>- <a class="el" href="classarmnn_1_1_const_tensor_handle.html">ConstTensorHandle</a> of weights tensor </td></tr>
<tr><td class="paramname">inputInfo</td><td>- <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> of input tensor </td></tr>
<tr><td class="paramname">dataLayout</td><td>- DataLayout of the input tensor </td></tr>
<tr><td class="paramname">permuteBuffer</td><td>- Pointer to memory with the size of tensor. Used for the permutation </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>tuple of transformed weights-ConstTensor and depthwise multiplier </dd></dl>
<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.html#l00146">146</a> of file <a class="el" href="_workload_utils_8cpp_source.html">WorkloadUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;{</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; TensorInfo weightsInfo = weightTensor-&gt;GetTensorInfo();</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> depthMultiplier = 1;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; PermutationVector permutationVector{};</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">if</span> (dataLayout == <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="comment">// No permutation required. Data layouts are the same.</span></div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; </div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; depthMultiplier = weightsInfo.GetShape()[3] / inputInfo.GetShape()[3];</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dataLayout == <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>)</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; {</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="comment">// [ 1, H, W, I*M] --&gt; [ 1, I * M, H, W ]</span></div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; depthMultiplier = weightsInfo.GetShape()[3] / inputInfo.GetShape()[1];</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; permutationVector = { 0, 2, 3, 1 };</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; }</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(fmt::format(<span class="stringliteral">&quot;Unknown data layout for tensor conversion: {}&quot;</span>,</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="namespacearmnn.html#aeef70b7611ae71e97ab55c75ef72b210">GetDataLayoutName</a>(dataLayout)));</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; }</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; </div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; ConstTensor weightsPermuted = <a class="code" href="namespacearmnn.html#aafe6180ef80d9f334f3a3ba9cc0db35d">PermuteTensor</a>(weightTensor, permutationVector, permuteBuffer);</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; </div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">return</span> std::make_tuple(weightsPermuted, depthMultiplier);</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_types_utils_8hpp_source.html#l00253">GetDataLayoutName()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_tensor_handle_8hpp_source.html#l00040">ConstTensorHandle::GetTensorInfo()</a>, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>, and <a class="el" href="_workload_utils_8cpp_source.html#l00019">PermuteTensor()</a>.</p>
</div>
</div>
<a id="aa22a82f5240a0eb0d61135345080aa2d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa22a82f5240a0eb0d61135345080aa2d">&#9670;&nbsp;</a></span>Convert1HWOtoMIHW()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::tuple&lt; <a class="el" href="classarmnn_1_1_const_tensor.html">ConstTensor</a>, unsigned int &gt; Convert1HWOtoMIHW </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_const_tensor_handle.html">ConstTensorHandle</a> *&#160;</td>
<td class="paramname"><em>weightTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> &amp;&#160;</td>
<td class="paramname"><em>dataLayout</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>permuteBuffer</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Converts a (weights) tensor from [1, H, W, I*M] = [1, H, W, O] to [M, I, H, W]. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">weightTensor</td><td>- <a class="el" href="classarmnn_1_1_const_tensor_handle.html">ConstTensorHandle</a> of the weight tensor that should be converted </td></tr>
<tr><td class="paramname">inputInfo</td><td>- <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> of the corresponding input tensor </td></tr>
<tr><td class="paramname">dataLayout</td><td>- DataLayout of the input tensor e.g. NHWC or NCHW </td></tr>
<tr><td class="paramname">permuteBuffer</td><td>- Memory location with the same size as the weight tensor to write converted data to </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>- A tuple of <a class="el" href="classarmnn_1_1_const_tensor.html" 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.html#l00208">208</a> of file <a class="el" href="_workload_utils_8cpp_source.html">WorkloadUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;{</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; TensorInfo weightsInfo = weightTensor-&gt;GetTensorInfo();</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; </div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">if</span> (weightsInfo.HasPerAxisQuantization())</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; {</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Can&#39;t convert tensor from [1,H,W,Cout] to [M,Cin,H,W] when per channel &quot;</span></div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="stringliteral">&quot;quantization is applied.&quot;</span>);</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; }</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; </div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="comment">// Reshape weights [ 1, H, W, I*M ] --&gt; [ H, W, I, M ]</span></div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keyword">auto</span> weightsShape = weightsInfo.GetShape();</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keyword">auto</span> channelIndex = <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html">armnnUtils::DataLayoutIndexed</a>(dataLayout).<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>();</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> depthMultiplier = weightsShape[3] / inputInfo.GetShape()[channelIndex];</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; weightsInfo.SetShape({ weightsShape[1],</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; weightsShape[2],</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; inputInfo.GetShape()[channelIndex],</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; depthMultiplier});</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; </div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="comment">// Permute [ H, W, I, M ] --&gt; [ M, I, H, W ]</span></div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; PermutationVector permutationVector = { 2, 3, 1, 0 };</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; ConstTensor weightsPermuted = <a class="code" href="namespacearmnn.html#aafe6180ef80d9f334f3a3ba9cc0db35d">PermuteTensor</a>(weightTensor, permutationVector, permuteBuffer);</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; </div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">return</span> std::make_tuple(weightsPermuted, depthMultiplier);</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_data_layout_indexed_8hpp_source.html#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_tensor_handle_8hpp_source.html#l00040">ConstTensorHandle::GetTensorInfo()</a>, <a class="el" href="_tensor_8cpp_source.html#l00446">TensorInfo::HasPerAxisQuantization()</a>, <a class="el" href="_workload_utils_8cpp_source.html#l00019">PermuteTensor()</a>, and <a class="el" href="_tensor_8hpp_source.html#l00195">TensorInfo::SetShape()</a>.</p>
</div>
</div>
<a id="ad701d0d29baa4266ab4d33b090aa661c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad701d0d29baa4266ab4d33b090aa661c">&#9670;&nbsp;</a></span>ConvertActivationDescriptorToAclActivationLayerInfo() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">arm_compute::ActivationLayerInfo armnn::ConvertActivationDescriptorToAclActivationLayerInfo </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>actDesc</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00087">87</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;{</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(<a class="code" href="namespacearmnn.html#afdba36f125621d775d471f0daf613df2">ConvertActivationFunctionToAclActivationFunction</a>(actDesc.m_Function),</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; actDesc.m_A, actDesc.m_B);</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_arm_compute_utils_8hpp_source.html#l00062">ConvertActivationFunctionToAclActivationFunction()</a>, <a class="el" href="_descriptors_8hpp_source.html#l00061">ActivationDescriptor::m_A</a>, <a class="el" href="_descriptors_8hpp_source.html#l00063">ActivationDescriptor::m_B</a>, and <a class="el" href="_descriptors_8hpp_source.html#l00059">ActivationDescriptor::m_Function</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_activation_workload_8cpp_source.html#l00032">ClActivationWorkload::ClActivationWorkload()</a>, <a class="el" href="_cl_sqrt_workload_8cpp_source.html#l00032">ClSqrtWorkload::ClSqrtWorkload()</a>, <a class="el" href="_arm_compute_utils_8hpp_source.html#l00261">ComputeConv3DInfo()</a>, <a class="el" href="_arm_compute_utils_8hpp_source.html#l00094">ConvertActivationDescriptorToAclActivationLayerInfo()</a>, <a class="el" href="_arm_compute_utils_8hpp_source.html#l00105">ConvertAdditionalInfoToAclActivationLayerInfo()</a>, <a class="el" href="_arm_compute_utils_8hpp_source.html#l00194">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo()</a>, <a class="el" href="_neon_activation_workload_8cpp_source.html#l00032">NeonActivationWorkload::NeonActivationWorkload()</a>, and <a class="el" href="_neon_sqrt_workload_8cpp_source.html#l00031">NeonSqrtWorkload::NeonSqrtWorkload()</a>.</p>
</div>
</div>
<a id="af6d517245110f6b1ca702da0cbbf4518"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af6d517245110f6b1ca702da0cbbf4518">&#9670;&nbsp;</a></span>ConvertActivationDescriptorToAclActivationLayerInfo() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">arm_compute::ActivationLayerInfo armnn::ConvertActivationDescriptorToAclActivationLayerInfo </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescPtr</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00094">94</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;{</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">if</span> (activationDescPtr != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; {</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(<span class="keyword">static_cast&lt;</span>ActivationDescriptor<span class="keyword">&gt;</span>(</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; *activationDescPtr));</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo();</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_arm_compute_utils_8hpp_source.html#l00087">ConvertActivationDescriptorToAclActivationLayerInfo()</a>.</p>
</div>
</div>
<a id="afdba36f125621d775d471f0daf613df2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afdba36f125621d775d471f0daf613df2">&#9670;&nbsp;</a></span>ConvertActivationFunctionToAclActivationFunction()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">arm_compute::ActivationLayerInfo::ActivationFunction armnn::ConvertActivationFunctionToAclActivationFunction </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a>&#160;</td>
<td class="paramname"><em>armnnFunction</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00062">62</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;{</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">using</span> AclActivationFunction = <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9ea">arm_compute::ActivationLayerInfo::ActivationFunction</a>;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">switch</span> (armnnFunction)</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Linear: <span class="keywordflow">return</span> AclActivationFunction::LINEAR;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// Arm compute&#39;s &#39;logistic&#39; function is non-parameterized, so it is exactly a sigmoid function.</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Sigmoid: <span class="keywordflow">return</span> AclActivationFunction::LOGISTIC;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">case</span> ActivationFunction::ReLu: <span class="keywordflow">return</span> AclActivationFunction::RELU;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">case</span> ActivationFunction::BoundedReLu: <span class="keywordflow">return</span> AclActivationFunction::LU_BOUNDED_RELU;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">case</span> ActivationFunction::SoftReLu: <span class="keywordflow">return</span> AclActivationFunction::SOFT_RELU;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">case</span> ActivationFunction::LeakyReLu: <span class="keywordflow">return</span> AclActivationFunction::LEAKY_RELU;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Abs: <span class="keywordflow">return</span> AclActivationFunction::ABS;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Sqrt: <span class="keywordflow">return</span> AclActivationFunction::SQRT;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Square: <span class="keywordflow">return</span> AclActivationFunction::SQUARE;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">case</span> ActivationFunction::TanH: <span class="keywordflow">return</span> AclActivationFunction::TANH;</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Elu: <span class="keywordflow">return</span> AclActivationFunction::ELU;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">case</span> ActivationFunction::HardSwish: <span class="keywordflow">return</span> AclActivationFunction::HARD_SWISH;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Gelu: <span class="keywordflow">return</span> AclActivationFunction::GELU;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported activation function&quot;</span>);</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">BoundedReLu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d">Elu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaf48cca1c6deaa6a1c34e4ee46954cf0b">Gelu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186">HardSwish</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735">LeakyReLu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b">Linear</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">ReLu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">Sigmoid</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef">SoftReLu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304">Square</a>, and <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e">TanH</a>.</p>
<p class="reference">Referenced by <a class="el" href="_arm_compute_utils_8hpp_source.html#l00087">ConvertActivationDescriptorToAclActivationLayerInfo()</a>.</p>
</div>
</div>
<a id="abfb0841058a8190d30851f07eca3991f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abfb0841058a8190d30851f07eca3991f">&#9670;&nbsp;</a></span>ConvertAdditionalInfoToAclActivationLayerInfo()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">arm_compute::ActivationLayerInfo armnn::ConvertAdditionalInfoToAclActivationLayerInfo </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_queue_descriptor.html">QueueDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>queueDescriptor</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00105">105</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;{</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">const</span> ActivationDescriptor* activationDescPtr = queueDescriptor.GetAdditionalInformation&lt;ActivationDescriptor&gt;();</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">if</span> (activationDescPtr != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(<span class="keyword">static_cast&lt;</span>ActivationDescriptor<span class="keyword">&gt;</span>(</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; *activationDescPtr));</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo();</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_arm_compute_utils_8hpp_source.html#l00087">ConvertActivationDescriptorToAclActivationLayerInfo()</a>, and <a class="el" href="_workload_data_8hpp_source.html#l00047">QueueDescriptor::GetAdditionalInformation()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_addition_workload_8cpp_source.html#l00021">ClAdditionWorkload::ClAdditionWorkload()</a>, <a class="el" href="_cl_batch_mat_mul_workload_8cpp_source.html#l00057">ClBatchMatMulWorkload::ClBatchMatMulWorkload()</a>, <a class="el" href="_cl_division_workload_8cpp_source.html#l00034">ClDivisionWorkload::ClDivisionWorkload()</a>, <a class="el" href="_cl_elementwise_binary_workload_8cpp_source.html#l00019">ClElementwiseBinaryWorkload::ClElementwiseBinaryWorkload()</a>, <a class="el" href="_cl_fully_connected_workload_8cpp_source.html#l00053">ClFullyConnectedWorkload::ClFullyConnectedWorkload()</a>, <a class="el" href="_cl_multiplication_workload_8cpp_source.html#l00047">ClMultiplicationWorkload::ClMultiplicationWorkload()</a>, <a class="el" href="_cl_subtraction_workload_8cpp_source.html#l00021">ClSubtractionWorkload::ClSubtractionWorkload()</a>, <a class="el" href="_arm_compute_utils_8hpp_source.html#l00278">ComputeConv3DInfo()</a>, <a class="el" href="_neon_addition_workload_8cpp_source.html#l00040">NeonAdditionWorkload::NeonAdditionWorkload()</a>, <a class="el" href="_neon_batch_mat_mul_workload_8cpp_source.html#l00057">NeonBatchMatMulWorkload::NeonBatchMatMulWorkload()</a>, <a class="el" href="_neon_division_workload_8cpp_source.html#l00036">NeonDivisionWorkload::NeonDivisionWorkload()</a>, <a class="el" href="_neon_elementwise_binary_workload_8cpp_source.html#l00051">NeonElementwiseBinaryWorkload::NeonElementwiseBinaryWorkload()</a>, <a class="el" href="_neon_fused_workload_8cpp_source.html#l00063">NeonFusedWorkload::NeonFusedWorkload()</a>, <a class="el" href="_neon_multiplication_workload_8cpp_source.html#l00047">NeonMultiplicationWorkload::NeonMultiplicationWorkload()</a>, and <a class="el" href="_neon_subtraction_workload_8cpp_source.html#l00041">NeonSubtractionWorkload::NeonSubtractionWorkload()</a>.</p>
</div>
</div>
<a id="ac1438a97bbc2aee5cd8470d9d2a3aebc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac1438a97bbc2aee5cd8470d9d2a3aebc">&#9670;&nbsp;</a></span>ConvertComparisonOperationToAcl()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">arm_compute::ComparisonOperation armnn::ConvertComparisonOperationToAcl </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_comparison_descriptor.html">ComparisonDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00141">141</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;{</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">switch</span> (descriptor.m_Operation)</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; {</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::Greater: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::Greater;</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::GreaterOrEqual: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::GreaterEqual;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::Less: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::Less;</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::LessOrEqual: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::LessEqual;</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::Equal: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::Equal;</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::NotEqual: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::NotEqual;</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported comparison function&quot;</span>);</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5">Equal</a>, <a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a">Greater</a>, <a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937">GreaterOrEqual</a>, <a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b">Less</a>, <a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14">LessOrEqual</a>, <a class="el" href="_descriptors_8hpp_source.html#l00105">ComparisonDescriptor::m_Operation</a>, and <a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96">NotEqual</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_comparison_workload_8cpp_source.html#l00042">ClComparisonWorkload::ClComparisonWorkload()</a>, and <a class="el" href="_neon_comparison_workload_8cpp_source.html#l00034">NeonComparisonWorkload::NeonComparisonWorkload()</a>.</p>
</div>
</div>
<a id="a2f12c1f572fb15978e51cf646d42d4dc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2f12c1f572fb15978e51cf646d42d4dc">&#9670;&nbsp;</a></span>ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">arm_compute::FullyConnectedLayerInfo armnn::ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.html">FullyConnectedDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>fullyConnectedDesc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">arm_compute::ActivationLayerInfo&#160;</td>
<td class="paramname"><em>activationLayerInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00204">204</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;{</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; arm_compute::FullyConnectedLayerInfo fc_info;</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; fc_info.transpose_weights = fullyConnectedDesc.m_TransposeWeightMatrix;</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; fc_info.activation_info = activationLayerInfo;</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">return</span> fc_info;</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.html#l00528">FullyConnectedDescriptor::m_TransposeWeightMatrix</a>.</p>
</div>
</div>
<a id="ae2e0c1d8160fadce44d479379790718e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae2e0c1d8160fadce44d479379790718e">&#9670;&nbsp;</a></span>ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">arm_compute::FullyConnectedLayerInfo armnn::ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.html">FullyConnectedDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>fullyConnectedDesc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDesc</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00194">194</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;{</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; arm_compute::FullyConnectedLayerInfo fc_info;</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; fc_info.transpose_weights = fullyConnectedDesc.m_TransposeWeightMatrix;</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; fc_info.activation_info = <a class="code" href="namespacearmnn.html#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(activationDesc);</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">return</span> fc_info;</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_arm_compute_utils_8hpp_source.html#l00087">ConvertActivationDescriptorToAclActivationLayerInfo()</a>, and <a class="el" href="_descriptors_8hpp_source.html#l00528">FullyConnectedDescriptor::m_TransposeWeightMatrix</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_fully_connected_workload_8cpp_source.html#l00053">ClFullyConnectedWorkload::ClFullyConnectedWorkload()</a>.</p>
</div>
</div>
<a id="a9cdee30c21f3dd630b4e460527105b74"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9cdee30c21f3dd630b4e460527105b74">&#9670;&nbsp;</a></span>ConvertLogSeverity()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a> armnn::ConvertLogSeverity </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407">BoostLogSeverityMapping</a>&#160;</td>
<td class="paramname"><em>severity</em></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="_logging_8hpp_source.html#l00206">206</a> of file <a class="el" href="_logging_8hpp_source.html">Logging.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;{</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a><span class="keyword">&gt;</span>(severity);</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="aa1e93ef5f9ee3dbb5e7faa9578f180ae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa1e93ef5f9ee3dbb5e7faa9578f180ae">&#9670;&nbsp;</a></span>ConvertLstmActivationFuncToAclLayerInfo()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">arm_compute::ActivationLayerInfo armnn::ConvertLstmActivationFuncToAclLayerInfo </td>
<td>(</td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>activationFunction</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00118">118</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;{</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="comment">// For preparing the object for the class ActivationLayerInfo, we need to consider 5 situations.</span></div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">switch</span> (activationFunction)</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; {</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">case</span> 0:</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(); <span class="comment">// no activation, do nothing</span></div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">case</span> 1:</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(arm_compute::ActivationLayerInfo::ActivationFunction::RELU);</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">case</span> 3:</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; arm_compute::ActivationLayerInfo::ActivationFunction::BOUNDED_RELU, 6.0);</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">case</span> 4:</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; arm_compute::ActivationLayerInfo::ActivationFunction::TANH, 1.0, 1.0);</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">case</span> 6:</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; arm_compute::ActivationLayerInfo::ActivationFunction::LOGISTIC);</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;Wrong Type of Activation Function!&quot;</span>);</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ad69ffa576a596b9eb20ab6a41420c541"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad69ffa576a596b9eb20ab6a41420c541">&#9670;&nbsp;</a></span>ConvertMaskToACLFormat()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int32_t ConvertMaskToACLFormat </td>
<td>(</td>
<td class="paramtype">int32_t&#160;</td>
<td class="paramname"><em>mask</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int32_t&#160;</td>
<td class="paramname"><em>numDim</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.html#l00299">299</a> of file <a class="el" href="_workload_utils_8cpp_source.html">WorkloadUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;{</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; int32_t reversedMask = 0;</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; armnn::numeric_cast&lt;unsigned int&gt;(numDim); ++i)</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; {</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="comment">// Check if bit set in mask for each dimension</span></div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; int32_t bit = (mask &amp; 1 &lt;&lt; i) != 0;</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="comment">// Increment the new mask with the bits reversed</span></div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; reversedMask += (bit &lt;&lt; std::max(numDim-(armnn::numeric_cast&lt;int&gt;(i)+1), 0));</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; </div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">return</span> reversedMask;</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_strided_slice_workload_8cpp_source.html#l00055">ClStridedSliceWorkload::ClStridedSliceWorkload()</a>, and <a class="el" href="_neon_strided_slice_workload_8cpp_source.html#l00051">NeonStridedSliceWorkload::NeonStridedSliceWorkload()</a>.</p>
</div>
</div>
<a id="aa5baabb8e3a4aa6cbdcab419d743e747"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa5baabb8e3a4aa6cbdcab419d743e747">&#9670;&nbsp;</a></span>ConvertNormalizationAlgorithmChannelToAclNormType()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">arm_compute::NormType armnn::ConvertNormalizationAlgorithmChannelToAclNormType </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#abe18a5033f2ab9c0de82c676b48f5437">NormalizationAlgorithmChannel</a>&#160;</td>
<td class="paramname"><em>channelType</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00182">182</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;{</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keyword">using</span> arm_compute::NormType;</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">switch</span> (channelType)</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">case</span> NormalizationAlgorithmChannel::Across: <span class="keywordflow">return</span> NormType::CROSS_MAP;</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">case</span> NormalizationAlgorithmChannel::Within: <span class="keywordflow">return</span> NormType::IN_MAP_2D;</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported normalization algorithm channel type&quot;</span>);</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">Across</a>, and <a class="el" href="namespacearmnn.html#abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b">Within</a>.</p>
</div>
</div>
<a id="a8f3bfacadfd6d2146d6ccd299dabc7aa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8f3bfacadfd6d2146d6ccd299dabc7aa">&#9670;&nbsp;</a></span>ConvertOutputShapeRoundingToAclDimensionRoundingType()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">arm_compute::DimensionRoundingType armnn::ConvertOutputShapeRoundingToAclDimensionRoundingType </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#adf2e5515c4c36a3e7e46bb8b83c6754e">OutputShapeRounding</a>&#160;</td>
<td class="paramname"><em>rounding</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00168">168</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;{</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keyword">using</span> arm_compute::DimensionRoundingType;</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; </div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">switch</span> (rounding)</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">case</span> OutputShapeRounding::Ceiling: <span class="keywordflow">return</span> DimensionRoundingType::CEIL;</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">case</span> OutputShapeRounding::Floor: <span class="keywordflow">return</span> DimensionRoundingType::FLOOR;</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported Output Shape Rounding type&quot;</span>);</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb">Ceiling</a>, and <a class="el" href="namespacearmnn.html#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">Floor</a>.</p>
</div>
</div>
<a id="adf5a024ace0dbe2af2d5b1a1b9623771"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adf5a024ace0dbe2af2d5b1a1b9623771">&#9670;&nbsp;</a></span>ConvertPaddingModeToAcl()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">arm_compute::PaddingMode armnn::ConvertPaddingModeToAcl </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91">PaddingMode</a> &amp;&#160;</td>
<td class="paramname"><em>paddingMode</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00295">295</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;{</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">switch</span> (paddingMode)</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; {</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">case</span> PaddingMode::Constant: <span class="keywordflow">return</span> arm_compute::PaddingMode::CONSTANT;</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">case</span> PaddingMode::Reflect: <span class="keywordflow">return</span> arm_compute::PaddingMode::REFLECT;</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">case</span> PaddingMode::Symmetric: <span class="keywordflow">return</span> arm_compute::PaddingMode::SYMMETRIC;</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported Padding Mode&quot;</span>);</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00">Reflect</a>, and <a class="el" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626">Symmetric</a>.</p>
</div>
</div>
<a id="ad256fcf8c7f4d5a240fa47f0b56d50af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad256fcf8c7f4d5a240fa47f0b56d50af">&#9670;&nbsp;</a></span>ConvertPoolingAlgorithmToAclPoolingType()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">arm_compute::PoolingType armnn::ConvertPoolingAlgorithmToAclPoolingType </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718">PoolingAlgorithm</a>&#160;</td>
<td class="paramname"><em>poolingAlgorithm</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00155">155</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;{</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keyword">using</span> arm_compute::PoolingType;</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; </div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">switch</span> (poolingAlgorithm)</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; {</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">case</span> PoolingAlgorithm::Max: <span class="keywordflow">return</span> PoolingType::MAX;</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">case</span> PoolingAlgorithm::Average: <span class="keywordflow">return</span> PoolingType::AVG;</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">case</span> PoolingAlgorithm::L2: <span class="keywordflow">return</span> PoolingType::L2;</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported pooling algorithm&quot;</span>);</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; }</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">Average</a>, <a class="el" href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76">L2</a>, and <a class="el" href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718a6a061313d22e51e0f25b7cd4dc065233">Max</a>.</p>
<p class="reference">Referenced by <a class="el" href="_utils_gpu_fsa_8cpp_source.html#l00045">CreatePool2dAttributes()</a>.</p>
</div>
</div>
<a id="a03ab984d93d0f240f31274499b72e6b0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a03ab984d93d0f240f31274499b72e6b0">&#9670;&nbsp;</a></span>ConvertReductionOperationToAcl()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">arm_compute::ReductionOperation armnn::ConvertReductionOperationToAcl </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_reduce_descriptor.html">ReduceDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00306">306</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;{</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">switch</span> (descriptor.m_ReduceOperation)</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; {</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Sum: <span class="keywordflow">return</span> arm_compute::ReductionOperation::SUM;</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Mean: <span class="keywordflow">return</span> arm_compute::ReductionOperation::MEAN_SUM;</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Max: <span class="keywordflow">return</span> arm_compute::ReductionOperation::MAX;</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Min: <span class="keywordflow">return</span> arm_compute::ReductionOperation::MIN;</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Prod: <span class="keywordflow">return</span> arm_compute::ReductionOperation::PROD;</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported Reduction operation&quot;</span>);</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; }</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.html#l01558">ReduceDescriptor::m_ReduceOperation</a>, <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a6a061313d22e51e0f25b7cd4dc065233">Max</a>, <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">Mean</a>, <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a78d811e98514cd165dda532286610fd2">Min</a>, <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">Prod</a>, and <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">Sum</a>.</p>
</div>
</div>
<a id="ae9bdcb8ac91731109dc423d6ed476204"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae9bdcb8ac91731109dc423d6ed476204">&#9670;&nbsp;</a></span>ConvertResizeMethodToAclInterpolationPolicy()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">arm_compute::InterpolationPolicy armnn::ConvertResizeMethodToAclInterpolationPolicy </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4">ResizeMethod</a>&#160;</td>
<td class="paramname"><em>resizeMethod</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00213">213</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;{</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">switch</span> (resizeMethod)</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; {</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">case</span> ResizeMethod::Bilinear:</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">return</span> arm_compute::InterpolationPolicy::BILINEAR;</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">case</span> ResizeMethod::NearestNeighbor:</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">return</span> arm_compute::InterpolationPolicy::NEAREST_NEIGHBOR;</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported resize method&quot;</span>);</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; }</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">Bilinear</a>, and <a class="el" href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">NearestNeighbor</a>.</p>
</div>
</div>
<a id="a8ca9f249dc67c111b8234b2c78d672cd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8ca9f249dc67c111b8234b2c78d672cd">&#9670;&nbsp;</a></span>ConvertWeightTensorFromArmnnToAcl()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_const_tensor.html">armnn::ConstTensor</a> ConvertWeightTensorFromArmnnToAcl </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_const_tensor_handle.html">ConstTensorHandle</a> *&#160;</td>
<td class="paramname"><em>weightTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
<td class="paramname"><em>dataLayout</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>permuteBuffer</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.html#l00237">237</a> of file <a class="el" href="_workload_utils_8cpp_source.html">WorkloadUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;{</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">if</span> (weightTensor == <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; {</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;WorkloadUtils: PermuteTensor: Null input tensor pointer&quot;</span>);</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; }</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">if</span> (permuteBuffer == <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; {</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;WorkloadUtils: PermuteTensor: Null permute buffer pointer&quot;</span>);</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; </div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keyword">auto</span> multiplier = weightTensor-&gt;GetTensorInfo().GetShape()[0];</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keyword">auto</span> inputChannels = weightTensor-&gt;GetTensorInfo().GetShape()[1];</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; </div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">// Convert the weight format from ArmNN&#39;s [ M, I, H, W ] (does NOT depend on the data layout) to either</span></div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="comment">// [ 1, H, W, I * M ] (if NHWC) or [ 1, I * M, H, W ] (if NCHW), as required by the compute library</span></div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; </div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// 1. Permute the weights if necessary</span></div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// If the data layout is NCHW no permutation is necessary, as a reshape to [ 1, I * M, H, W ] can be better done</span></div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="comment">// starting from the current shape of [ M, I, H, W ]</span></div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="comment">// If no permutation is necessary, leave the permutation vector empty</span></div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; PermutationVector permutationVector{};</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">if</span> (dataLayout == DataLayout::NHWC)</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; {</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// 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="l00264"></a><span class="lineno"> 264</span>&#160; permutationVector = { 3, 2, 0, 1 };</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; ConstTensor weightPermuted = <a class="code" href="namespacearmnn.html#aafe6180ef80d9f334f3a3ba9cc0db35d">PermuteTensor</a>(weightTensor, permutationVector, permuteBuffer);</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; </div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="comment">// Shuffle the weights data to obtain the channel order needed used by Acl</span></div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">if</span> (multiplier &gt; 1 &amp;&amp; inputChannels &gt; 1 &amp;&amp; dataLayout == DataLayout::NCHW)</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; {</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">switch</span> (weightPermuted.GetDataType())</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; {</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; weightPermuted = ReorderWeightChannelsForAcl&lt;float&gt;(weightPermuted, dataLayout, permuteBuffer);</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">case</span> DataType::Float16:</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; weightPermuted =</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; ReorderWeightChannelsForAcl&lt;half_float::half&gt;(weightPermuted, dataLayout, permuteBuffer);</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; weightPermuted = ReorderWeightChannelsForAcl&lt;uint8_t&gt;(weightPermuted, dataLayout, permuteBuffer);</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; weightPermuted = ReorderWeightChannelsForAcl&lt;int8_t&gt;(weightPermuted, dataLayout, permuteBuffer);</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; }</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; }</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; </div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="comment">// 2. Reshape the weights</span></div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <a class="code" href="namespacearmnn.html#a3170fdd696155a247ecd81d445c0e2e1">ReshapeWeightsForAcl</a>(weightPermuted.GetInfo(), dataLayout);</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; </div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// 3. Return both the tensor and the allocated storage to ensure that the data stays alive</span></div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">return</span> weightPermuted;</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_tensor_8hpp_source.html#l00302">BaseTensor&lt; MemoryType &gt;::GetDataType()</a>, <a class="el" href="_tensor_8hpp_source.html#l00297">BaseTensor&lt; MemoryType &gt;::GetInfo()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_tensor_handle_8hpp_source.html#l00040">ConstTensorHandle::GetTensorInfo()</a>, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>, <a class="el" href="_workload_utils_8cpp_source.html#l00019">PermuteTensor()</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, and <a class="el" href="_workload_utils_8cpp_source.html#l00048">ReshapeWeightsForAcl()</a>.</p>
</div>
</div>
<a id="a1e8288eac7e909fdb58b6113d816763a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1e8288eac7e909fdb58b6113d816763a">&#9670;&nbsp;</a></span>ConvertWeightTensorInfoFromArmnnToAcl()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> ConvertWeightTensorInfoFromArmnnToAcl </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>weightInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
<td class="paramname"><em>dataLayout</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.html#l00122">122</a> of file <a class="el" href="_workload_utils_8cpp_source.html">WorkloadUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;{</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="comment">// Convert the weight format from ArmNN&#39;s [ M, I, H, W ] (does NOT depend on the data layout) to either</span></div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="comment">// [ 1, H, W, I * M ] (if NHWC) or [ 1, I * M, H, W ] (if NCHW), as required by the compute library</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="comment">// 1. Permute the weights if necessary</span></div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="comment">// If the data layout is NCHW no permutation is necessary, as a reshape to [ 1, I * M, H, W ] can be better done</span></div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="comment">// starting from the current shape of [ M, I, H, W ]</span></div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; TensorInfo weightPermutedInfo(weightInfo);</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">if</span> (dataLayout == DataLayout::NHWC)</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; {</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="comment">// 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="l00134"></a><span class="lineno"> 134</span>&#160; PermutationVector permutationVector{ 3, 2, 0, 1 };</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; weightPermutedInfo = <a class="code" href="namespacearmnn_utils.html#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(weightInfo, permutationVector);</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; </div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="comment">// 2. Reshape the weights</span></div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="namespacearmnn.html#a3170fdd696155a247ecd81d445c0e2e1">ReshapeWeightsForAcl</a>(weightPermutedInfo, dataLayout);</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; </div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="comment">// 3. Return the permuted weight info</span></div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">return</span> weightPermutedInfo;</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>, <a class="el" href="_permute_8cpp_source.html#l00125">armnnUtils::Permuted()</a>, and <a class="el" href="_workload_utils_8cpp_source.html#l00048">ReshapeWeightsForAcl()</a>.</p>
</div>
</div>
<a id="af98115cd07776d3fa8424434d2a7a897"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af98115cd07776d3fa8424434d2a7a897">&#9670;&nbsp;</a></span>Convolve()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Convolve </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>rInputShape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>rInputDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>rOutputShape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>rOutputEncoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>rFilterShape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>rFilterDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>biasEnabled</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; *&#160;</td>
<td class="paramname"><em>pBiasDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
<td class="paramname"><em>dataLayout</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>paddingTop</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>paddingLeft</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>xStride</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>yStride</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>xDilation</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>yDilation</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>depthwise</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_conv_impl_8cpp_source.html#l00068">68</a> of file <a class="el" href="_conv_impl_8cpp_source.html">ConvImpl.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;{</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">if</span> (biasEnabled &amp;&amp; !pBiasDecoder)</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Bias is enabled but the bias data is invalid&quot;</span>);</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html">armnnUtils::DataLayoutIndexed</a> dataLayoutIndexed(dataLayout);</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelsIndex = dataLayoutIndexed.GetChannelsIndex();</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> heightIndex = dataLayoutIndexed.GetHeightIndex();</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> widthIndex = dataLayoutIndexed.GetWidthIndex();</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="comment">// Weights layout:</span></div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// Conv2d: [O,H,W,I]</span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// Depthwise: [1,H,W,O]</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels = rInputShape[channelsIndex];</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannels = rOutputShape[channelsIndex];</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> depthMultiplier = depthwise ? outputChannels/inputChannels : 1;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; </div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchSize = rOutputShape[0];</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = rOutputShape[heightIndex];</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = rOutputShape[widthIndex];</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = rInputShape[heightIndex];</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = rInputShape[widthIndex];</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterHeight = depthwise ? rFilterShape[1] : rFilterShape[heightIndex];</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterWidth = depthwise ? rFilterShape[2] : rFilterShape[widthIndex];</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; </div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; inputVec = rInputDecoder.<a class="code" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(rInputShape);</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; filterVec = rFilterDecoder.<a class="code" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(rFilterShape, depthwise);</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; </div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">const</span> TensorShape biasShape{outputChannels};</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; biasVec = biasEnabled ? pBiasDecoder-&gt;<a class="code" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(biasShape) : std::vector&lt;float&gt;();</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchIdx = 0; batchIdx &lt; batchSize; batchIdx++)</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cOutput = 0; cOutput &lt; outputChannels; cOutput++)</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; {</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yOutput = 0; yOutput &lt; outputHeight; yOutput++)</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; {</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xOutput = 0; xOutput &lt; outputWidth; xOutput++)</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; {</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="comment">// This loop goes over each output element.</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordtype">float</span> sum = 0.0f;</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; </div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="comment">// For depthwise, each output channel corresponds to exactly one input channel.</span></div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="comment">// For normal, must loop over each input channel.</span></div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cInput = 0; cInput &lt; (depthwise ? 1 : inputChannels); cInput++)</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yFilter = 0; yFilter &lt; filterHeight; yFilter++)</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; {</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xFilter = 0; xFilter &lt; filterWidth; xFilter++)</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; {</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="comment">// This loop goes over each input element for each output element.</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterIndex = 0;</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; </div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="comment">// Since dimensionality of kernel depends on depthwiseness, so does index.</span></div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">if</span> (depthwise)</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; {</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; cInput = cOutput / depthMultiplier;</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="comment">// filterDepth = outputChannels;</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; filterIndex = xFilter * outputChannels + cOutput +</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; yFilter * filterWidth * outputChannels;</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// Keep this implementation, as using DataLayoutIndexed::GetIndex causes great</span></div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="comment">// performance regression.</span></div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NHWC)</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; {</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; filterIndex = cOutput * filterHeight * filterWidth * inputChannels +</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; yFilter * filterWidth * inputChannels +</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; xFilter * inputChannels +</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; cInput;</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; filterIndex = cOutput * filterWidth * filterHeight * inputChannels +</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; cInput * filterWidth * filterHeight +</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; yFilter * filterWidth +</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; xFilter;</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; }</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; </div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yInput = yOutput * yStride + yFilter * yDilation;</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xInput = xOutput * xStride + xFilter * xDilation;</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; </div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordtype">float</span> inputValue;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; </div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="comment">// Check if we&#39;re in the padding.</span></div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">if</span> (yInput &lt; paddingTop || yInput &gt;= inputHeight + paddingTop ||</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; xInput &lt; paddingLeft || xInput &gt;= inputWidth + paddingLeft)</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; inputValue = 0.0f;</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputIndex = 0;</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; </div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="comment">// Keep this implementation, as using DataLayoutIndexed::GetIndex causes great</span></div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="comment">// performance regression.</span></div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NHWC)</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; inputIndex = batchIdx * inputHeight * inputWidth * inputChannels +</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; (yInput - paddingTop) * inputWidth * inputChannels +</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; (xInput - paddingLeft) * inputChannels +</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; cInput;</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; {</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; inputIndex = batchIdx * inputWidth * inputHeight * inputChannels +</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; inputWidth * inputHeight * cInput +</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; inputWidth * (yInput - paddingTop) +</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; xInput - paddingLeft;</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; inputValue = inputVec[inputIndex];</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; }</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; </div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; sum += filterVec[filterIndex] * inputValue;</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; }</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; }</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; }</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; </div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">if</span> (biasEnabled)</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; {</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; sum += biasVec[cOutput];</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; }</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; </div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outIdx;</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NHWC)</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; {</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; outIdx = batchIdx * outputHeight * outputWidth * outputChannels +</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; yOutput * outputWidth * outputChannels +</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; xOutput * outputChannels +</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; cOutput;</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; outIdx = batchIdx * outputHeight * outputWidth * outputChannels +</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; cOutput * outputHeight * outputWidth +</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; yOutput * outputWidth +</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; xOutput;</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; </div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; rOutputEncoder[outIdx];</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; rOutputEncoder.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(sum);</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; }</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder&lt; IType &gt;::DecodeTensor()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00022">DataLayoutIndexed::GetDataLayout()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="a9750dc088a62ed91b79f636dfaa2d9a1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9750dc088a62ed91b79f636dfaa2d9a1">&#9670;&nbsp;</a></span>Convolve3d()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Convolve3d </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>rInputShape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>rInputDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>rOutputShape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>rOutputEncoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>rFilterShape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>rFilterDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>biasEnabled</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; *&#160;</td>
<td class="paramname"><em>pBiasDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
<td class="paramname"><em>dataLayout</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>paddingTop</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>paddingLeft</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>paddingFront</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>xStride</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>yStride</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>zStride</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>xDilation</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>yDilation</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>zDilation</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_conv3d_impl_8cpp_source.html#l00011">11</a> of file <a class="el" href="_conv3d_impl_8cpp_source.html">Conv3dImpl.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">if</span> (biasEnabled &amp;&amp; !pBiasDecoder)</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Bias is enabled but the bias data is invalid&quot;</span>);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; }</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html">armnnUtils::DataLayoutIndexed</a> dataLayoutIndexed(dataLayout);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelsIndex = dataLayoutIndexed.GetChannelsIndex();</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> heightIndex = dataLayoutIndexed.GetHeightIndex();</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> widthIndex = dataLayoutIndexed.GetWidthIndex();</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> depthIndex = dataLayoutIndexed.GetDepthIndex();</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inChannels = rInputShape[channelsIndex];</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outChannels = rOutputShape[channelsIndex];</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchSize = rOutputShape[0];</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = rOutputShape[heightIndex];</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = rOutputShape[widthIndex];</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputDepth = rOutputShape[depthIndex];</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = rInputShape[heightIndex];</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = rInputShape[widthIndex];</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputDepth = rInputShape[depthIndex];</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="comment">// Conv3d weights layout: [D,H,W,I,O]</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterDepth = rFilterShape[0];</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterHeight = rFilterShape[1];</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterWidth = rFilterShape[2];</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; inputVec = rInputDecoder.<a class="code" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(rInputShape);</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; filterVec = rFilterDecoder.<a class="code" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(rFilterShape);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">const</span> TensorShape biasShape{outChannels};</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; biasVec = biasEnabled ? pBiasDecoder-&gt;<a class="code" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(biasShape) : std::vector&lt;float&gt;();</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchIdx = 0; batchIdx &lt; batchSize; batchIdx++)</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> zOutput = 0; zOutput &lt; outputDepth; zOutput++)</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; {</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xOutput = 0; xOutput &lt; outputWidth; xOutput++)</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yOutput = 0; yOutput &lt; outputHeight; yOutput++)</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cOutput = 0; cOutput &lt; outChannels; cOutput++)</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">// This loop goes over each output element.</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">float</span> sum = 0.0f;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="comment">// Loop over each input channel.</span></div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> zFilter = 0; zFilter &lt; filterDepth; zFilter++)</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yFilter = 0; yFilter &lt; filterHeight; yFilter++)</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; {</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xFilter = 0; xFilter &lt; filterWidth; xFilter++)</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cInput = 0; cInput &lt; inChannels; cInput++)</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; {</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">// This loop goes over each input element for each output element.</span></div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterIndex = 0;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; </div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="comment">// Conv3d weights layout: [D,H,W,I,O]</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">// Keep this implementation, as using DataLayoutIndexed::GetIndex</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">// causes large performance regression.</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; filterIndex = zFilter * filterHeight * filterWidth * inChannels * outChannels +</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; yFilter * filterWidth * inChannels * outChannels +</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; xFilter * inChannels * outChannels +</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; cInput * outChannels +</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; cOutput;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; </div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yInput = yOutput * yStride + yFilter * yDilation;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xInput = xOutput * xStride + xFilter * xDilation;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> zInput = zOutput * zStride + zFilter * zDilation;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordtype">float</span> inputValue;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; </div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="comment">// Check if we&#39;re in the padding.</span></div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span> (yInput &lt; paddingTop || yInput &gt;= inputHeight + paddingTop ||</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; xInput &lt; paddingLeft || xInput &gt;= inputWidth + paddingLeft ||</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; zInput &lt; paddingFront || zInput &gt;= inputDepth + paddingFront)</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; {</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; inputValue = 0.0f;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputIndex = 0;</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; </div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="comment">// Keep this implementation, as using DataLayoutIndexed::GetIndex</span></div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="comment">// causes large performance regression.</span></div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NDHWC)</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; inputIndex =</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; batchIdx * inputDepth * inputHeight * inputWidth * inChannels +</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; (zInput-paddingFront) * inputHeight * inputWidth * inChannels +</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; (yInput-paddingTop) * inputWidth * inChannels +</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; (xInput-paddingLeft) * inChannels +</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; cInput;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; }</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; {</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="comment">// NCDHW DataLayout</span></div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; inputIndex =</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; batchIdx * inputDepth * inputHeight * inputWidth * inChannels +</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; inputDepth * inputHeight * inputWidth * cInput +</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; (zInput-paddingFront) * inputHeight * inputWidth +</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; (yInput-paddingTop) * inputWidth +</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; xInput-paddingLeft;</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; }</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; inputValue = inputVec[inputIndex];</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; </div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; sum += filterVec[filterIndex] * inputValue;</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">if</span> (biasEnabled)</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; {</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; sum += biasVec[cOutput];</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; </div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outIdx;</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NDHWC)</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; {</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; outIdx = batchIdx * outputDepth * outputHeight * outputWidth * outChannels +</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; zOutput * outputHeight * outputWidth * outChannels +</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; yOutput * outputWidth * outChannels +</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; xOutput * outChannels +</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; cOutput;</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; {</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="comment">// NCDHW DataLayout</span></div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; outIdx = batchIdx * outputDepth * outputHeight * outputWidth * outChannels +</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; cOutput * outputDepth * outputHeight * outputWidth +</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; zOutput * outputHeight * outputWidth +</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; yOutput * outputWidth +</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; xOutput;</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; </div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; rOutputEncoder[outIdx];</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; rOutputEncoder.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(sum);</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; }</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; }</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; }</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder&lt; IType &gt;::DecodeTensor()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00022">DataLayoutIndexed::GetDataLayout()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00026">DataLayoutIndexed::GetDepthIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">NDHWC</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="a8b5472bb95f8226e5c82b95c1de1dab0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8b5472bb95f8226e5c82b95c1de1dab0">&#9670;&nbsp;</a></span>CoordinatesToIndex()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint32_t armnn::CoordinatesToIndex </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>shape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; uint32_t &gt; &amp;&#160;</td>
<td class="paramname"><em>coordinates</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_tile_8cpp_source.html#l00032">32</a> of file <a class="el" href="_tile_8cpp_source.html">Tile.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;{</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; uint32_t index = 0;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; uint32_t base = 1;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; uint32_t rank = shape.GetNumDimensions();</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">for</span> (uint32_t i = rank; i &gt; 0; --i)</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; index = index + coordinates[i - 1] * base;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; base = base * shape[i - 1];</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> index;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8cpp_source.html#l00174">TensorShape::GetNumDimensions()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_tile_8cpp_source.html#l00045">Tile()</a>.</p>
</div>
</div>
<a id="a80bf40fafb5d10cd4d2a27c515052e2e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a80bf40fafb5d10cd4d2a27c515052e2e">&#9670;&nbsp;</a></span>CopyArmComputeClTensorData()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void CopyArmComputeClTensorData </td>
<td>(</td>
<td class="paramtype">arm_compute::CLTensor &amp;&#160;</td>
<td class="paramname"><em>dstTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const T *&#160;</td>
<td class="paramname"><em>srcData</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.html#l00064">64</a> of file <a class="el" href="_cl_workload_utils_8hpp_source.html">ClWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;{</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; {</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="_cl_workload_utils_8hpp.html#a9166fc90a3ea47a2c9499a810b204daf">ARMNN_SCOPED_PROFILING_EVENT_CL</a>(<span class="stringliteral">&quot;MapClTensorForWriting&quot;</span>);</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; dstTensor.map(<span class="keyword">true</span>);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="_cl_workload_utils_8hpp.html#a9166fc90a3ea47a2c9499a810b204daf">ARMNN_SCOPED_PROFILING_EVENT_CL</a>(<span class="stringliteral">&quot;CopyToClTensor&quot;</span>);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; armcomputetensorutils::CopyArmComputeITensorData&lt;T&gt;(srcData, dstTensor);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; dstTensor.unmap();</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_cl_workload_utils_8hpp_source.html#l00021">ARMNN_SCOPED_PROFILING_EVENT_CL</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_constant_workload_8cpp_source.html#l00052">ClConstantWorkload::Execute()</a>, and <a class="el" href="_gpu_fsa_constant_workload_8cpp_source.html#l00051">GpuFsaConstantWorkload::Execute()</a>.</p>
</div>
</div>
<a id="a1351e01f9fb983937caf79e353142b41"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1351e01f9fb983937caf79e353142b41">&#9670;&nbsp;</a></span>CopyArmComputeTensorData()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::CopyArmComputeTensorData </td>
<td>(</td>
<td class="paramtype">arm_compute::Tensor &amp;&#160;</td>
<td class="paramname"><em>dstTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const T *&#160;</td>
<td class="paramname"><em>srcData</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_workload_utils_8hpp_source.html#l00063">63</a> of file <a class="el" href="_neon_workload_utils_8hpp_source.html">NeonWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;{</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; InitialiseArmComputeTensorEmpty(dstTensor);</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; CopyArmComputeITensorData(srcData, dstTensor);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_workload_utils_8hpp_source.html#l00069">InitializeArmComputeTensorData()</a>.</p>
</div>
</div>
<a id="a92c91193007aa49f4732d6dba5397f8d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a92c91193007aa49f4732d6dba5397f8d">&#9670;&nbsp;</a></span>CopyTensorContentsGeneric()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::CopyTensorContentsGeneric </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *&#160;</td>
<td class="paramname"><em>srcTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *&#160;</td>
<td class="paramname"><em>dstTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">CopyFunc&#160;</td>
<td class="paramname"><em>copy</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_utils_8hpp_source.html#l00046">46</a> of file <a class="el" href="_workload_utils_8hpp_source.html">WorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;{</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">// For ease of understanding, names are assigned to the dimensions</span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="comment">// of the tensor as if NHWC, however this routine works with any 5D tensor</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; static_assert(<a class="code" href="namespacearmnn.html#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a> == 5, <span class="stringliteral">&quot;Please update CopyTensorContents&quot;</span>);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; TensorShape srcStrides = srcTensor-&gt;GetStrides();</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">const</span> TensorShape&amp; srcShape = srcTensor-&gt;GetShape();</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> srcSize = srcTensor-&gt;GetStrides()[0] * srcShape[0];</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; TensorShape dstStrides = dstTensor-&gt;GetStrides();</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">const</span> TensorShape&amp; dstShape = dstTensor-&gt;GetShape();</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> dstSize = dstTensor-&gt;GetStrides()[0] * dstShape[0];</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordtype">size_t</span> srcDepth = 1;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordtype">size_t</span> srcBatches = 1;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">size_t</span> srcHeight = 1;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">size_t</span> srcWidth = 1;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordtype">size_t</span> srcChannels = 1;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; AssignValues(srcShape.GetNumDimensions(),</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; 0,</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; srcShape,</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; srcChannels,</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; srcWidth,</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; srcHeight,</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; srcBatches,</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; srcDepth);</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">size_t</span> srcDepthStride = 0;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">size_t</span> srcBatchStride = 0;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordtype">size_t</span> srcHeightStride = 0;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordtype">size_t</span> srcWidthStride = 0;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordtype">size_t</span> srcChannelStride = 0;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; AssignValues(srcStrides.GetNumDimensions(),</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; 0,</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; srcStrides,</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; srcChannelStride,</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; srcWidthStride,</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; srcHeightStride,</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; srcBatchStride,</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; srcDepthStride);</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordtype">size_t</span> dstDepth = 1;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordtype">size_t</span> dstBatches = 1;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordtype">size_t</span> dstHeight = 1;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordtype">size_t</span> dstWidth = 1;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordtype">size_t</span> dstChannels = 1;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; AssignValues(dstShape.GetNumDimensions(),</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; 0,</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; dstShape,</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; dstChannels,</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; dstWidth,</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; dstHeight,</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; dstBatches,</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; dstDepth);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordtype">size_t</span> dstDepthStride = 0;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">size_t</span> dstBatchStride = 0;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordtype">size_t</span> dstHeightStride = 0;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordtype">size_t</span> dstWidthStride = 0;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordtype">size_t</span> dstChannelStride = 0;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; AssignValues(dstStrides.GetNumDimensions(),</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; 0,</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; dstStrides,</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; dstChannelStride,</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; dstWidthStride,</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; dstHeightStride,</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; dstBatchStride,</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; dstDepthStride);</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; </div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* srcDataStart;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* dstDataStart;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Synchronize buffers&quot;</span>);</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; srcDataStart = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(srcTensor-&gt;Map());</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; dstDataStart = <span class="keyword">static_cast&lt;</span>uint8_t*<span class="keyword">&gt;</span>(dstTensor-&gt;Map());</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">if</span> (srcDataStart == <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; {</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">throw</span> MemoryValidationException(<span class="stringliteral">&quot;The source tensor is null.&quot;</span>);</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">if</span> (dstDataStart == <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; {</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">throw</span> MemoryValidationException(<span class="stringliteral">&quot;The destination tensor is null.&quot;</span>);</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; </div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordtype">size_t</span> copyLength = std::min(srcChannels * srcChannelStride, dstChannels * dstChannelStride);</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordtype">size_t</span> copyWidth = std::min(srcWidth, dstWidth);</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordtype">size_t</span> copyHeight = std::min(srcHeight, dstHeight);</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordtype">size_t</span> copyBatches = std::min(srcBatches, dstBatches);</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordtype">size_t</span> copyDepth = std::min(srcDepth, dstDepth);</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="comment">// Coalesce inner dimensions where possible</span></div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="comment">// to reduce overheard calling copy() and to</span></div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="comment">// allow for memory bandwidth optimisations</span></div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">if</span> (copyLength == srcWidthStride &amp;&amp;</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; copyLength == dstWidthStride)</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="comment">// There is no special padding between rows,</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="comment">// and sizes are compatible, so copy whole rows</span></div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; copyLength *= copyWidth;</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; copyWidth = 1;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">if</span> (copyLength == srcHeightStride &amp;&amp;</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; copyLength == dstHeightStride)</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; {</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="comment">// There is no special padding between batches</span></div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// and sizes are compatible so copy whole batches</span></div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; copyLength *= copyHeight;</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; copyHeight = 1;</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; }</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; </div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* srcData = srcDataStart;</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* dstData = dstDataStart;</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> d = 0; d &lt; copyDepth; ++d)</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; {</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keyword">auto</span> srcPtrDepth = srcData;</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keyword">auto</span> dstPtrDepth = dstData;</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> b = 0; b &lt; copyBatches; ++b)</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keyword">auto</span> srcPtrBatch = srcData;</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keyword">auto</span> dstPtrBatch = dstData;</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h &lt; copyHeight; ++h)</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; {</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keyword">auto</span> srcPtrChannel = srcData;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keyword">auto</span> dstPtrChannel = dstData;</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; copyWidth; ++w)</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; {</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="comment">// Sanity check the memory area we&#39;ve been asked to copy from and to.</span></div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">if</span> (copyLength &gt; srcSize)</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; {</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">throw</span> MemoryValidationException(</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="stringliteral">&quot;The source tensor size does not match the size of the allocated tensor.&quot;</span>);</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">if</span> (copyLength &gt; dstSize)</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">throw</span> MemoryValidationException(</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="stringliteral">&quot;The destination tensor size will overrun the destination tensor.&quot;</span>);</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; }</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; copy(dstData, srcData, copyLength);</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; dstData += dstWidthStride;</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; srcData += srcWidthStride;</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; }</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; dstData += (<span class="keyword">static_cast&lt;</span><span class="keywordtype">long</span><span class="keyword">&gt;</span>(dstHeightStride) - (dstData - dstPtrChannel));</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; srcData += (<span class="keyword">static_cast&lt;</span><span class="keywordtype">long</span><span class="keyword">&gt;</span>(srcHeightStride) - (srcData - srcPtrChannel));</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; dstData += (<span class="keyword">static_cast&lt;</span><span class="keywordtype">long</span><span class="keyword">&gt;</span>(dstBatchStride) - (dstData - dstPtrBatch));</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; srcData += (<span class="keyword">static_cast&lt;</span><span class="keywordtype">long</span><span class="keyword">&gt;</span>(srcBatchStride) - (srcData - srcPtrBatch));</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; }</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; dstData += (<span class="keyword">static_cast&lt;</span><span class="keywordtype">long</span><span class="keyword">&gt;</span>(dstDepthStride) - (dstData - dstPtrDepth));</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; srcData += (<span class="keyword">static_cast&lt;</span><span class="keywordtype">long</span><span class="keyword">&gt;</span>(srcDepthStride) - (srcData - srcPtrDepth));</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; </div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; srcTensor-&gt;Unmap();</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; dstTensor-&gt;Unmap();</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_profiling_8hpp_source.html#l00220">ARMNN_SCOPED_PROFILING_EVENT</a>, <a class="el" href="_tensor_8cpp_source.html#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle.html#affd5aae75cad90f472f96cfd25a13f29">ITensorHandle::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle.html#a30c3e09ce55369b66469443a4ca5ef03">ITensorHandle::GetStrides()</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle.html#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</a>, <a class="el" href="_types_8hpp_source.html#l00031">MaxNumOfTensorDimensions</a>, <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>, and <a class="el" href="classarmnn_1_1_i_tensor_handle.html#a563609828050f1b3a7868c23f3365923">ITensorHandle::Unmap()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_loaded_network_8cpp_source.html#l01444">CopyToOutputTensor()</a>, <a class="el" href="_mem_copy_workload_8cpp_source.html#l00051">CopyMemGenericWorkload::Execute()</a>, <a class="el" href="_neon_convert_fp32_to_fp16_workload_8cpp_source.html#l00053">NeonConvertFp32ToFp16Workload::Execute()</a>, <a class="el" href="_neon_convert_fp16_to_fp32_workload_8cpp_source.html#l00051">NeonConvertFp16ToFp32Workload::Execute()</a>, and <a class="el" href="_mem_copy_workload_8cpp_source.html#l00066">CopyMemGenericWorkload::ExecuteAsync()</a>.</p>
</div>
</div>
<a id="a5acae80f1d8fd03cdb3878bd356683d7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5acae80f1d8fd03cdb3878bd356683d7">&#9670;&nbsp;</a></span>CopyToOutputTensor()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::CopyToOutputTensor </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor.html">Tensor</a> &amp;&#160;</td>
<td class="paramname"><em>outputTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *&#160;</td>
<td class="paramname"><em>outputTensorHandle</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_loaded_network_8cpp_source.html#l01444">1444</a> of file <a class="el" href="_loaded_network_8cpp_source.html">LoadedNetwork.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;{</div>
<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; <a class="code" href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;CopyOutput&quot;</span>);</div>
<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; <span class="keyword">auto</span> copyFunc = [](<span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, <span class="keywordtype">size_t</span> size)</div>
<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; {</div>
<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; memcpy(dst, src, size);</div>
<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; };</div>
<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; </div>
<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; std::unique_ptr&lt;ITensorHandle&gt; tensorHandle =</div>
<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; std::make_unique&lt;PassthroughTensorHandle&gt;(outputTensor.GetInfo(),</div>
<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; outputTensor.GetMemoryArea());</div>
<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; </div>
<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; <a class="code" href="namespacearmnn.html#a92c91193007aa49f4732d6dba5397f8d">CopyTensorContentsGeneric</a>(outputTensorHandle, tensorHandle.get(), copyFunc);</div>
<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_profiling_8hpp_source.html#l00220">ARMNN_SCOPED_PROFILING_EVENT</a>, <a class="el" href="_workload_utils_8hpp_source.html#l00046">CopyTensorContentsGeneric()</a>, <a class="el" href="_tensor_8hpp_source.html#l00297">BaseTensor&lt; MemoryType &gt;::GetInfo()</a>, <a class="el" href="_tensor_8hpp_source.html#l00307">BaseTensor&lt; MemoryType &gt;::GetMemoryArea()</a>, and <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
<p class="reference">Referenced by <a class="el" href="_loaded_network_8cpp_source.html#l01803">LoadedNetwork::Execute()</a>.</p>
</div>
</div>
<a id="a5e783a951642781b9e7b55db06a514b7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5e783a951642781b9e7b55db06a514b7">&#9670;&nbsp;</a></span>CreateAclNormalizationLayerInfoForL2Normalization()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">arm_compute::NormalizationLayerInfo armnn::CreateAclNormalizationLayerInfoForL2Normalization </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>tensorInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>&#160;</td>
<td class="paramname"><em>dataLayout</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.html#l00029">29</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.html">ArmComputeUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> depthDimension = dataLayout == <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a> ? 1 : 3;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> depth = tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[depthDimension];</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="comment">// At the time of writing, {CL|Neon}L2Normalization performs the reduction only along dimension 0. This version of</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// L2 Normalization always performs the reduction along the depth axis, though. Thus, we repurpose</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">// {CL|Neon}NormalizationLayers to act as depthwise L2 normalizations by carefully chosing the normalization</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="comment">// parameters.</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">// Please refer to both the reference implementation of the normalization layer and the implementation of</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">// {CL|Neon}NormalizationLayer when checking the derivations for the parameter values below.</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// Make sure normalization covers the entire depth range. ACL requires the normalization size to be odd.</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">// CL: This does not result in extra kernel threads not doing any work: See usage of the RADIUS parameter in</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">// ACL&#39;s normalization_layer_cross_map() CL function.</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">const</span> uint32_t normSize = depth * 2u + 1u;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">// See ACL&#39;s NormalizationLayerInfo::scale_coeff() definition.</span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="comment">// For the reference implementation, to make alpha_ become 1, we&#39;d have to use alpha = normSize instead.</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> alpha = 1.0f;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="comment">// Don&#39;t offset the reduction.</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> kappa = 0.0f;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="comment">// pow(reduction, -0.5) = 1 / sqrt(reduction)</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> beta = 0.5f;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">return</span> arm_compute::NormalizationLayerInfo(arm_compute::NormType::CROSS_MAP, normSize, alpha, beta, kappa, <span class="keyword">false</span>);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, and <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>.</p>
</div>
</div>
<a id="ac845f99ae84c2fcf016b676769da7c51"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac845f99ae84c2fcf016b676769da7c51">&#9670;&nbsp;</a></span>CreateClContext()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">flatbuffers::Offset&lt;ClContext&gt; armnn::CreateClContext </td>
<td>(</td>
<td class="paramtype">flatbuffers::FlatBufferBuilder &amp;&#160;</td>
<td class="paramname"><em>_fbb</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">flatbuffers::Offset&lt; flatbuffers::Vector&lt; flatbuffers::Offset&lt; armnn::Program &gt;&gt;&gt;&#160;</td>
<td class="paramname"><em>programs</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.html#l00057">57</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.html">ClContextSchema_generated.h</a>.</p>
<div class="fragment"><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; {</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; ClContextBuilder builder_(_fbb);</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; builder_.add_programs(programs);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> builder_.Finish();</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.html#l00042">ClContextBuilder::add_programs()</a>, and <a class="el" href="_cl_context_schema__generated_8h_source.html#l00050">ClContextBuilder::Finish()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_context_schema__generated_8h_source.html#l00065">CreateClContextDirect()</a>, and <a class="el" href="_cl_context_serializer_8cpp_source.html#l00023">ClContextSerializer::Serialize()</a>.</p>
</div>
</div>
<a id="a8e0f170f651bf2e8d101b923b33efe5e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8e0f170f651bf2e8d101b923b33efe5e">&#9670;&nbsp;</a></span>CreateClContextDirect()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">flatbuffers::Offset&lt;ClContext&gt; armnn::CreateClContextDirect </td>
<td>(</td>
<td class="paramtype">flatbuffers::FlatBufferBuilder &amp;&#160;</td>
<td class="paramname"><em>_fbb</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; flatbuffers::Offset&lt; armnn::Program &gt;&gt; *&#160;</td>
<td class="paramname"><em>programs</em> = <code>nullptr</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.html#l00065">65</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.html">ClContextSchema_generated.h</a>.</p>
<div class="fragment"><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">auto</span> programs__ = programs ? _fbb.CreateVector&lt;flatbuffers::Offset&lt;armnn::Program&gt;&gt;(*programs) : 0;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#ac845f99ae84c2fcf016b676769da7c51">armnn::CreateClContext</a>(</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; _fbb,</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; programs__);</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.html#l00057">CreateClContext()</a>.</p>
</div>
</div>
<a id="a733ae6b70d0bfa43433c3e7606992328"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a733ae6b70d0bfa43433c3e7606992328">&#9670;&nbsp;</a></span>CreateDescriptorForConcatenation()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structarmnn_1_1_origins_descriptor.html">OriginsDescriptor</a> armnn::CreateDescriptorForConcatenation </td>
<td>(</td>
<td class="paramtype">TensorShapeIt&#160;</td>
<td class="paramname"><em>first</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">TensorShapeIt&#160;</td>
<td class="paramname"><em>last</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>concatenationDimension</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Convenience template to create an <a class="el" href="structarmnn_1_1_origins_descriptor.html" title="An OriginsDescriptor for the ConcatLayer.">OriginsDescriptor</a> to use when creating a <a class="el" href="classarmnn_1_1_concat_layer.html" 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.html#l00300">300</a> of file <a class="el" href="_descriptors_8hpp_source.html">Descriptors.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;{</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keyword">auto</span> numInputs = std::distance(first, last);</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; </div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">if</span> (numInputs &lt; 2)</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; {</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Concatenation requires at least 2 inputs&quot;</span>);</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; }</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; </div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; firstInputShape = *first;</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; </div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDimensions = firstInputShape.GetNumDimensions();</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = first + 1; it != last; ++it)</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; {</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">if</span> (it-&gt;GetNumDimensions() != numDimensions)</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; {</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;All inputs to concatenation must have the same number of dimensions&quot;</span>);</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; }</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; }</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; </div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">if</span> (concatenationDimension &gt;= numDimensions)</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; {</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;concatenationDimension must be between 0 and the number of dimensions.&quot;</span>);</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; }</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; </div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = first; it != last; ++it)</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; {</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> d = 0; d &lt; numDimensions; ++d)</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; {</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> dimSizeOk = (d == concatenationDimension) || (firstInputShape[d] == (*it)[d]);</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">if</span> (!dimSizeOk)</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; {</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;All inputs to concatenation must be the same size along all dimensions &quot;</span></div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="stringliteral">&quot; except the concatenation dimension&quot;</span>);</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; }</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; }</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; }</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; </div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; OriginsDescriptor viewsDescriptor(<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(numInputs), numDimensions);</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; viewsDescriptor.SetConcatAxis(concatenationDimension);</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; </div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; uint32_t viewIndex = 0u;</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; uint32_t coordAlongConcatDim = 0u;</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = first; it != last; ++it)</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; {</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; inputShape = *it;</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; </div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; concatenationDimension; ++i)</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; {</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; viewsDescriptor.SetViewOriginCoord(viewIndex, i, 0);</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; }</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; </div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; viewsDescriptor.SetViewOriginCoord(viewIndex, concatenationDimension, coordAlongConcatDim);</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimSize = inputShape[concatenationDimension];</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; coordAlongConcatDim += dimSize;</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; </div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; </div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = concatenationDimension + 1; i &lt; numDimensions; ++i)</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; {</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; viewsDescriptor.SetViewOriginCoord(viewIndex, i, 0);</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; }</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; </div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; ++viewIndex;</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; }</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; </div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">return</span> viewsDescriptor;</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8cpp_source.html#l00158">OriginsDescriptor::SetConcatAxis()</a>, and <a class="el" href="_descriptors_8cpp_source.html#l00167">OriginsDescriptor::SetViewOriginCoord()</a>.</p>
</div>
</div>
<a id="a3f6dfcc7396ea476f96658ae6cb02b54"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3f6dfcc7396ea476f96658ae6cb02b54">&#9670;&nbsp;</a></span>CreateInputsFrom()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_subgraph_view.html#a5cc65e15002dbc33a5c8a7d6680e9a9d">SubgraphView::InputSlots</a> armnn::CreateInputsFrom </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> *&#160;</td>
<td class="paramname"><em>layer</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00042">42</a> of file <a class="el" href="_gpu_fsa_backend_8cpp_source.html">GpuFsaBackend.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;{</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; SubgraphView::InputSlots result;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; it = layer-&gt;BeginInputSlots(); it != layer-&gt;EndInputSlots(); ++it)</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; result.push_back(&amp;(*it));</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_layer_8hpp_source.html#l00262">Layer::BeginInputSlots()</a>, and <a class="el" href="_layer_8hpp_source.html#l00263">Layer::EndInputSlots()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00220">GpuFsaBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="a047e95685b63fedaa1d2ebb3b9428ff5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a047e95685b63fedaa1d2ebb3b9428ff5">&#9670;&nbsp;</a></span>CreateOutputsFrom()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_subgraph_view.html#a78293334750ec5279eb9c96d56deaf08">SubgraphView::OutputSlots</a> armnn::CreateOutputsFrom </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> *&#160;</td>
<td class="paramname"><em>layer</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00052">52</a> of file <a class="el" href="_gpu_fsa_backend_8cpp_source.html">GpuFsaBackend.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;{</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; SubgraphView::OutputSlots result;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; it = layer-&gt;BeginOutputSlots(); it != layer-&gt;EndOutputSlots(); ++it)</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; {</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; result.push_back(&amp;(*it));</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_layer_8hpp_source.html#l00266">Layer::BeginOutputSlots()</a>, and <a class="el" href="_layer_8hpp_source.html#l00267">Layer::EndOutputSlots()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00220">GpuFsaBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="a0f37510801ba4f2500e4e9558c81f93c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0f37510801ba4f2500e4e9558c81f93c">&#9670;&nbsp;</a></span>CreateProgram()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">flatbuffers::Offset&lt;Program&gt; armnn::CreateProgram </td>
<td>(</td>
<td class="paramtype">flatbuffers::FlatBufferBuilder &amp;&#160;</td>
<td class="paramname"><em>_fbb</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">flatbuffers::Offset&lt; flatbuffers::String &gt;&#160;</td>
<td class="paramname"><em>name</em> = <code>0</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">flatbuffers::Offset&lt; flatbuffers::Vector&lt; uint8_t &gt;&gt;&#160;</td>
<td class="paramname"><em>binary</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.html#l00118">118</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.html">ClContextSchema_generated.h</a>.</p>
<div class="fragment"><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; ProgramBuilder builder_(_fbb);</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; builder_.add_binary(binary);</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; builder_.add_name(name);</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> builder_.Finish();</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.html#l00103">ProgramBuilder::add_binary()</a>, <a class="el" href="_cl_context_schema__generated_8h_source.html#l00100">ProgramBuilder::add_name()</a>, and <a class="el" href="_cl_context_schema__generated_8h_source.html#l00111">ProgramBuilder::Finish()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_context_schema__generated_8h_source.html#l00128">CreateProgramDirect()</a>, and <a class="el" href="_cl_context_serializer_8cpp_source.html#l00023">ClContextSerializer::Serialize()</a>.</p>
</div>
</div>
<a id="a6c31acdf17825e7ec0ec0da7e129cb69"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6c31acdf17825e7ec0ec0da7e129cb69">&#9670;&nbsp;</a></span>CreateProgramDirect()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">flatbuffers::Offset&lt;Program&gt; armnn::CreateProgramDirect </td>
<td>(</td>
<td class="paramtype">flatbuffers::FlatBufferBuilder &amp;&#160;</td>
<td class="paramname"><em>_fbb</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>name</em> = <code>nullptr</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; uint8_t &gt; *&#160;</td>
<td class="paramname"><em>binary</em> = <code>nullptr</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.html#l00128">128</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.html">ClContextSchema_generated.h</a>.</p>
<div class="fragment"><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keyword">auto</span> name__ = name ? _fbb.CreateString(name) : 0;</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keyword">auto</span> binary__ = binary ? _fbb.CreateVector&lt;uint8_t&gt;(*binary) : 0;</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a0f37510801ba4f2500e4e9558c81f93c">armnn::CreateProgram</a>(</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; _fbb,</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; name__,</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; binary__);</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.html#l00118">CreateProgram()</a>.</p>
</div>
</div>
<a id="a5ce134e586578a4c448a128f95b4d7af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5ce134e586578a4c448a128f95b4d7af">&#9670;&nbsp;</a></span>CreateSubgraphViewFrom()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_subgraph_view.html#ad5fc1b5213dcb72c0d4ac9dfb46ef677">SubgraphView::SubgraphViewPtr</a> armnn::CreateSubgraphViewFrom </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_subgraph_view.html#a5cc65e15002dbc33a5c8a7d6680e9a9d">SubgraphView::InputSlots</a> &amp;&amp;&#160;</td>
<td class="paramname"><em>inputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_subgraph_view.html#a78293334750ec5279eb9c96d56deaf08">SubgraphView::OutputSlots</a> &amp;&amp;&#160;</td>
<td class="paramname"><em>outputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_subgraph_view.html#a74798938fdaeae75c8adfa4a7439e7f9">SubgraphView::Layers</a> &amp;&amp;&#160;</td>
<td class="paramname"><em>layers</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00062">62</a> of file <a class="el" href="_gpu_fsa_backend_8cpp_source.html">GpuFsaBackend.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;{</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SubgraphView&gt;(std::move(inputs), std::move(outputs), std::move(layers));</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00220">GpuFsaBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="a1ec6b4c20ed294a96cf94c33c24caaf5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1ec6b4c20ed294a96cf94c33c24caaf5">&#9670;&nbsp;</a></span>CreateSupportedBackends()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> CreateSupportedBackends </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.html">TensorHandleFactoryRegistry</a> &amp;&#160;</td>
<td class="paramname"><em>handleFactoryRegistry</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_backend_settings.html">BackendSettings</a> &amp;&#160;</td>
<td class="paramname"><em>backendSettings</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01302">1302</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;{</div>
<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <a class="code" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> backends;</div>
<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span>&amp; backendRegistry = <a class="code" href="namespacearmnn.html#ac2807505b850738bc8a1991ce669dd47">BackendRegistryInstance</a>();</div>
<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; selectedBackend : backendSettings.m_SupportedBackends)</div>
<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; {</div>
<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; <span class="keyword">auto</span> backendFactory = backendRegistry.GetFactory(selectedBackend);</div>
<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <span class="keyword">auto</span> backendObjPtr = backendFactory();</div>
<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; </div>
<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; backendObjPtr-&gt;RegisterTensorHandleFactories(handleFactoryRegistry);</div>
<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; </div>
<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; backends[backendObjPtr-&gt;GetId()] = std::move(backendObjPtr);</div>
<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; }</div>
<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; </div>
<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; <span class="keywordflow">return</span> backends;</div>
<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_registry_8cpp_source.html#l00015">BackendRegistryInstance()</a>, and <a class="el" href="_backend_settings_8hpp_source.html#l00021">BackendSettings::m_SupportedBackends</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01906">Optimize()</a>.</p>
</div>
</div>
<a id="a181ecb133401da6ff2916c192ca04d48"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a181ecb133401da6ff2916c192ca04d48">&#9670;&nbsp;</a></span>Debug()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Debug </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const T *&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>&#160;</td>
<td class="paramname"><em>guid</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>layerName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>slotIndex</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>outputsToFile</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_debug_8cpp_source.html#l00097">97</a> of file <a class="el" href="_debug_8cpp_source.html">Debug.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;{</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span> (outputsToFile)</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="preprocessor">#if !defined(ARMNN_DISABLE_FILESYSTEM)</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; fs::path tmpDir = fs::temp_directory_path();</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; std::ofstream out(tmpDir.generic_string() + <span class="stringliteral">&quot;/ArmNNIntermediateLayerOutputs/&quot;</span> + layerName + <span class="stringliteral">&quot;.numpy&quot;</span>);</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; PrintOutput&lt;T&gt;(inputInfo, inputData, guid, layerName, slotIndex, out);</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; out.close();</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; {</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; PrintOutput&lt;T&gt;(inputInfo, inputData, guid, layerName, slotIndex, std::cout);</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="acea0491173b09308ca626ea65e70e1d8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acea0491173b09308ca626ea65e70e1d8">&#9670;&nbsp;</a></span>Debug&lt; BFloat16 &gt;()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">template void <a class="el" href="namespacearmnn.html#a181ecb133401da6ff2916c192ca04d48">armnn::Debug</a>&lt; <a class="el" href="classarmnn_1_1_b_float16.html">BFloat16</a> &gt; </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_b_float16.html">BFloat16</a> *&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>&#160;</td>
<td class="paramname"><em>guid</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>layerName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>slotIndex</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>outputsToFile</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="af34b15ddc0dcee095162820e88d84808"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af34b15ddc0dcee095162820e88d84808">&#9670;&nbsp;</a></span>Debug&lt; float &gt;()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">template void <a class="el" href="namespacearmnn.html#a181ecb133401da6ff2916c192ca04d48">armnn::Debug</a>&lt; float &gt; </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const float *&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>&#160;</td>
<td class="paramname"><em>guid</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>layerName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>slotIndex</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>outputsToFile</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a4dbfaabd2d65dc91bc8bd4d0b5e1ed07"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4dbfaabd2d65dc91bc8bd4d0b5e1ed07">&#9670;&nbsp;</a></span>Debug&lt; Half &gt;()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">template void <a class="el" href="namespacearmnn.html#a181ecb133401da6ff2916c192ca04d48">armnn::Debug</a>&lt; <a class="el" href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">Half</a> &gt; </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">Half</a> *&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>&#160;</td>
<td class="paramname"><em>guid</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>layerName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>slotIndex</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>outputsToFile</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a62669f61a81677f5ca4b1f21bb7d45d8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a62669f61a81677f5ca4b1f21bb7d45d8">&#9670;&nbsp;</a></span>Debug&lt; int16_t &gt;()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">template void <a class="el" href="namespacearmnn.html#a181ecb133401da6ff2916c192ca04d48">armnn::Debug</a>&lt; int16_t &gt; </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int16_t *&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>&#160;</td>
<td class="paramname"><em>guid</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>layerName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>slotIndex</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>outputsToFile</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a77e5a9b94927bee9c48010efd2dec2b0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a77e5a9b94927bee9c48010efd2dec2b0">&#9670;&nbsp;</a></span>Debug&lt; int32_t &gt;()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">template void <a class="el" href="namespacearmnn.html#a181ecb133401da6ff2916c192ca04d48">armnn::Debug</a>&lt; int32_t &gt; </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int32_t *&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>&#160;</td>
<td class="paramname"><em>guid</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>layerName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>slotIndex</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>outputsToFile</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a43a27d876cf8cab5f5d45163a05908e9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a43a27d876cf8cab5f5d45163a05908e9">&#9670;&nbsp;</a></span>Debug&lt; int64_t &gt;()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">template void <a class="el" href="namespacearmnn.html#a181ecb133401da6ff2916c192ca04d48">armnn::Debug</a>&lt; int64_t &gt; </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int64_t *&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>&#160;</td>
<td class="paramname"><em>guid</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>layerName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>slotIndex</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>outputsToFile</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a31a77914be2a7b9d8c6d22036df869d8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a31a77914be2a7b9d8c6d22036df869d8">&#9670;&nbsp;</a></span>Debug&lt; int8_t &gt;()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">template void <a class="el" href="namespacearmnn.html#a181ecb133401da6ff2916c192ca04d48">armnn::Debug</a>&lt; int8_t &gt; </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int8_t *&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>&#160;</td>
<td class="paramname"><em>guid</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>layerName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>slotIndex</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>outputsToFile</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="af5cd3e7fcb637ffad7644cdd2e19a8ae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af5cd3e7fcb637ffad7644cdd2e19a8ae">&#9670;&nbsp;</a></span>Debug&lt; uint8_t &gt;()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">template void <a class="el" href="namespacearmnn.html#a181ecb133401da6ff2916c192ca04d48">armnn::Debug</a>&lt; uint8_t &gt; </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>&#160;</td>
<td class="paramname"><em>guid</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>layerName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>slotIndex</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>outputsToFile</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a7dacd5f6b52fd93bfd536976d27f8293"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7dacd5f6b52fd93bfd536976d27f8293">&#9670;&nbsp;</a></span>DeleteAsType()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void DeleteAsType </td>
<td>(</td>
<td class="paramtype">const void *const&#160;</td>
<td class="paramname"><em>blob</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00037">37</a> of file <a class="el" href="_gpu_fsa_backend_8cpp_source.html">GpuFsaBackend.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;{</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">delete</span> <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>T*<span class="keyword">&gt;</span>(blob);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ab023d9a7687e35c0f108458a094c1f56"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab023d9a7687e35c0f108458a094c1f56">&#9670;&nbsp;</a></span>DepthToSpace()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void DepthToSpace </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>outputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>dataTypeSize</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_depth_to_space_8cpp_source.html#l00016">16</a> of file <a class="el" href="_depth_to_space_8cpp_source.html">DepthToSpace.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockSize = descriptor.<a class="code" href="structarmnn_1_1_space_to_depth_descriptor.html#a6c6b8957f1e176867e5fb05b1a1a1486">m_BlockSize</a>;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>&amp; inputShape = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batches = inputShape[0];</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html">armnnUtils::DataLayoutIndexed</a> dataLayoutIndexed(descriptor.<a class="code" href="structarmnn_1_1_space_to_depth_descriptor.html#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inDepth = inputShape[dataLayoutIndexed.GetChannelsIndex()];</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inHeight = inputShape[dataLayoutIndexed.GetHeightIndex()];</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inWidth = inputShape[dataLayoutIndexed.GetWidthIndex()];</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outDepth = inDepth / (blockSize * blockSize);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="comment">// The 4D input data can be interpreted as 6D (implicitly reshaped) as follows:</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// [batch, block size, block size, inDepth, inHeight, inWidth] for NCHW and</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">// [batch, inHeight, inWidth, blockSize, blockSize, outDepth] for NHWC.</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// DepthToSpace can then be implemented as a permutation in 6D resulting in</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">// the following shapes:</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">// [batch, outDepth, inHeight, blockSize, inWidth, blockSize] for NCHW and</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// [batch, inHeight, blockSize, inWidth, blockSize, outDepth] for NHWC.</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">// NOTE:</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="comment">// Since 6D tensors are not currently supported, in practice we need to handle each</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="comment">// batch separately and execute 5D permutations</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> permDestShape;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="classarmnn_1_1_permutation_vector.html">PermutationVector</a> permVector{};</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (descriptor.<a class="code" href="structarmnn_1_1_space_to_depth_descriptor.html#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> == DataLayout::NCHW)</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; permDestShape = <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>({ outDepth, inHeight, blockSize, inWidth, blockSize });</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; permVector = { 2, 4, 0, 1, 3 };</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; }</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; {</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; permDestShape = <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>({ inHeight, blockSize, inWidth, blockSize, outDepth });</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; permVector = { 0, 2, 1, 3, 4 };</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; </div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <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.html#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>() / batches;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; </div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchIndex = 0u; batchIndex &lt; batches; ++batchIndex)</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">const</span> uintptr_t batchDataOffset = batchIndex * (numElementsPerBatch * dataTypeSize);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="namespacearmnn_utils.html#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(permDestShape,</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; permVector,</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">void</span>*<span class="keyword">&gt;</span>(<span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(inputData) + batchDataOffset),</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">void</span>*<span class="keyword">&gt;</span>(<span class="keyword">reinterpret_cast&lt;</span>uint8_t*<span class="keyword">&gt;</span>(outputData) + batchDataOffset),</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; dataTypeSize);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_depth_to_space_8cpp_source.html#l00016">DepthToSpace()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_tensor_8cpp_source.html#l00181">TensorShape::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.html#l01092">SpaceToDepthDescriptor::m_BlockSize</a>, <a class="el" href="_descriptors_8hpp_source.html#l01095">SpaceToDepthDescriptor::m_DataLayout</a>, and <a class="el" href="_permute_8cpp_source.html#l00164">armnnUtils::Permute()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_depth_to_space_8cpp_source.html#l00016">DepthToSpace()</a>.</p>
</div>
</div>
<a id="a1204727d8ce3ee1e60daf08079eb892e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1204727d8ce3ee1e60daf08079eb892e">&#9670;&nbsp;</a></span>Dequantize() <span class="overload">[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 armnn::Dequantize </td>
<td>(</td>
<td class="paramtype">const T *&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float *&#160;</td>
<td class="paramname"><em>outputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.html#l00113">113</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.html">RefWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;{</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements(); i++)</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; {</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; outputData[i] = Dequantize&lt;T&gt;(inputData[i], <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(), <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; }</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
</div>
</div>
<a id="a4144d7535639c617fca0d095379493f0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4144d7535639c617fca0d095379493f0">&#9670;&nbsp;</a></span>Dequantize() <span class="overload">[2/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;float&gt; armnn::Dequantize </td>
<td>(</td>
<td class="paramtype">const T *&#160;</td>
<td class="paramname"><em>quant</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>u8 helpers </p>
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.html#l00102">102</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.html">RefWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;{</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; std::vector&lt;float&gt; ret(<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements());</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements(); i++)</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; {</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; ret[i] = <a class="code" href="namespacearmnn.html#a855293b1be0581fb61ef6a1c5b027d0f">armnn::Dequantize</a>(quant[i], <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(), <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">return</span> ret;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_types_utils_8cpp_source.html#l00048">Dequantize()</a>, and <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
</div>
</div>
<a id="acae7e910f899ae67340c9ce29e406a86"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acae7e910f899ae67340c9ce29e406a86">&#9670;&nbsp;</a></span>Dequantize() <span class="overload">[3/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Dequantize </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>inputDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>outputEncoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_dequantize_8cpp_source.html#l00011">11</a> of file <a class="el" href="_dequantize_8cpp_source.html">Dequantize.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{</div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; inputInfo.GetNumElements() == outputInfo.GetNumElements(),</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="stringliteral">&quot;Dequantize: The number of elements in the input and output tensors must be the same.&quot;</span>);</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; inputInfo.GetNumElements(); i++)</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; {</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="comment">// inputDecoder.Get() dequantizes the data element from whatever</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="comment">// type is given by inputInfo to fp32 (If MakeDecoder supports that dequantization)</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="comment">// outputEncoder.Set() transforms the data element to whatever type is</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="comment">// given by outputInfo (if MakeEncoder supports that transformation)</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; outputEncoder.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputDecoder.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>());</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; ++outputEncoder;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; ++inputDecoder;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; }</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>, <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.html#l00198">TensorInfo::GetNumElements()</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="a855293b1be0581fb61ef6a1c5b027d0f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a855293b1be0581fb61ef6a1c5b027d0f">&#9670;&nbsp;</a></span>Dequantize() <span class="overload">[4/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">float Dequantize </td>
<td>(</td>
<td class="paramtype">QuantizedType&#160;</td>
<td class="paramname"><em>value</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>scale</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int32_t&#160;</td>
<td class="paramname"><em>offset</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Dequantize an 8-bit data type into a floating point data type. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">value</td><td>- The value to dequantize. </td></tr>
<tr><td class="paramname">scale</td><td>- The scale (must be non-zero). </td></tr>
<tr><td class="paramname">offset</td><td>- The offset. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>- The dequantized value calculated as (value-offset)*scale. </dd></dl>
<p class="definition">Definition at line <a class="el" href="_types_utils_8cpp_source.html#l00048">48</a> of file <a class="el" href="_types_utils_8cpp_source.html">TypesUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;{</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; static_assert(IsQuantizedType&lt;QuantizedType&gt;(), <span class="stringliteral">&quot;Not an integer type.&quot;</span>);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (std::isnan(value))</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Dequantize: Value is NaN&quot;</span>);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">return</span> (armnn::numeric_cast&lt;float&gt;(value - offset)) * scale;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_base_iterator_8hpp_source.html#l00124">QASymm8Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.html#l00158">QASymmS8Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.html#l00192">QSymmS8Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.html#l00226">QSymm16Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.html#l00813">QSymm8PerAxisDecoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.html#l00876">ScaledInt32PerAxisDecoder::DecodeTensor()</a>, <a class="el" href="_quantize_helper_8hpp_source.html#l00030">SelectiveQuantizer&lt; T, DoQuantize &gt;::Dequantize()</a>, <a class="el" href="_ref_workload_utils_8hpp_source.html#l00102">Dequantize()</a>, <a class="el" href="_base_iterator_8hpp_source.html#l00120">QASymm8Decoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.html#l00154">QASymmS8Decoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.html#l00188">QSymmS8Decoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.html#l00222">QSymm16Decoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.html#l00500">QASymm8Encoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.html#l00524">QASymmS8Encoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.html#l00548">QSymmS8Encoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.html#l00572">QSymm16Encoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.html#l00802">QSymm8PerAxisDecoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.html#l00842">QSymm8PerAxisEncoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.html#l00865">ScaledInt32PerAxisDecoder::Get()</a>, and <a class="el" href="_base_iterator_8hpp_source.html#l00921">QSymm16PerAxisEncoder::Get()</a>.</p>
</div>
</div>
<a id="a5826c31d9342002f512999ce89841073"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5826c31d9342002f512999ce89841073">&#9670;&nbsp;</a></span>DetectionPostProcess()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void DetectionPostProcess </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>boxEncodingsInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>scoresInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>detectionBoxesInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_detection_post_process_descriptor.html">DetectionPostProcessDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>desc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>boxEncodings</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>scores</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>anchors</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float *&#160;</td>
<td class="paramname"><em>detectionBoxes</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float *&#160;</td>
<td class="paramname"><em>detectionClasses</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float *&#160;</td>
<td class="paramname"><em>detectionScores</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float *&#160;</td>
<td class="paramname"><em>numDetections</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_detection_post_process_8cpp_source.html#l00139">139</a> of file <a class="el" href="_detection_post_process_8cpp_source.html">DetectionPostProcess.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;{</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; </div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="comment">// Transform center-size format which is (ycenter, xcenter, height, width) to box-corner format,</span></div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="comment">// which represents the lower left corner and the upper right corner (ymin, xmin, ymax, xmax)</span></div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; std::vector&lt;float&gt; boxCorners(boxEncodingsInfo.GetNumElements());</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; </div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numBoxes = boxEncodingsInfo.GetShape()[1];</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numScores = scoresInfo.GetNumElements();</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; </div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numBoxes; ++i)</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; {</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="comment">// Y</span></div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordtype">float</span> boxEncodingY = boxEncodings.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordtype">float</span> anchorY = anchors.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; </div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; ++boxEncodings;</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; ++anchors;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; </div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="comment">// X</span></div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordtype">float</span> boxEncodingX = boxEncodings.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordtype">float</span> anchorX = anchors.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; </div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; ++boxEncodings;</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; ++anchors;</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; </div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="comment">// H</span></div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordtype">float</span> boxEncodingH = boxEncodings.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordtype">float</span> anchorH = anchors.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; </div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; ++boxEncodings;</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; ++anchors;</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; </div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="comment">// W</span></div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordtype">float</span> boxEncodingW = boxEncodings.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordtype">float</span> anchorW = anchors.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; </div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; ++boxEncodings;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; ++anchors;</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; </div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordtype">float</span> yCentre = boxEncodingY / desc.m_ScaleY * anchorH + anchorY;</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordtype">float</span> xCentre = boxEncodingX / desc.m_ScaleX * anchorW + anchorX;</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; </div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordtype">float</span> halfH = 0.5f * expf(boxEncodingH / desc.m_ScaleH) * anchorH;</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordtype">float</span> halfW = 0.5f * expf(boxEncodingW / desc.m_ScaleW) * anchorW;</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; </div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexY = i * 4;</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexX = indexY + 1;</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexH = indexX + 1;</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexW = indexH + 1;</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; </div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="comment">// ymin</span></div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; boxCorners[indexY] = yCentre - halfH;</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="comment">// xmin</span></div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; boxCorners[indexX] = xCentre - halfW;</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="comment">// ymax</span></div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; boxCorners[indexH] = yCentre + halfH;</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="comment">// xmax</span></div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; boxCorners[indexW] = xCentre + halfW;</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; </div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numClassesWithBg = desc.m_NumClasses + 1;</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; </div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="comment">// Decode scores</span></div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; std::vector&lt;float&gt; decodedScores;</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; decodedScores.reserve(numScores);</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; </div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i &lt; numScores; ++i)</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; {</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; decodedScores.emplace_back(scores.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>());</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; ++scores;</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; </div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="comment">// Perform Non Max Suppression.</span></div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">if</span> (desc.m_UseRegularNms)</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; {</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="comment">// Perform Regular NMS.</span></div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="comment">// For each class, perform NMS and select max detection numbers of the highest score across all classes.</span></div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; std::vector&lt;float&gt; classScores(numBoxes);</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; </div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; std::vector&lt;unsigned int&gt; selectedBoxesAfterNms;</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; selectedBoxesAfterNms.reserve(numBoxes);</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; </div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; std::vector&lt;float&gt; selectedScoresAfterNms;</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; selectedBoxesAfterNms.reserve(numScores);</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; </div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; std::vector&lt;unsigned int&gt; selectedClasses;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; </div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; desc.m_NumClasses; ++c)</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; {</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// For each boxes, get scores of the boxes for the class c.</span></div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numBoxes; ++i)</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; {</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; classScores[i] = decodedScores[i * numClassesWithBg + c + 1];</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; std::vector&lt;unsigned int&gt; selectedIndices = <a class="code" href="namespacearmnn.html#ac8c641d4a69c9a85c487cfbc7ea4d73c">NonMaxSuppression</a>(numBoxes,</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; boxCorners,</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; classScores,</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; desc.m_NmsScoreThreshold,</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; desc.m_DetectionsPerClass,</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; desc.m_NmsIouThreshold);</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; </div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; selectedIndices.size(); ++i)</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; {</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; selectedBoxesAfterNms.push_back(selectedIndices[i]);</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; selectedScoresAfterNms.push_back(classScores[selectedIndices[i]]);</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; selectedClasses.push_back(c);</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; }</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; </div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// Select max detection numbers of the highest score across all classes</span></div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numSelected = armnn::numeric_cast&lt;unsigned int&gt;(selectedBoxesAfterNms.size());</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutput = std::min(desc.m_MaxDetections, numSelected);</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; </div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="comment">// Sort the max scores among the selected indices.</span></div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; std::vector&lt;unsigned int&gt; outputIndices = <a class="code" href="namespacearmnn.html#ae8ed5c640761fb6744aec0ee16388417">GenerateRangeK</a>(numSelected);</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <a class="code" href="namespacearmnn.html#a2748f45e58b1c612d473043f711d1434">TopKSort</a>(numOutput, outputIndices.data(), selectedScoresAfterNms.data(), numSelected);</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; </div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="namespacearmnn.html#ae8dcbb74cf0c855724f12833a55a5684">AllocateOutputData</a>(detectionBoxesInfo.GetShape()[1], numOutput, boxCorners, outputIndices,</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; selectedBoxesAfterNms, selectedClasses, selectedScoresAfterNms,</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; detectionBoxes, detectionScores, detectionClasses, numDetections);</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; {</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="comment">// Perform Fast NMS.</span></div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="comment">// Select max scores of boxes and perform NMS on max scores,</span></div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="comment">// select max detection numbers of the highest score</span></div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numClassesPerBox = std::min(desc.m_MaxClassesPerDetection, desc.m_NumClasses);</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; std::vector&lt;float&gt; maxScores;</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; std::vector&lt;unsigned int&gt;boxIndices;</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; std::vector&lt;unsigned int&gt;maxScoreClasses;</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; </div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> box = 0; box &lt; numBoxes; ++box)</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; {</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> scoreIndex = box * numClassesWithBg + 1;</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; </div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="comment">// Get the max scores of the box.</span></div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; std::vector&lt;unsigned int&gt; maxScoreIndices = <a class="code" href="namespacearmnn.html#ae8ed5c640761fb6744aec0ee16388417">GenerateRangeK</a>(desc.m_NumClasses);</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="namespacearmnn.html#a2748f45e58b1c612d473043f711d1434">TopKSort</a>(numClassesPerBox, maxScoreIndices.data(),</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; decodedScores.data() + scoreIndex, desc.m_NumClasses);</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; </div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numClassesPerBox; ++i)</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; {</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; maxScores.push_back(decodedScores[scoreIndex + maxScoreIndices[i]]);</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; maxScoreClasses.push_back(maxScoreIndices[i]);</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; boxIndices.push_back(box);</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; }</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; </div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="comment">// Perform NMS on max scores</span></div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; std::vector&lt;unsigned int&gt; selectedIndices = <a class="code" href="namespacearmnn.html#ac8c641d4a69c9a85c487cfbc7ea4d73c">NonMaxSuppression</a>(numBoxes, boxCorners, maxScores,</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; desc.m_NmsScoreThreshold,</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; desc.m_MaxDetections,</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; desc.m_NmsIouThreshold);</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; </div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numSelected = armnn::numeric_cast&lt;unsigned int&gt;(selectedIndices.size());</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutput = std::min(desc.m_MaxDetections, numSelected);</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; </div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <a class="code" href="namespacearmnn.html#ae8dcbb74cf0c855724f12833a55a5684">AllocateOutputData</a>(detectionBoxesInfo.GetShape()[1], numOutput, boxCorners, selectedIndices,</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; boxIndices, maxScoreClasses, maxScores,</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; detectionBoxes, detectionScores, detectionClasses, numDetections);</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_detection_post_process_8cpp_source.html#l00101">AllocateOutputData()</a>, <a class="el" href="_detection_post_process_8cpp_source.html#l00016">GenerateRangeK()</a>, <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.html#l00198">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_descriptors_8hpp_source.html#l00749">DetectionPostProcessDescriptor::m_DetectionsPerClass</a>, <a class="el" href="_descriptors_8hpp_source.html#l00747">DetectionPostProcessDescriptor::m_MaxClassesPerDetection</a>, <a class="el" href="_descriptors_8hpp_source.html#l00745">DetectionPostProcessDescriptor::m_MaxDetections</a>, <a class="el" href="_descriptors_8hpp_source.html#l00753">DetectionPostProcessDescriptor::m_NmsIouThreshold</a>, <a class="el" href="_descriptors_8hpp_source.html#l00751">DetectionPostProcessDescriptor::m_NmsScoreThreshold</a>, <a class="el" href="_descriptors_8hpp_source.html#l00755">DetectionPostProcessDescriptor::m_NumClasses</a>, <a class="el" href="_descriptors_8hpp_source.html#l00765">DetectionPostProcessDescriptor::m_ScaleH</a>, <a class="el" href="_descriptors_8hpp_source.html#l00763">DetectionPostProcessDescriptor::m_ScaleW</a>, <a class="el" href="_descriptors_8hpp_source.html#l00759">DetectionPostProcessDescriptor::m_ScaleX</a>, <a class="el" href="_descriptors_8hpp_source.html#l00761">DetectionPostProcessDescriptor::m_ScaleY</a>, <a class="el" href="_descriptors_8hpp_source.html#l00757">DetectionPostProcessDescriptor::m_UseRegularNms</a>, <a class="el" href="_detection_post_process_8cpp_source.html#l00048">NonMaxSuppression()</a>, and <a class="el" href="_detection_post_process_8cpp_source.html#l00023">TopKSort()</a>.</p>
</div>
</div>
<a id="ae0a1229cfc1151ff1324c026aa50bb03"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae0a1229cfc1151ff1324c026aa50bb03">&#9670;&nbsp;</a></span>ExecuteFunction()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::ExecuteFunction </td>
<td>(</td>
<td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> * &gt;&#160;</td>
<td class="paramname"><em>inputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> * &gt;&#160;</td>
<td class="paramname"><em>outputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047">BinaryOperation</a>&#160;</td>
<td class="paramname"><em>operation</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_elementwise_binary_workload_8cpp_source.html#l00027">27</a> of file <a class="el" href="_ref_elementwise_binary_workload_8cpp_source.html">RefElementwiseBinaryWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> TensorInfo&amp; inputInfo0 = <a class="code" href="namespacearmnn_utils.html#acee63cd08da47910fc166a1990988fa8">GetTensorInfo</a>(inputs[0]);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> TensorInfo&amp; inputInfo1 = <a class="code" href="namespacearmnn_utils.html#acee63cd08da47910fc166a1990988fa8">GetTensorInfo</a>(inputs[1]);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> TensorInfo&amp; outputInfo = <a class="code" href="namespacearmnn_utils.html#acee63cd08da47910fc166a1990988fa8">GetTensorInfo</a>(outputs[0]);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> TensorShape&amp; inShape0 = inputInfo0.GetShape();</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> TensorShape&amp; inShape1 = inputInfo1.GetShape();</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> TensorShape&amp; outShape = outputInfo.GetShape();</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; std::unique_ptr&lt;Decoder&lt;DataType&gt;&gt; input0 = MakeDecoder&lt;DataType&gt;(inputInfo0, inputs[0]-&gt;<a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>());</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; std::unique_ptr&lt;Decoder&lt;DataType&gt;&gt; input1 = MakeDecoder&lt;DataType&gt;(inputInfo1, inputs[1]-&gt;<a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>());</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; std::unique_ptr&lt;Encoder&lt;DataType&gt;&gt; output = MakeEncoder&lt;DataType&gt;(outputInfo, outputs[0]-&gt;<a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>());</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">using</span> AddFunction = ElementwiseBinaryFunction&lt;std::plus&lt;DataType&gt;&gt;;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">using</span> DivFunction = ElementwiseBinaryFunction&lt;std::divides&lt;DataType&gt;&gt;;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">using</span> MaximumFunction = ElementwiseBinaryFunction&lt;armnn::maximum&lt;DataType&gt;&gt;;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">using</span> MinimumFunction = ElementwiseBinaryFunction&lt;armnn::minimum&lt;DataType&gt;&gt;;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">using</span> MulFunction = ElementwiseBinaryFunction&lt;std::multiplies&lt;DataType&gt;&gt;;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">using</span> SubFunction = ElementwiseBinaryFunction&lt;std::minus&lt;DataType&gt;&gt;;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">using</span> SqDiffFunction = ElementwiseBinaryFunction&lt;armnn::squaredDifference&lt;DataType&gt;&gt;;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">using</span> PowerFunction = ElementwiseBinaryFunction&lt;armnn::power&lt;DataType&gt;&gt;;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">switch</span> (operation)</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; {</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Add:</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; AddFunction(inShape0, inShape1, outShape, *input0, *input1, *output);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Div:</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; DivFunction(inShape0, inShape1, outShape, *input0, *input1, *output);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Maximum:</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; MaximumFunction(inShape0, inShape1, outShape, *input0, *input1, *output);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Minimum:</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; MinimumFunction(inShape0, inShape1, outShape, *input0, *input1, *output);</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Mul:</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; MulFunction(inShape0, inShape1, outShape, *input0, *input1, *output);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; }</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Sub:</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; {</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; SubFunction(inShape0, inShape1, outShape, *input0, *input1, *output);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">case</span> BinaryOperation::SqDiff:</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; SqDiffFunction(inShape0, inShape1, outShape, *input0, *input1, *output);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Power:</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; {</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; PowerFunction(inShape0, inShape1, outShape, *input0, *input1, *output);</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; }</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(std::string(<span class="stringliteral">&quot;Unsupported binary operation &quot;</span>) +</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="namespacearmnn.html#aed346b74795fd613f727ca8369778704">GetBinaryOperationAsCString</a>(operation), <a class="code" href="_exceptions_8hpp.html#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>());</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047aec211f7c20af43e742bf2570c3cb84f9">Add</a>, <a class="el" href="_exceptions_8hpp_source.html#l00203">CHECK_LOCATION</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a43d11850893d2fe84a1e618121c1cc0a">Div</a>, <a class="el" href="_types_utils_8hpp_source.html#l00076">GetBinaryOperationAsCString()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_ref_workload_utils_8hpp_source.html#l00033">GetTensorInfo()</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a8321e79c278ec510f63675c040594892">Maximum</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047aa1d0ec6d56f8833a078b5a7ac4caf2d4">Minimum</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a62b6d55816cf737bfc6f42e60df1a3f2">Mul</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047add4fe0cc913f704600b97d1f5dd285de">Power</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a2d17ea57d7f86acde5c60cef8e123a53">SqDiff</a>, and <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047ae80155eceb940c89e2de63ad05868db2">Sub</a>.</p>
</div>
</div>
<a id="a7d4e24d8e296ccced976d626e08b742a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7d4e24d8e296ccced976d626e08b742a">&#9670;&nbsp;</a></span>ExtractJsonObjects()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::ExtractJsonObjects </td>
<td>(</td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>inferenceIndex</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_event.html">Event</a> *&#160;</td>
<td class="paramname"><em>parentEvent</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_json_child_object.html">JsonChildObject</a> &amp;&#160;</td>
<td class="paramname"><em>parentObject</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::map&lt; const <a class="el" href="classarmnn_1_1_event.html">Event</a> *, std::vector&lt; const <a class="el" href="classarmnn_1_1_event.html">Event</a> * &gt;&gt;&#160;</td>
<td class="paramname"><em>descendantsMap</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.html#l00314">314</a> of file <a class="el" href="_profiling_8cpp_source.html">Profiling.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;{</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(parentEvent, <span class="stringliteral">&quot;parentEvent must not be null.&quot;</span>);</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; </div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="comment">// If profiling GUID is entered, process it</span></div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">if</span> (parentEvent-&gt;GetProfilingGuid().has_value())</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; {</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; arm::pipe::ProfilingGuid profilingGuid;</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; profilingGuid = parentEvent-&gt;GetProfilingGuid().value();</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; parentObject.SetGuid(profilingGuid);</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; }</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; std::vector&lt;Measurement&gt; instrumentMeasurements = parentEvent-&gt;GetMeasurements();</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> childIdx = 0;</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numSkippedKernels = 0;</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">if</span> (inferenceIndex &gt; 0)</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; {</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;i: parentEvent-&gt;GetInstruments())</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; {</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">if</span> (i-&gt;HasKernelMeasurements())</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; {</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; numSkippedKernels = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(parentObject.m_Children.size() -</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; instrumentMeasurements.size());</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; childIdx = numSkippedKernels;</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; }</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; }</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; </div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> measurementIndex = 0; measurementIndex &lt; instrumentMeasurements.size(); ++measurementIndex, ++childIdx)</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; {</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">if</span> (inferenceIndex == 0)</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; {</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="comment">// Only add kernel measurement once, in case of multiple inferences</span></div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; JsonChildObject measurementObject{ instrumentMeasurements[measurementIndex].m_Name };</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; measurementObject.SetUnit(instrumentMeasurements[measurementIndex].m_Unit);</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; measurementObject.SetType(JsonObjectType::Measurement);</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; </div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">if</span> (parentObject.NumChildren() != childIdx)</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; {</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;parentObject must have the same number of children as childIdx.&quot;</span>);</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; }</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; parentObject.AddChild(measurementObject);</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; }</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; {</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span> (numSkippedKernels &gt; 0)</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; {</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; parentObject.GetChild(--numSkippedKernels).AddMeasurement(0.0);</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; }</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; }</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; </div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; parentObject.GetChild(childIdx).AddMeasurement(instrumentMeasurements[measurementIndex].m_Value);</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; }</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; </div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keyword">auto</span> childEventsIt = descendantsMap.find(parentEvent);</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">if</span> (childEventsIt != descendantsMap.end())</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; {</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> childEvent : childEventsIt-&gt;second)</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; {</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">if</span> (inferenceIndex == 0)</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; {</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="comment">// Only add second level once, in case of multiple inferences</span></div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; JsonChildObject childObject{ childEvent-&gt;GetName() };</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; childObject.SetType(JsonObjectType::Event);</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; parentObject.AddChild(childObject);</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; }</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; </div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="comment">// It&#39;s possible that childIdx can overrun the parents&#39; child vector. Check before we try to process a</span></div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="comment">// non-existent child.</span></div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">if</span> (childIdx &lt; parentObject.NumChildren())</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; {</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="comment">// Recursively process children.</span></div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <a class="code" href="namespacearmnn.html#a7d4e24d8e296ccced976d626e08b742a">ExtractJsonObjects</a>(inferenceIndex, childEvent, parentObject.GetChild(childIdx), descendantsMap);</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; childIdx++;</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; }</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; }</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_json_printer_8hpp_source.html#l00059">JsonChildObject::AddChild()</a>, <a class="el" href="_json_printer_8hpp_source.html#l00039">JsonChildObject::AddMeasurement()</a>, <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>, <a class="el" href="namespacearmnn.html#a4e2dd387ba6f0dc5164b4cdf8de3262aaa4ecfc70574394990cf17bd83df499f7">Event</a>, <a class="el" href="_json_printer_8hpp_source.html#l00064">JsonChildObject::GetChild()</a>, <a class="el" href="_profiling_event_8cpp_source.html#l00069">Event::GetInstruments()</a>, <a class="el" href="_profiling_event_8cpp_source.html#l00056">Event::GetMeasurements()</a>, <a class="el" href="_profiling_event_8cpp_source.html#l00094">Event::GetProfilingGuid()</a>, <a class="el" href="_optional_8hpp_source.html#l00053">OptionalBase::has_value()</a>, <a class="el" href="_json_printer_8hpp_source.html#l00107">JsonChildObject::m_Children</a>, <a class="el" href="namespacearmnn.html#a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975">Measurement</a>, <a class="el" href="_json_printer_8hpp_source.html#l00074">JsonChildObject::NumChildren()</a>, <a class="el" href="_json_printer_8hpp_source.html#l00054">JsonChildObject::SetGuid()</a>, <a class="el" href="_json_printer_8hpp_source.html#l00079">JsonChildObject::SetType()</a>, <a class="el" href="_json_printer_8hpp_source.html#l00069">JsonChildObject::SetUnit()</a>, and <a class="el" href="_optional_8hpp_source.html#l00146">OptionalReferenceSwitch&lt; IsReference, T &gt;::value()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.html#l00395">ProfilerImpl::Print()</a>.</p>
</div>
</div>
<a id="ab3c0b7e1a78b1b98c24934221f36a7c3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab3c0b7e1a78b1b98c24934221f36a7c3">&#9670;&nbsp;</a></span>FakeQuantization()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::FakeQuantization </td>
<td>(</td>
<td class="paramtype">const float *&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float *&#160;</td>
<td class="paramname"><em>outputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>numElements</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>min</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>max</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_fake_quantization_float32_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_ref_fake_quantization_float32_workload_8cpp_source.html">RefFakeQuantizationFloat32Workload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keywordtype">float</span> scale = (max - min) / 255.f;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; int32_t offset = armnn::numeric_cast&lt;int32_t&gt;((-min * 255.f) / (max - min));</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; numElements; i++)</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; {</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; outputData[i] = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(armnn::Quantize&lt;uint8_t&gt;(inputData[i], scale, offset));</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; }</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a589f726622788501df0463460dac63c1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a589f726622788501df0463460dac63c1">&#9670;&nbsp;</a></span>FalseFunc()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::FalseFunc </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt;&#160;</td>
<td class="paramname"><em>reasonIfUnsupported</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Params &amp;&amp;...&#160;</td>
<td class="paramname"><em>params</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.html#l00062">62</a> of file <a class="el" href="_layer_support_common_8hpp_source.html">LayerSupportCommon.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;{</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(reasonIfUnsupported);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.html#l00014">IgnoreUnused()</a>.</p>
</div>
</div>
<a id="a9b083e0201523891e08a2d86405c4e46"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9b083e0201523891e08a2d86405c4e46">&#9670;&nbsp;</a></span>FalseFuncF16()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::FalseFuncF16 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt;&#160;</td>
<td class="paramname"><em>reasonIfUnsupported</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Params &amp;&amp;...&#160;</td>
<td class="paramname"><em>params</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.html#l00070">70</a> of file <a class="el" href="_layer_support_common_8hpp_source.html">LayerSupportCommon.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;{</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="namespacearmnn.html#a8c88a8a91827e9ccc3cf3ce6b14fcd17">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">&quot;Layer is not supported with float16 data type&quot;</span>);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.html#l00014">IgnoreUnused()</a>, and <a class="el" href="_layer_support_common_8hpp_source.html#l00017">SetValueChecked()</a>.</p>
</div>
</div>
<a id="a5b1231d5607d2dc1909c1cec828ba415"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5b1231d5607d2dc1909c1cec828ba415">&#9670;&nbsp;</a></span>FalseFuncF32()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::FalseFuncF32 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt;&#160;</td>
<td class="paramname"><em>reasonIfUnsupported</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Params &amp;&amp;...&#160;</td>
<td class="paramname"><em>params</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.html#l00078">78</a> of file <a class="el" href="_layer_support_common_8hpp_source.html">LayerSupportCommon.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;{</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="namespacearmnn.html#a8c88a8a91827e9ccc3cf3ce6b14fcd17">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">&quot;Layer is not supported with float32 data type&quot;</span>);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.html#l00014">IgnoreUnused()</a>, and <a class="el" href="_layer_support_common_8hpp_source.html#l00017">SetValueChecked()</a>.</p>
</div>
</div>
<a id="a7560a9e76988007d33039df264aeed3f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7560a9e76988007d33039df264aeed3f">&#9670;&nbsp;</a></span>FalseFuncI32()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::FalseFuncI32 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt;&#160;</td>
<td class="paramname"><em>reasonIfUnsupported</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Params &amp;&amp;...&#160;</td>
<td class="paramname"><em>params</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.html#l00094">94</a> of file <a class="el" href="_layer_support_common_8hpp_source.html">LayerSupportCommon.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;{</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="namespacearmnn.html#a8c88a8a91827e9ccc3cf3ce6b14fcd17">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">&quot;Layer is not supported with int32 data type&quot;</span>);</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.html#l00014">IgnoreUnused()</a>, and <a class="el" href="_layer_support_common_8hpp_source.html#l00017">SetValueChecked()</a>.</p>
</div>
</div>
<a id="ae5039794f89bfaf2ebbe28fd35a815cf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae5039794f89bfaf2ebbe28fd35a815cf">&#9670;&nbsp;</a></span>FalseFuncU8()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::FalseFuncU8 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt;&#160;</td>
<td class="paramname"><em>reasonIfUnsupported</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Params &amp;&amp;...&#160;</td>
<td class="paramname"><em>params</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.html#l00086">86</a> of file <a class="el" href="_layer_support_common_8hpp_source.html">LayerSupportCommon.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="namespacearmnn.html#a8c88a8a91827e9ccc3cf3ce6b14fcd17">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">&quot;Layer is not supported with 8-bit data type&quot;</span>);</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.html#l00014">IgnoreUnused()</a>, and <a class="el" href="_layer_support_common_8hpp_source.html#l00017">SetValueChecked()</a>.</p>
</div>
</div>
<a id="a8cd64bd8701401fe3dda7eab78011d8a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8cd64bd8701401fe3dda7eab78011d8a">&#9670;&nbsp;</a></span>FalseInputFuncF16()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::FalseInputFuncF16 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt;&#160;</td>
<td class="paramname"><em>reasonIfUnsupported</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Params &amp;&amp;...&#160;</td>
<td class="paramname"><em>params</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.html#l00110">110</a> of file <a class="el" href="_layer_support_common_8hpp_source.html">LayerSupportCommon.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;{</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="namespacearmnn.html#a8c88a8a91827e9ccc3cf3ce6b14fcd17">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">&quot;Layer is not supported with float16 data type input&quot;</span>);</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.html#l00014">IgnoreUnused()</a>, and <a class="el" href="_layer_support_common_8hpp_source.html#l00017">SetValueChecked()</a>.</p>
</div>
</div>
<a id="a59aa54d3652ffbef6793f6447314cbd0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a59aa54d3652ffbef6793f6447314cbd0">&#9670;&nbsp;</a></span>FalseInputFuncF32()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::FalseInputFuncF32 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt;&#160;</td>
<td class="paramname"><em>reasonIfUnsupported</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Params &amp;&amp;...&#160;</td>
<td class="paramname"><em>params</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.html#l00102">102</a> of file <a class="el" href="_layer_support_common_8hpp_source.html">LayerSupportCommon.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;{</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="namespacearmnn.html#a8c88a8a91827e9ccc3cf3ce6b14fcd17">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">&quot;Layer is not supported with float32 data type input&quot;</span>);</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.html#l00014">IgnoreUnused()</a>, and <a class="el" href="_layer_support_common_8hpp_source.html#l00017">SetValueChecked()</a>.</p>
</div>
</div>
<a id="abc2b8312f25f2daa3cc277f1307b2067"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abc2b8312f25f2daa3cc277f1307b2067">&#9670;&nbsp;</a></span>FalseOutputFuncF16()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::FalseOutputFuncF16 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt;&#160;</td>
<td class="paramname"><em>reasonIfUnsupported</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Params &amp;&amp;...&#160;</td>
<td class="paramname"><em>params</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.html#l00126">126</a> of file <a class="el" href="_layer_support_common_8hpp_source.html">LayerSupportCommon.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;{</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="namespacearmnn.html#a8c88a8a91827e9ccc3cf3ce6b14fcd17">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">&quot;Layer is not supported with float16 data type output&quot;</span>);</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.html#l00014">IgnoreUnused()</a>, and <a class="el" href="_layer_support_common_8hpp_source.html#l00017">SetValueChecked()</a>.</p>
</div>
</div>
<a id="a55cbb728001f752173f5d4e34a874e83"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a55cbb728001f752173f5d4e34a874e83">&#9670;&nbsp;</a></span>FalseOutputFuncF32()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::FalseOutputFuncF32 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt;&#160;</td>
<td class="paramname"><em>reasonIfUnsupported</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Params &amp;&amp;...&#160;</td>
<td class="paramname"><em>params</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.html#l00118">118</a> of file <a class="el" href="_layer_support_common_8hpp_source.html">LayerSupportCommon.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;{</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="namespacearmnn.html#a8c88a8a91827e9ccc3cf3ce6b14fcd17">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">&quot;Layer is not supported with float32 data type output&quot;</span>);</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.html#l00014">IgnoreUnused()</a>, and <a class="el" href="_layer_support_common_8hpp_source.html#l00017">SetValueChecked()</a>.</p>
</div>
</div>
<a id="a88bebdfe6309aa2cd6831cfa73c296f0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a88bebdfe6309aa2cd6831cfa73c296f0">&#9670;&nbsp;</a></span>Fill()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Fill </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>desiredOutputShape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const float&#160;</td>
<td class="paramname"><em>value</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Creates a tensor and fills it with a scalar value. </p>
<p class="definition">Definition at line <a class="el" href="_fill_8cpp_source.html#l00013">13</a> of file <a class="el" href="_fill_8cpp_source.html">Fill.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;{</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; desiredOutputShape.GetNumElements(); ++i)</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; {</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; output[i];</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(value);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; }</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8cpp_source.html#l00181">TensorShape::GetNumElements()</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="a1b90db39f6a9ebd11591e76fa364b06f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1b90db39f6a9ebd11591e76fa364b06f">&#9670;&nbsp;</a></span>FindKernelMeasurements()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;<a class="el" href="structarmnn_1_1_measurement.html">Measurement</a>&gt; armnn::FindKernelMeasurements </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_event.html">Event</a> *&#160;</td>
<td class="paramname"><em>event</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.html#l00062">62</a> of file <a class="el" href="_profiling_8cpp_source.html">Profiling.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;{</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(event, <span class="stringliteral">&quot;event should not be null.&quot;</span>);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; std::vector&lt;Measurement&gt; measurements;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">// Search through the measurements.</span></div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; measurement : event-&gt;GetMeasurements())</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">if</span> (measurement.m_Name.rfind(<span class="stringliteral">&quot;OpenClKernelTimer&quot;</span>, 0) == 0</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; || measurement.m_Name.rfind(<span class="stringliteral">&quot;NeonKernelTimer&quot;</span>, 0) == 0)</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// Measurement found.</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; measurements.push_back(measurement);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">return</span> measurements;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>, and <a class="el" href="_profiling_event_8cpp_source.html#l00056">Event::GetMeasurements()</a>.</p>
</div>
</div>
<a id="a12d3ffe11b54c0aaa59bdd8415701c36"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a12d3ffe11b54c0aaa59bdd8415701c36">&#9670;&nbsp;</a></span>FindMeasurement()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structarmnn_1_1_measurement.html">Measurement</a> armnn::FindMeasurement </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>name</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_event.html">Event</a> *&#160;</td>
<td class="paramname"><em>event</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.html#l00043">43</a> of file <a class="el" href="_profiling_8cpp_source.html">Profiling.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(event, <span class="stringliteral">&quot;event should not be null.&quot;</span>);</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">// Search though the measurements.</span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; measurement : event-&gt;GetMeasurements())</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (measurement.m_Name == name)</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="comment">// Measurement found.</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">return</span> measurement;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; }</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">// Measurement not found.</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975">Measurement</a>{ <span class="stringliteral">&quot;&quot;</span>, 0.f, Measurement::Unit::TIME_MS };</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>, and <a class="el" href="_profiling_event_8cpp_source.html#l00056">Event::GetMeasurements()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.html#l00113">ProfilerImpl::AnalyzeEventSequenceAndWriteResults()</a>, and <a class="el" href="_profiling_8cpp_source.html#l00082">ProfilerImpl::CalculateProfilingEventStats()</a>.</p>
</div>
</div>
<a id="a122d3124b7b19958eb053ffb9ace0dac"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a122d3124b7b19958eb053ffb9ace0dac">&#9670;&nbsp;</a></span>FinishClContextBuffer()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void armnn::FinishClContextBuffer </td>
<td>(</td>
<td class="paramtype">flatbuffers::FlatBufferBuilder &amp;&#160;</td>
<td class="paramname"><em>fbb</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">flatbuffers::Offset&lt; armnn::ClContext &gt;&#160;</td>
<td class="paramname"><em>root</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.html#l00171">171</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.html">ClContextSchema_generated.h</a>.</p>
<div class="fragment"><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; {</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; fbb.Finish(root, <a class="code" href="namespacearmnn.html#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a>());</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.html#l00148">ClContextIdentifier()</a>.</p>
</div>
</div>
<a id="a4761eadb938ae8e1322d60ac319276d2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4761eadb938ae8e1322d60ac319276d2">&#9670;&nbsp;</a></span>FinishSizePrefixedClContextBuffer()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void armnn::FinishSizePrefixedClContextBuffer </td>
<td>(</td>
<td class="paramtype">flatbuffers::FlatBufferBuilder &amp;&#160;</td>
<td class="paramname"><em>fbb</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">flatbuffers::Offset&lt; armnn::ClContext &gt;&#160;</td>
<td class="paramname"><em>root</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.html#l00177">177</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.html">ClContextSchema_generated.h</a>.</p>
<div class="fragment"><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; fbb.FinishSizePrefixed(root, <a class="code" href="namespacearmnn.html#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a>());</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.html#l00148">ClContextIdentifier()</a>.</p>
</div>
</div>
<a id="a0a49066b56fc3bfe44478601c31e2fc0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0a49066b56fc3bfe44478601c31e2fc0">&#9670;&nbsp;</a></span>FoldPadIntoAveragePool2d()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FoldPadIntoAveragePool2d </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;&#160;</td>
<td class="paramname"><em>optimizationViews</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_pooling2d_layer.html">Pooling2dLayer</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_pooling2d_descriptor.html">Pooling2dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>poolDescriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_pad_layer.html">PadLayer</a> *&#160;</td>
<td class="paramname"><em>padLayer</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_subgraph_utils_8hpp_source.html#l00341">341</a> of file <a class="el" href="_subgraph_utils_8hpp_source.html">SubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;{</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; IConnectableLayer* replacement =</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; optimizationViews.GetINetwork()-&gt;AddPooling2dLayer(poolDescriptor, <span class="stringliteral">&quot;folded-pad-into-pool2d&quot;</span>);</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; </div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="namespacearmnn.html#ae4b69405416c09ee6878e01d27c9450b">FoldPadLayer</a>(optimizationViews,</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; baseLayer,</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; replacementLayer,</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; padLayer);</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; </div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_network_8cpp_source.html#l00356">INetwork::AddPooling2dLayer()</a>, <a class="el" href="_subgraph_utils_8hpp_source.html#l00234">FoldPadLayer()</a>, and <a class="el" href="_optimization_views_8hpp_source.html#l00069">OptimizationViews::GetINetwork()</a>.</p>
</div>
</div>
<a id="ae4b69405416c09ee6878e01d27c9450b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae4b69405416c09ee6878e01d27c9450b">&#9670;&nbsp;</a></span>FoldPadLayer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FoldPadLayer </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;&#160;</td>
<td class="paramname"><em>optimizationViews</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
<td class="paramname"><em>replacementLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_pad_layer.html">PadLayer</a> *&#160;</td>
<td class="paramname"><em>padLayer</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_subgraph_utils_8hpp_source.html#l00234">234</a> of file <a class="el" href="_subgraph_utils_8hpp_source.html">SubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;{</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; SubgraphView substitutionSubgraph({padLayer, baseLayer},</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; CreateIInputsFrom({padLayer}),</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; CreateIOutputsFrom({baseLayer}));</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; SubgraphView replacementSubgraph(replacementLayer);</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; </div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; </div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_optimization_views_8hpp_source.html#l00038">OptimizationViews::AddSubstitution()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_subgraph_utils_8hpp_source.html#l00341">FoldPadIntoAveragePool2d()</a>.</p>
</div>
</div>
<a id="afce94270d9c4a51cd0c4ac6a58af4e26"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afce94270d9c4a51cd0c4ac6a58af4e26">&#9670;&nbsp;</a></span>ForEachLayerInput()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::ForEachLayerInput </td>
<td>(</td>
<td class="paramtype">LayerSelectionInfo::LayerInfoContainer &amp;&#160;</td>
<td class="paramname"><em>layerInfos</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">LayerSelectionInfo &amp;&#160;</td>
<td class="paramname"><em>layerInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Delegate&#160;</td>
<td class="paramname"><em>function</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_subgraph_view_selector_8cpp_source.html#l00277">277</a> of file <a class="el" href="_subgraph_view_selector_8cpp_source.html">SubgraphViewSelector.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;{</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; Layer&amp; layer = *PolymorphicDowncast&lt;Layer*&gt;(layerInfo.m_Layer);</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; </div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> inputSlot : layer.GetInputSlots())</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; {</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keyword">auto</span> connectedInput = PolymorphicDowncast&lt;OutputSlot*&gt;(inputSlot.GetConnection());</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">if</span> (!connectedInput)</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; {</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;Dangling input slot detected.&quot;</span>);</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; }</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; Layer&amp; inputLayer = connectedInput-&gt;GetOwningLayer();</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; </div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keyword">auto</span> parentInfo = layerInfos.find(&amp;inputLayer);</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">if</span> (parentInfo != layerInfos.end())</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; {</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keyword">function</span>(parentInfo-&gt;second);</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; }</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; }</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_layer_8hpp_source.html#l00258">Layer::GetInputSlots()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_subgraph_view_selector_8cpp_source.html#l00322">AssignSplitId()</a>, and <a class="el" href="_subgraph_view_selector_8cpp_source.html#l00387">IsReadyForSplitAssignment()</a>.</p>
</div>
</div>
<a id="a49538fa883b70c944e437d65d6628eec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a49538fa883b70c944e437d65d6628eec">&#9670;&nbsp;</a></span>ForEachLayerOutput()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::ForEachLayerOutput </td>
<td>(</td>
<td class="paramtype">LayerSelectionInfo::LayerInfoContainer &amp;&#160;</td>
<td class="paramname"><em>layerInfos</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">LayerSelectionInfo &amp;&#160;</td>
<td class="paramname"><em>layerInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Delegate&#160;</td>
<td class="paramname"><em>function</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_subgraph_view_selector_8cpp_source.html#l00301">301</a> of file <a class="el" href="_subgraph_view_selector_8cpp_source.html">SubgraphViewSelector.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;{</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; Layer&amp; layer = *PolymorphicDowncast&lt;Layer*&gt;(layerInfo.m_Layer);</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; </div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; outputSlot : layer.GetOutputSlots())</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; {</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; output : outputSlot.GetConnections())</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; {</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; Layer&amp; childLayer = output-&gt;GetOwningLayer();</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; </div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keyword">auto</span> childInfo = layerInfos.find(&amp;childLayer);</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">if</span> (childInfo != layerInfos.end())</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; {</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keyword">function</span>(childInfo-&gt;second);</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; }</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; }</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_layer_8hpp_source.html#l00259">Layer::GetOutputSlots()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_subgraph_view_selector_8cpp_source.html#l00402">SubgraphViewSelector::SelectSubgraphs()</a>.</p>
</div>
</div>
<a id="a435f9350a94adfbb0d5b9abb5f430914"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a435f9350a94adfbb0d5b9abb5f430914">&#9670;&nbsp;</a></span>FullyConnected()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void FullyConnected </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>rInputShape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>rInputDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>rOutputShape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>rOutputEncoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>rWeightsShape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>rWeightDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; *&#160;</td>
<td class="paramname"><em>pBiasDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const bool&#160;</td>
<td class="paramname"><em>biasEnabled</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const unsigned int&#160;</td>
<td class="paramname"><em>K</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const bool&#160;</td>
<td class="paramname"><em>transposeWeights</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Performs a matrix multiplication and optionally adds a bias. </p>
<p class="definition">Definition at line <a class="el" href="_fully_connected_8cpp_source.html#l00013">13</a> of file <a class="el" href="_fully_connected_8cpp_source.html">FullyConnected.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="comment">// Perform FullyConnected implementation</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputSize = rOutputShape[1];</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; decodedInputs = rInputDecoder.<a class="code" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(rInputShape);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; decodedWeights = rWeightDecoder.<a class="code" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(rWeightsShape);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> TensorShape biasShape{outputSize};</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; decodedBiases = biasEnabled ? pBiasDecoder-&gt;<a class="code" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(biasShape) : std::vector&lt;float&gt;();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n = 0; n &lt; rInputShape[0]; n++)</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; {</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelOutput = 0; channelOutput &lt; outputSize; channelOutput++)</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">float</span> outval = 0.f;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelInput = 0; channelInput &lt; K; channelInput++)</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">float</span> weight;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">if</span> (transposeWeights)</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; weight = decodedWeights[channelOutput * K + channelInput];</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; weight = decodedWeights[channelInput * outputSize + channelOutput];</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; outval += weight * decodedInputs[n * K + channelInput];</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">if</span> (biasEnabled)</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; {</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; outval += decodedBiases[channelOutput];</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; rOutputEncoder[n * outputSize + channelOutput];</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; rOutputEncoder.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(outval);</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder&lt; IType &gt;::DecodeTensor()</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="a13f537c12c25c936c152ccca78d902dd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a13f537c12c25c936c152ccca78d902dd">&#9670;&nbsp;</a></span>FuseAdditionLayer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseAdditionLayer </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;&#160;</td>
<td class="paramname"><em>optimizationViews</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *&#160;</td>
<td class="paramname"><em>activationLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>activationDesc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::string&#160;</td>
<td class="paramname"><em>name</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00073">73</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html">ArmComputeSubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;{</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="_deprecated_8hpp.html#ab66a241a0ed3ee89c866e777b035d0ed">ARMNN_NO_DEPRECATE_WARN_BEGIN</a></div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; IConnectableLayer* replacement = optimizationViews.GetINetwork()-&gt;AddAdditionLayer(name.c_str());</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="_deprecated_8hpp.html#ad762b11b48e5c1d1c1743f529485728a">ARMNN_NO_DEPRECATE_WARN_END</a></div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; </div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="namespacearmnn.html#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; baseLayer,</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; replacementLayer,</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; activationLayer,</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; activationDesc);</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; </div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_network_8cpp_source.html#l00409">INetwork::AddAdditionLayer()</a>, <a class="el" href="_deprecated_8hpp_source.html#l00033">ARMNN_NO_DEPRECATE_WARN_BEGIN</a>, <a class="el" href="_deprecated_8hpp_source.html#l00034">ARMNN_NO_DEPRECATE_WARN_END</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00053">FuseLayer()</a>, and <a class="el" href="_optimization_views_8hpp_source.html#l00069">OptimizationViews::GetINetwork()</a>.</p>
</div>
</div>
<a id="aa4a4b141867313cddb82c96800db343e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa4a4b141867313cddb82c96800db343e">&#9670;&nbsp;</a></span>FuseBatchNormalizationLayer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseBatchNormalizationLayer </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;&#160;</td>
<td class="paramname"><em>optimizationViews</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *&#160;</td>
<td class="paramname"><em>activationLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>activationDesc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::string&#160;</td>
<td class="paramname"><em>name</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00178">178</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html">ArmComputeSubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;{</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; IConnectableLayer* replacement =</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; optimizationViews.GetINetwork()-&gt;AddBatchNormalizationLayer(baseLayer-&gt;GetParameters(),</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; ConstTensor(),</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; ConstTensor(),</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; ConstTensor(),</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; ConstTensor(),</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; name.c_str());</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; </div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="namespacearmnn.html#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; baseLayer,</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; replacementLayer,</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; activationLayer,</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; activationDesc);</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; </div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; SubgraphView substitutionSubgraph({baseLayer, activationLayer},</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; CreateIInputsFrom({baseLayer}),</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; CreateIOutputsFrom({activationLayer}));</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; SubgraphView replacementSubgraph(replacementLayer);</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; </div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_network_8cpp_source.html#l00423">INetwork::AddBatchNormalizationLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00053">FuseLayer()</a>, and <a class="el" href="_optimization_views_8hpp_source.html#l00069">OptimizationViews::GetINetwork()</a>.</p>
</div>
</div>
<a id="afdb0a1b1703203354451e78e2fc43f3f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afdb0a1b1703203354451e78e2fc43f3f">&#9670;&nbsp;</a></span>FuseConvolution2dLayer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseConvolution2dLayer </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;&#160;</td>
<td class="paramname"><em>optimizationViews</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *&#160;</td>
<td class="paramname"><em>activationLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>activationDesc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::string&#160;</td>
<td class="paramname"><em>name</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00208">208</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html">ArmComputeSubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;{</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; IConnectableLayer* replacement = optimizationViews.GetINetwork()</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; -&gt;AddConvolution2dLayer(baseLayer-&gt;GetParameters(), name.c_str());</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; </div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; </div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; </div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <a class="code" href="namespacearmnn.html#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; baseLayer,</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; replacementLayer,</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; activationLayer,</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; activationDesc);</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; </div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_network_8cpp_source.html#l00272">INetwork::AddConvolution2dLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00053">FuseLayer()</a>, and <a class="el" href="_optimization_views_8hpp_source.html#l00069">OptimizationViews::GetINetwork()</a>.</p>
</div>
</div>
<a id="ae795a54643adfeb37ac95dee68807856"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae795a54643adfeb37ac95dee68807856">&#9670;&nbsp;</a></span>FuseDepthwiseConvolution2dLayer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseDepthwiseConvolution2dLayer </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;&#160;</td>
<td class="paramname"><em>optimizationViews</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *&#160;</td>
<td class="paramname"><em>activationLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>activationDesc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::string&#160;</td>
<td class="paramname"><em>name</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00230">230</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html">ArmComputeSubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;{</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; IConnectableLayer* replacement =</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; optimizationViews.GetINetwork()-&gt;AddDepthwiseConvolution2dLayer(baseLayer-&gt;GetParameters(), name.c_str());</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; </div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; </div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; </div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="namespacearmnn.html#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; baseLayer,</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; replacementLayer,</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; activationLayer,</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; activationDesc);</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; </div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_network_8cpp_source.html#l00292">INetwork::AddDepthwiseConvolution2dLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00053">FuseLayer()</a>, and <a class="el" href="_optimization_views_8hpp_source.html#l00069">OptimizationViews::GetINetwork()</a>.</p>
</div>
</div>
<a id="a90f36a629081255b526ac433fcedf8ba"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a90f36a629081255b526ac433fcedf8ba">&#9670;&nbsp;</a></span>FuseDivisionLayer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseDivisionLayer </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;&#160;</td>
<td class="paramname"><em>optimizationViews</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *&#160;</td>
<td class="paramname"><em>activationLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>activationDesc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::string&#160;</td>
<td class="paramname"><em>name</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00115">115</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html">ArmComputeSubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;{</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="_deprecated_8hpp.html#ab66a241a0ed3ee89c866e777b035d0ed">ARMNN_NO_DEPRECATE_WARN_BEGIN</a></div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; IConnectableLayer* replacement = optimizationViews.GetINetwork()-&gt;AddDivisionLayer(name.c_str());</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="_deprecated_8hpp.html#ad762b11b48e5c1d1c1743f529485728a">ARMNN_NO_DEPRECATE_WARN_END</a></div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="namespacearmnn.html#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; baseLayer,</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; replacementLayer,</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; activationLayer,</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; activationDesc);</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; </div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_network_8cpp_source.html#l00508">INetwork::AddDivisionLayer()</a>, <a class="el" href="_deprecated_8hpp_source.html#l00033">ARMNN_NO_DEPRECATE_WARN_BEGIN</a>, <a class="el" href="_deprecated_8hpp_source.html#l00034">ARMNN_NO_DEPRECATE_WARN_END</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00053">FuseLayer()</a>, and <a class="el" href="_optimization_views_8hpp_source.html#l00069">OptimizationViews::GetINetwork()</a>.</p>
</div>
</div>
<a id="a6a28e34d999aac5a0149d35b02a3cfe5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6a28e34d999aac5a0149d35b02a3cfe5">&#9670;&nbsp;</a></span>FuseElementwiseBinaryLayer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseElementwiseBinaryLayer </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;&#160;</td>
<td class="paramname"><em>optimizationViews</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *&#160;</td>
<td class="paramname"><em>activationLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>activationDesc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047">BinaryOperation</a>&#160;</td>
<td class="paramname"><em>operation</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::string&#160;</td>
<td class="paramname"><em>name</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00157">157</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html">ArmComputeSubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;{</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; IConnectableLayer* replacement = optimizationViews.GetINetwork()-&gt;AddElementwiseBinaryLayer(operation,</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; name.c_str());</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; </div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="namespacearmnn.html#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; baseLayer,</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; replacementLayer,</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; activationLayer,</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; activationDesc);</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; </div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_network_8cpp_source.html#l00314">INetwork::AddElementwiseBinaryLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00053">FuseLayer()</a>, and <a class="el" href="_optimization_views_8hpp_source.html#l00069">OptimizationViews::GetINetwork()</a>.</p>
</div>
</div>
<a id="ad2021f80998e436e27de7b7eeec67d54"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad2021f80998e436e27de7b7eeec67d54">&#9670;&nbsp;</a></span>FuseFullyConnectedLayer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseFullyConnectedLayer </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;&#160;</td>
<td class="paramname"><em>optimizationViews</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *&#160;</td>
<td class="paramname"><em>activationLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>activationDesc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::string&#160;</td>
<td class="paramname"><em>name</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00252">252</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html">ArmComputeSubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;{</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; IConnectableLayer* replacement =</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; optimizationViews.GetINetwork()-&gt;AddFullyConnectedLayer(baseLayer-&gt;GetParameters(),</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; name.c_str());</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; </div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="namespacearmnn.html#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; baseLayer,</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; replacementLayer,</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; activationLayer,</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; activationDesc);</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; </div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; </div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_network_8cpp_source.html#l00332">INetwork::AddFullyConnectedLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00053">FuseLayer()</a>, and <a class="el" href="_optimization_views_8hpp_source.html#l00069">OptimizationViews::GetINetwork()</a>.</p>
</div>
</div>
<a id="a7e4811ef91f499424bca36e98a2fbd96"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7e4811ef91f499424bca36e98a2fbd96">&#9670;&nbsp;</a></span>FuseLayer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseLayer </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;&#160;</td>
<td class="paramname"><em>optimizationViews</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
<td class="paramname"><em>replacementLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *&#160;</td>
<td class="paramname"><em>activationLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>activationDesc</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00053">53</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html">ArmComputeSubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;{</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; replacementLayer-&gt;SetAdditionalInfoForObject(</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; std::make_shared&lt;ActivationDescriptor&gt;(activationDesc));</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; </div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; SubgraphView substitutionSubgraph({baseLayer, activationLayer},</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; CreateIInputsFrom({baseLayer}),</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; CreateIOutputsFrom({activationLayer}));</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; SubgraphView replacementSubgraph(replacementLayer);</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_optimization_views_8hpp_source.html#l00038">OptimizationViews::AddSubstitution()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00073">FuseAdditionLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00178">FuseBatchNormalizationLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00208">FuseConvolution2dLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00230">FuseDepthwiseConvolution2dLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00115">FuseDivisionLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00157">FuseElementwiseBinaryLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00252">FuseFullyConnectedLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00136">FuseMultiplicationLayer()</a>, and <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00094">FuseSubtractionLayer()</a>.</p>
</div>
</div>
<a id="af06b26928a460f9fcdef0327f448a34c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af06b26928a460f9fcdef0327f448a34c">&#9670;&nbsp;</a></span>FuseMultiplicationLayer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseMultiplicationLayer </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;&#160;</td>
<td class="paramname"><em>optimizationViews</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *&#160;</td>
<td class="paramname"><em>activationLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>activationDesc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::string&#160;</td>
<td class="paramname"><em>name</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00136">136</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html">ArmComputeSubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;{</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="_deprecated_8hpp.html#ab66a241a0ed3ee89c866e777b035d0ed">ARMNN_NO_DEPRECATE_WARN_BEGIN</a></div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; IConnectableLayer* replacement = optimizationViews.GetINetwork()-&gt;AddMultiplicationLayer(name.c_str());</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="_deprecated_8hpp.html#ad762b11b48e5c1d1c1743f529485728a">ARMNN_NO_DEPRECATE_WARN_END</a></div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; </div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="namespacearmnn.html#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; baseLayer,</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; replacementLayer,</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; activationLayer,</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; activationDesc);</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; </div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_network_8cpp_source.html#l00416">INetwork::AddMultiplicationLayer()</a>, <a class="el" href="_deprecated_8hpp_source.html#l00033">ARMNN_NO_DEPRECATE_WARN_BEGIN</a>, <a class="el" href="_deprecated_8hpp_source.html#l00034">ARMNN_NO_DEPRECATE_WARN_END</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00053">FuseLayer()</a>, and <a class="el" href="_optimization_views_8hpp_source.html#l00069">OptimizationViews::GetINetwork()</a>.</p>
</div>
</div>
<a id="aeda4132cdab76b98c860690c80fdb7bd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeda4132cdab76b98c860690c80fdb7bd">&#9670;&nbsp;</a></span>FuseSubtractionLayer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseSubtractionLayer </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;&#160;</td>
<td class="paramname"><em>optimizationViews</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *&#160;</td>
<td class="paramname"><em>activationLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>activationDesc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::string&#160;</td>
<td class="paramname"><em>name</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00094">94</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html">ArmComputeSubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;{</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="_deprecated_8hpp.html#ab66a241a0ed3ee89c866e777b035d0ed">ARMNN_NO_DEPRECATE_WARN_BEGIN</a></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; IConnectableLayer* replacement = optimizationViews.GetINetwork()-&gt;AddSubtractionLayer(name.c_str());</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <a class="code" href="_deprecated_8hpp.html#ad762b11b48e5c1d1c1743f529485728a">ARMNN_NO_DEPRECATE_WARN_END</a></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; </div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="namespacearmnn.html#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; baseLayer,</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; replacementLayer,</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; activationLayer,</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; activationDesc);</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; </div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_network_8cpp_source.html#l00515">INetwork::AddSubtractionLayer()</a>, <a class="el" href="_deprecated_8hpp_source.html#l00033">ARMNN_NO_DEPRECATE_WARN_BEGIN</a>, <a class="el" href="_deprecated_8hpp_source.html#l00034">ARMNN_NO_DEPRECATE_WARN_END</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00053">FuseLayer()</a>, and <a class="el" href="_optimization_views_8hpp_source.html#l00069">OptimizationViews::GetINetwork()</a>.</p>
</div>
</div>
<a id="a4f1a1b88b01d8dfda3803776e0778a49"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4f1a1b88b01d8dfda3803776e0778a49">&#9670;&nbsp;</a></span>Gather()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Gather </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>paramsInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>indicesInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>params</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int32_t *&#160;</td>
<td class="paramname"><em>indices</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int32_t&#160;</td>
<td class="paramname"><em>axis_int</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gather_8cpp_source.html#l00015">15</a> of file <a class="el" href="_gather_8cpp_source.html">Gather.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(outputInfo);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> paramsRank = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(paramsInfo.GetNumDimensions());</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">if</span>((axis_int &lt; -1 * paramsRank) || (paramsRank &lt;= axis_int))</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; {</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException((fmt::format(<span class="stringliteral">&quot;Gather: Axis {} is not within [-{}, {}) range&quot;</span>,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; axis_int, paramsRank, paramsRank)));</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; }</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axis = (axis_int &lt; 0) ? static_cast&lt;unsigned int&gt;(paramsRank + axis_int)</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; : static_cast&lt;unsigned int&gt;(axis_int);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> TensorShape&amp; paramsShape = paramsInfo.GetShape();</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// Product of all dimensions to the left side of the axis</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paramsOuterProduct = 1;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; axis; ++i)</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; paramsOuterProduct *= paramsShape[i];</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">// Product of all dimensions to the right side of the axis</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paramsInnerProduct = 1;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> k = 1 + axis; k &lt; paramsInfo.GetNumDimensions(); ++k)</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; paramsInnerProduct *= paramsShape[k];</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> offset = 0;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outIndex = 0;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; paramsOuterProduct; ++i)</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; indicesInfo.GetNumElements(); ++j)</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; {</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index =</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; (indices[j] &lt; 0) ? <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(paramsShape[axis]) + indices[j])</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; : <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(indices[j]);</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">if</span> (index &gt;= paramsShape[axis])</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException((fmt::format(<span class="stringliteral">&quot;Gather: index &gt;= paramsShape[axis]: {} &gt;= {}&quot;</span>,</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; index, paramsShape[axis] )));</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> startOffset = (paramsInnerProduct * index) + offset;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> endOffset = startOffset + paramsInnerProduct;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> k = startOffset; k &lt; endOffset; ++k)</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; params[k];</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">float</span> outputValue = params.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; output[outIndex];</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(outputValue);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; ++outIndex;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; offset += paramsShape[axis] * paramsInnerProduct;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; }</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; </div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">if</span> (outIndex != outputInfo.GetNumElements())</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; {</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException((fmt::format(<span class="stringliteral">&quot;Gather: Invalid outIndex {} &quot;</span>, outIndex)));</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00198">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_ignore_unused_8hpp_source.html#l00014">IgnoreUnused()</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="a844d7fa4dde82e1c6b0606e1c68890bb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a844d7fa4dde82e1c6b0606e1c68890bb">&#9670;&nbsp;</a></span>GatherTensorHandlePairs()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::GatherTensorHandlePairs </td>
<td>(</td>
<td class="paramtype">const DescriptorType &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; std::pair&lt; SrcTensorHandleType *, DstTensorHandleType * &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>tensorHandlePairs</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_utils_8hpp_source.html#l00204">204</a> of file <a class="el" href="_workload_utils_8hpp_source.html">WorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;{</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputs = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(descriptor.m_Inputs.size());</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; tensorHandlePairs.reserve(numInputs);</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; </div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numInputs; ++i)</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; SrcTensorHandleType* <span class="keyword">const</span> srcTensorHandle =</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; PolymorphicDowncast&lt;SrcTensorHandleType*&gt;(descriptor.m_Inputs[i]);</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; DstTensorHandleType* <span class="keyword">const</span> dstTensorHandle =</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; PolymorphicDowncast&lt;DstTensorHandleType*&gt;(descriptor.m_Outputs[i]);</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; </div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; tensorHandlePairs.emplace_back(srcTensorHandle, dstTensorHandle);</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_mem_copy_workload_8cpp_source.html#l00044">CopyMemGenericWorkload::CopyMemGenericWorkload()</a>, <a class="el" href="_mem_copy_workload_8cpp_source.html#l00066">CopyMemGenericWorkload::ExecuteAsync()</a>, <a class="el" href="_neon_convert_fp16_to_fp32_workload_8cpp_source.html#l00029">NeonConvertFp16ToFp32Workload::NeonConvertFp16ToFp32Workload()</a>, and <a class="el" href="_neon_convert_fp32_to_fp16_workload_8cpp_source.html#l00031">NeonConvertFp32ToFp16Workload::NeonConvertFp32ToFp16Workload()</a>.</p>
</div>
</div>
<a id="a15e2ba06d2ecd7ff6013118838e5d1be"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a15e2ba06d2ecd7ff6013118838e5d1be">&#9670;&nbsp;</a></span>GeneratePermutationVectorOnLastTwoDimensions()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_permutation_vector.html">armnn::PermutationVector</a> GeneratePermutationVectorOnLastTwoDimensions </td>
<td>(</td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>rank</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<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.html" 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.html#l00357">357</a> of file <a class="el" href="_workload_utils_8cpp_source.html">WorkloadUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;{</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <a class="code" href="classarmnn_1_1_permutation_vector.html">armnn::PermutationVector</a> permutationVector{};</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">switch</span> (rank)</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; {</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">case</span> 2:</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; permutationVector = {1U, 0U};</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">case</span> 3:</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; permutationVector = {0U, 2U, 1U};</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">case</span> 4:</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; permutationVector = {0U, 1U, 3U, 2U};</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">throw</span> Exception(<span class="stringliteral">&quot;Invalid number of dimensions.&quot;</span>);</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; }</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">return</span> permutationVector;</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ae8ed5c640761fb6744aec0ee16388417"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae8ed5c640761fb6744aec0ee16388417">&#9670;&nbsp;</a></span>GenerateRangeK()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;unsigned int&gt; armnn::GenerateRangeK </td>
<td>(</td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>k</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_detection_post_process_8cpp_source.html#l00016">16</a> of file <a class="el" href="_detection_post_process_8cpp_source.html">DetectionPostProcess.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; std::vector&lt;unsigned int&gt; range(k);</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; std::iota(range.begin(), range.end(), 0);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keywordflow">return</span> range;</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_detection_post_process_8cpp_source.html#l00139">DetectionPostProcess()</a>, and <a class="el" href="_detection_post_process_8cpp_source.html#l00048">NonMaxSuppression()</a>.</p>
</div>
</div>
<a id="aa093207ea7c4e7a9c9abe40d2f57995b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa093207ea7c4e7a9c9abe40d2f57995b">&#9670;&nbsp;</a></span>GetActivationFunctionAsCString()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetActivationFunctionAsCString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a>&#160;</td>
<td class="paramname"><em>activation</em></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="_types_utils_8hpp_source.html#l00031">31</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">switch</span> (activation)</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Sigmoid: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Sigmoid&quot;</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">case</span> ActivationFunction::TanH: <span class="keywordflow">return</span> <span class="stringliteral">&quot;TanH&quot;</span>;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Linear: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Linear&quot;</span>;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">case</span> ActivationFunction::ReLu: <span class="keywordflow">return</span> <span class="stringliteral">&quot;ReLu&quot;</span>;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">case</span> ActivationFunction::BoundedReLu: <span class="keywordflow">return</span> <span class="stringliteral">&quot;BoundedReLu&quot;</span>;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">case</span> ActivationFunction::SoftReLu: <span class="keywordflow">return</span> <span class="stringliteral">&quot;SoftReLu&quot;</span>;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">case</span> ActivationFunction::LeakyReLu: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LeakyReLu&quot;</span>;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Abs: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Abs&quot;</span>;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Sqrt: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Sqrt&quot;</span>;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Square: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Square&quot;</span>;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Elu: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Elu&quot;</span>;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">case</span> ActivationFunction::HardSwish: <span class="keywordflow">return</span> <span class="stringliteral">&quot;HardSwish&quot;</span>;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Gelu: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Gelu&quot;</span>;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">BoundedReLu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d">Elu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaf48cca1c6deaa6a1c34e4ee46954cf0b">Gelu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186">HardSwish</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735">LeakyReLu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b">Linear</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">ReLu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">Sigmoid</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef">SoftReLu</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304">Square</a>, and <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e">TanH</a>.</p>
<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00014">StringifyLayerParameters&lt; ActivationDescriptor &gt;::Serialize()</a>.</p>
</div>
</div>
<a id="a5cda3502382f06a64c3cbeb1829bd850"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5cda3502382f06a64c3cbeb1829bd850">&#9670;&nbsp;</a></span>GetArgMinMaxFunctionAsCString()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetArgMinMaxFunctionAsCString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a>&#160;</td>
<td class="paramname"><em>function</em></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="_types_utils_8hpp_source.html#l00052">52</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;{</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">switch</span> (<span class="keyword">function</span>)</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">case</span> ArgMinMaxFunction::Max: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Max&quot;</span>;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">case</span> ArgMinMaxFunction::Min: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Min&quot;</span>;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a>, and <a class="el" href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a>.</p>
</div>
</div>
<a id="a872803f5667392efc3c8e5607bd453ad"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a872803f5667392efc3c8e5607bd453ad">&#9670;&nbsp;</a></span>GetBiasDataType()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> GetBiasDataType </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td>
<td class="paramname"><em>inputDataType</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_data_8cpp_source.html#l00028">28</a> of file <a class="el" href="_workload_data_8cpp_source.html">WorkloadData.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">switch</span> (inputDataType)</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">case</span> DataType::Float16:</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">return</span> DataType::Float16;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">case</span> DataType::BFloat16:</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> DataType::Float32;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16:</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> DataType::Signed32;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(<span class="stringliteral">&quot;GetBiasDataType(): Unsupported data type.&quot;</span>);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>.</p>
<p class="reference">Referenced by <a class="el" href="_workload_data_8cpp_source.html#l01035">FullyConnectedQueueDescriptor::Validate()</a>, <a class="el" href="_workload_data_8cpp_source.html#l01251">Convolution2dQueueDescriptor::Validate()</a>, <a class="el" href="_workload_data_8cpp_source.html#l01328">Convolution3dQueueDescriptor::Validate()</a>, <a class="el" href="_workload_data_8cpp_source.html#l01390">DepthwiseConvolution2dQueueDescriptor::Validate()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l03054">TransposeConvolution2dQueueDescriptor::Validate()</a>.</p>
</div>
</div>
<a id="ada0fb4f79f3673b4ebd94a42175bf78d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ada0fb4f79f3673b4ebd94a42175bf78d">&#9670;&nbsp;</a></span>GetBiasTypeFromWeightsType()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_optional.html">armnn::Optional</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> &gt; GetBiasTypeFromWeightsType </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">armnn::Optional</a>&lt; <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> &gt;&#160;</td>
<td class="paramname"><em>weightsType</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_support_rules_8hpp_source.html#l00013">13</a> of file <a class="el" href="_layer_support_rules_8hpp_source.html">LayerSupportRules.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;{</div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; <span class="keywordflow">if</span> (!weightsType)</div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; {</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keywordflow">return</span> weightsType;</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; }</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keywordflow">switch</span>(weightsType.<a class="code" href="classarmnn_1_1_optional_reference_switch.html#a77c7d528ac063d870b8c8426ec81c1c3">value</a>())</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; {</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>:</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>:</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">return</span> weightsType;</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a>:</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>:</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">armnn::DataType::QSymmS8</a>:</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a>:</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a>;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;GetBiasTypeFromWeightsType(): Unsupported data type.&quot;</span>);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; }</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_1_1_empty_optional.html">armnn::EmptyOptional</a>();</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>, and <a class="el" href="_optional_8hpp_source.html#l00146">OptionalReferenceSwitch&lt; std::is_reference&lt; T &gt;::value, T &gt;::value()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_layer_support_rules_8hpp_source.html#l00119">BiasAndWeightsTypesMatch::BiasAndWeightsTypesMatch()</a>.</p>
</div>
</div>
<a id="aed346b74795fd613f727ca8369778704"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aed346b74795fd613f727ca8369778704">&#9670;&nbsp;</a></span>GetBinaryOperationAsCString()</h2>
<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::GetBinaryOperationAsCString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047">BinaryOperation</a>&#160;</td>
<td class="paramname"><em>operation</em></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="_types_utils_8hpp_source.html#l00076">76</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;{</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">switch</span> (operation)</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Add: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Add&quot;</span>;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Div: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Div&quot;</span>;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Maximum: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Maximum&quot;</span>;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Minimum: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Minimum&quot;</span>;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Mul: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Mul&quot;</span>;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Power: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Power&quot;</span>;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">case</span> BinaryOperation::SqDiff: <span class="keywordflow">return</span> <span class="stringliteral">&quot;SqDiff&quot;</span>;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Sub: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Sub&quot;</span>;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047aec211f7c20af43e742bf2570c3cb84f9">Add</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a43d11850893d2fe84a1e618121c1cc0a">Div</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a8321e79c278ec510f63675c040594892">Maximum</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047aa1d0ec6d56f8833a078b5a7ac4caf2d4">Minimum</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a62b6d55816cf737bfc6f42e60df1a3f2">Mul</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047add4fe0cc913f704600b97d1f5dd285de">Power</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a2d17ea57d7f86acde5c60cef8e123a53">SqDiff</a>, and <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047ae80155eceb940c89e2de63ad05868db2">Sub</a>.</p>
<p class="reference">Referenced by <a class="el" href="_ref_elementwise_binary_workload_8cpp_source.html#l00027">ExecuteFunction()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00190">StringifyLayerParameters&lt; ElementwiseBinaryDescriptor &gt;::Serialize()</a>.</p>
</div>
</div>
<a id="a8d70f94d3f0ffb06067a66c49b2f8689"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8d70f94d3f0ffb06067a66c49b2f8689">&#9670;&nbsp;</a></span>GetCapability() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.html">BackendOptions::BackendOption</a> &gt; GetCapability </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>backendCapabilityName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.html">armnn::BackendId</a> &amp;&#160;</td>
<td class="paramname"><em>backend</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns a BackendCapability if the backend lists the capability The BackendCapability must then be inspected to check whether or not that BackendCapability is supported Otherwise returns an <a class="el" href="structarmnn_1_1_empty_optional.html" 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.html#l00051">51</a> of file <a class="el" href="_backend_helper_8cpp_source.html">BackendHelper.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;{</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span>&amp; backendRegistry = <a class="code" href="namespacearmnn.html#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>();</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; {</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">auto</span> backendObject = factoryFunc();</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">auto</span> capabilities = backendObject-&gt;GetCapabilities();</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a71c3bdadfe1c69aba2cbf054bff47744">GetCapability</a>(backendCapabilityName, capabilities);</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; }</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> EmptyOptional();</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_registry_8cpp_source.html#l00015">BackendRegistryInstance()</a>, and <a class="el" href="_backend_helper_8cpp_source.html#l00037">GetCapability()</a>.</p>
</div>
</div>
<a id="a71c3bdadfe1c69aba2cbf054bff47744"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a71c3bdadfe1c69aba2cbf054bff47744">&#9670;&nbsp;</a></span>GetCapability() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.html">BackendOptions::BackendOption</a> &gt; GetCapability </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>backendCapabilityName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &amp;&#160;</td>
<td class="paramname"><em>capabilities</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns a BackendCapability if the backend lists the capability The BackendCapability must then be inspected to check whether or not that BackendCapability is supported Otherwise returns an <a class="el" href="structarmnn_1_1_empty_optional.html" 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.html#l00037">37</a> of file <a class="el" href="_backend_helper_8cpp_source.html">BackendHelper.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;{</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i &lt; capabilities.GetOptionCount(); i++)</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; {</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; capability = capabilities.GetOption(i);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">if</span> (backendCapabilityName == capability.GetName())</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; {</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> capability;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">return</span> EmptyOptional();</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_options_8hpp_source.html#l00285">BackendOptions::GetOption()</a>, and <a class="el" href="_backend_options_8hpp_source.html#l00284">BackendOptions::GetOptionCount()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_backend_helper_8cpp_source.html#l00051">GetCapability()</a>, <a class="el" href="_backend_helper_8cpp_source.html#l00065">HasCapability()</a>, <a class="el" href="_backend_helper_8cpp_source.html#l00371">LayerSupportHandle::IsConvolution2dSupported()</a>, <a class="el" href="_backend_helper_8cpp_source.html#l00472">LayerSupportHandle::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_backend_helper_8cpp_source.html#l00560">LayerSupportHandle::IsDilatedDepthwiseConvolutionSupported()</a>, and <a class="el" href="_backend_helper_8cpp_source.html#l00703">LayerSupportHandle::IsFullyConnectedSupported()</a>.</p>
</div>
</div>
<a id="ac3dec65fab0e6a1a6fef52e6321b4993"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac3dec65fab0e6a1a6fef52e6321b4993">&#9670;&nbsp;</a></span>GetClContext()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const armnn::ClContext* armnn::GetClContext </td>
<td>(</td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>buf</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.html#l00140">140</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.html">ClContextSchema_generated.h</a>.</p>
<div class="fragment"><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; {</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">return</span> flatbuffers::GetRoot&lt;armnn::ClContext&gt;(buf);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_context_deserializer_8cpp_source.html#l00081">ClContextDeserializer::DeserializeFromBinary()</a>.</p>
</div>
</div>
<a id="aabb76a77e95921785f576bb29b495cd8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aabb76a77e95921785f576bb29b495cd8">&#9670;&nbsp;</a></span>GetComparisonOperationAsCString()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetComparisonOperationAsCString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58c">ComparisonOperation</a>&#160;</td>
<td class="paramname"><em>operation</em></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="_types_utils_8hpp_source.html#l00062">62</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;{</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">switch</span> (operation)</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::Equal: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Equal&quot;</span>;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::Greater: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Greater&quot;</span>;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::GreaterOrEqual: <span class="keywordflow">return</span> <span class="stringliteral">&quot;GreaterOrEqual&quot;</span>;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::Less: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Less&quot;</span>;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::LessOrEqual: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LessOrEqual&quot;</span>;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::NotEqual: <span class="keywordflow">return</span> <span class="stringliteral">&quot;NotEqual&quot;</span>;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5">Equal</a>, <a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a">Greater</a>, <a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937">GreaterOrEqual</a>, <a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b">Less</a>, <a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14">LessOrEqual</a>, and <a class="el" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96">NotEqual</a>.</p>
<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00081">StringifyLayerParameters&lt; ComparisonDescriptor &gt;::Serialize()</a>.</p>
</div>
</div>
<a id="a6bab17bfd45c2fa4592c431bc25ad10e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6bab17bfd45c2fa4592c431bc25ad10e">&#9670;&nbsp;</a></span>GetComputeDeviceAsCString()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetComputeDeviceAsCString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456ae">Compute</a>&#160;</td>
<td class="paramname"><em>compute</em></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>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.html#l00034">34</a> of file <a class="el" href="_backend_id_8hpp_source.html">BackendId.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;{</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">switch</span> (compute)</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;CpuRef&quot;</span>;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;CpuAcc&quot;</span>;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</a>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;GpuAcc&quot;</span>;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">CpuAcc</a>, <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">CpuRef</a>, and <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">GpuAcc</a>.</p>
<p class="reference">Referenced by <a class="el" href="_backend_id_8hpp_source.html#l00091">BackendId::BackendId()</a>, <a class="el" href="_backend_id_8hpp_source.html#l00135">BackendId::IsCpuAcc()</a>, <a class="el" href="_backend_id_8hpp_source.html#l00134">BackendId::IsCpuRef()</a>, <a class="el" href="_backend_id_8hpp_source.html#l00136">BackendId::IsGpuAcc()</a>, <a class="el" href="_backend_id_8hpp_source.html#l00141">BackendId::IsUndefined()</a>, and <a class="el" href="_backend_id_8hpp_source.html#l00047">operator&lt;&lt;()</a>.</p>
</div>
</div>
<a id="a63833af8e1986a93f86d15397b9062c2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a63833af8e1986a93f86d15397b9062c2">&#9670;&nbsp;</a></span>GetConvolutionMethodString()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::string GetConvolutionMethodString </td>
<td>(</td>
<td class="paramtype">arm_compute::ConvolutionMethod &amp;&#160;</td>
<td class="paramname"><em>convolutionMethod</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.html#l00046">46</a> of file <a class="el" href="_cl_workload_utils_8hpp_source.html">ClWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;{</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">switch</span> (convolutionMethod)</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::FFT:</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;FFT&quot;</span>;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::DIRECT:</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Direct&quot;</span>;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::GEMM:</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;GEMM&quot;</span>;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::WINOGRAD:</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Winograd&quot;</span>;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="aeef70b7611ae71e97ab55c75ef72b210"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeef70b7611ae71e97ab55c75ef72b210">&#9670;&nbsp;</a></span>GetDataLayoutName()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::GetDataLayoutName </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
<td class="paramname"><em>dataLayout</em></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="_types_utils_8hpp_source.html#l00253">253</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;{</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">switch</span> (dataLayout)</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; {</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">case</span> DataLayout::NCHW: <span class="keywordflow">return</span> <span class="stringliteral">&quot;NCHW&quot;</span>;</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">case</span> DataLayout::NHWC: <span class="keywordflow">return</span> <span class="stringliteral">&quot;NHWC&quot;</span>;</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">case</span> DataLayout::NDHWC: <span class="keywordflow">return</span> <span class="stringliteral">&quot;NDHWC&quot;</span>;</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">case</span> DataLayout::NCDHW: <span class="keywordflow">return</span> <span class="stringliteral">&quot;NCDHW&quot;</span>;</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; }</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">NCDHW</a>, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">NDHWC</a>, and <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>.</p>
<p class="reference">Referenced by <a class="el" href="_workload_utils_8cpp_source.html#l00177">Convert1HWOTensorInfoToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.html#l00146">Convert1HWOTensorToAcl()</a>, <a class="el" href="_common_test_utils_8cpp_source.html#l00081">MakeTensorShape()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00022">StringifyLayerParameters&lt; BatchNormalizationDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00038">StringifyLayerParameters&lt; BatchToSpaceNdDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00087">StringifyLayerParameters&lt; Convolution2dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00113">StringifyLayerParameters&lt; Convolution3dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00163">StringifyLayerParameters&lt; DepthwiseConvolution2dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00223">StringifyLayerParameters&lt; L2NormalizationDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00260">StringifyLayerParameters&lt; NormalizationDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00337">StringifyLayerParameters&lt; Pooling2dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00365">StringifyLayerParameters&lt; Pooling3dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00442">StringifyLayerParameters&lt; ResizeDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00460">StringifyLayerParameters&lt; SpaceToBatchNdDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00496">StringifyLayerParameters&lt; SpaceToDepthDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00514">StringifyLayerParameters&lt; StridedSliceDescriptor &gt;::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00587">StringifyLayerParameters&lt; TransposeConvolution2dDescriptor &gt;::Serialize()</a>.</p>
</div>
</div>
<a id="a81b5ff8545adad19a1c9d4ca076d552c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a81b5ff8545adad19a1c9d4ca076d552c">&#9670;&nbsp;</a></span>GetDataTypeName()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::GetDataTypeName </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td>
<td class="paramname"><em>dataType</em></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="_types_utils_8hpp_source.html#l00233">233</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;{</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">switch</span> (dataType)</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">case</span> DataType::Float16: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Float16&quot;</span>;</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">case</span> DataType::Float32: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Float32&quot;</span>;</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">case</span> DataType::Signed64: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Signed64&quot;</span>;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8: <span class="keywordflow">return</span> <span class="stringliteral">&quot;QAsymmU8&quot;</span>;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8: <span class="keywordflow">return</span> <span class="stringliteral">&quot;QAsymmS8&quot;</span>;</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8: <span class="keywordflow">return</span> <span class="stringliteral">&quot;QSymmS8&quot;</span>;</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16: <span class="keywordflow">return</span> <span class="stringliteral">&quot;QSymm16&quot;</span>;</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">case</span> DataType::Signed32: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Signed32&quot;</span>;</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">case</span> DataType::Boolean: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Boolean&quot;</span>;</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">case</span> DataType::BFloat16: <span class="keywordflow">return</span> <span class="stringliteral">&quot;BFloat16&quot;</span>;</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; </div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>, and <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">Signed64</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l00844">AttemptBackendAssignment()</a>, <a class="el" href="_ref_debug_workload_8hpp_source.html#l00023">RefDebugWorkload&lt; DataType &gt;::GetName()</a>, <a class="el" href="_tensor_utils_8cpp_source.html#l00280">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="_constant_layer_8cpp_source.html#l00072">ConstantLayer::SerializeLayerParameters()</a>, <a class="el" href="_tensor_utils_8cpp_source.html#l00348">armnnUtils::ToFloatArray()</a>, and <a class="el" href="_types_utils_8hpp_source.html#l00382">VerifyTensorInfoDataType()</a>.</p>
</div>
</div>
<a id="aa02b9e06fb20fa3c13da0427e6ee5ab2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa02b9e06fb20fa3c13da0427e6ee5ab2">&#9670;&nbsp;</a></span>GetDataTypeSize()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr unsigned int armnn::GetDataTypeSize </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td>
<td class="paramname"><em>dataType</em></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="_types_utils_8hpp_source.html#l00182">182</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;{</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">switch</span> (dataType)</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">case</span> DataType::BFloat16:</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">case</span> DataType::Float16: <span class="keywordflow">return</span> 2U;</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">case</span> DataType::Signed32: <span class="keywordflow">return</span> 4U;</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">case</span> DataType::Signed64: <span class="keywordflow">return</span> 8U;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8: <span class="keywordflow">return</span> 1U;</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8: <span class="keywordflow">return</span> 1U;</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8: <span class="keywordflow">return</span> 1U;</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16: <span class="keywordflow">return</span> 2U;</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">case</span> DataType::Boolean: <span class="keywordflow">return</span> 1U;</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> 0U;</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>, and <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">Signed64</a>.</p>
<p class="reference">Referenced by <a class="el" href="_tosa_ref_tensor_handle_8cpp_source.html#l00172">TosaRefTensorHandle::CanBeImported()</a>, <a class="el" href="_ref_tensor_handle_8cpp_source.html#l00153">RefTensorHandle::CanBeImported()</a>, <a class="el" href="_tensor_8cpp_source.html#l00427">TensorInfo::GetNumBytes()</a>, <a class="el" href="_tensor_handle_8cpp_source.html#l00015">GetUnpaddedTensorStrides()</a>, <a class="el" href="_workload_utils_8cpp_source.html#l00019">PermuteTensor()</a>, and <a class="el" href="_canonical_utils_8cpp_source.html#l00040">armnn_driver::SwizzleAndroidNn4dTensorToArmNn()</a>.</p>
</div>
</div>
<a id="ab03dcfb3b4019d8f58a67c41681951ae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab03dcfb3b4019d8f58a67c41681951ae">&#9670;&nbsp;</a></span>GetEventPtr() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classarmnn_1_1_event.html">Event</a>* armnn::GetEventPtr </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_event.html">Event</a> *&#160;</td>
<td class="paramname"><em>ptr</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.html#l00109">109</a> of file <a class="el" href="_profiling_8cpp_source.html">Profiling.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;{ <span class="keywordflow">return</span> ptr;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.html#l00113">ProfilerImpl::AnalyzeEventSequenceAndWriteResults()</a>.</p>
</div>
</div>
<a id="a4b1e2158af2aedd3f00d2121c45b0f93"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4b1e2158af2aedd3f00d2121c45b0f93">&#9670;&nbsp;</a></span>GetEventPtr() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classarmnn_1_1_event.html">Event</a>* armnn::GetEventPtr </td>
<td>(</td>
<td class="paramtype">const std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_event.html">Event</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>ptr</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.html#l00110">110</a> of file <a class="el" href="_profiling_8cpp_source.html">Profiling.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;{<span class="keywordflow">return</span> ptr.get(); }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a107fb425e884b38b3b8568334ae1ee3c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a107fb425e884b38b3b8568334ae1ee3c">&#9670;&nbsp;</a></span>GetFusedName()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void armnn::GetFusedName </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> *&#160;</td>
<td class="paramname"><em>layerList</em>[4], </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::string &amp;&#160;</td>
<td class="paramname"><em>fusedName</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_backend_optimization_utils_8hpp_source.html#l00071">71</a> of file <a class="el" href="_neon_backend_optimization_utils_8hpp_source.html">NeonBackendOptimizationUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;{</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">// Build the fused name string</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; fusedName = <span class="stringliteral">&quot;fused&quot;</span>;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> layerIdx = 0; layerIdx&lt; 4; ++layerIdx)</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">if</span> (! layerList[layerIdx])</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; fusedName += <span class="stringliteral">&quot;-&quot;</span>;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; fusedName += layerList[layerIdx]-&gt;GetNameStr();</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_layer_8hpp_source.html#l00240">Layer::GetNameStr()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_backend_8cpp_source.html#l00144">NeonBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="a85b4bd588d0986fd48fdcaba72fbc1b7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a85b4bd588d0986fd48fdcaba72fbc1b7">&#9670;&nbsp;</a></span>GetFusedTypeAsCString()</h2>
<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::GetFusedTypeAsCString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a52d63dc326ef2e2d373217b84ac4a402">FusedKernelType</a>&#160;</td>
<td class="paramname"><em>type</em></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="_types_utils_8hpp_source.html#l00119">119</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;{</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">switch</span> (type)</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; {</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">case</span> FusedKernelType::AddMulAdd: <span class="keywordflow">return</span> <span class="stringliteral">&quot;AddMulAdd&quot;</span>;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a52d63dc326ef2e2d373217b84ac4a402a6708d958187e663fd689cdad2b55b818">AddMulAdd</a>.</p>
<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00328">StringifyLayerParameters&lt; FusedDescriptor &gt;::Serialize()</a>.</p>
</div>
</div>
<a id="a6a2659750d6161b693d0e51616791959"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6a2659750d6161b693d0e51616791959">&#9670;&nbsp;</a></span>GetGraphForTesting()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp; GetGraphForTesting </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> *&#160;</td>
<td class="paramname"><em>optNet</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_test_utils_8cpp_source.html#l00049">49</a> of file <a class="el" href="_test_utils_8cpp_source.html">TestUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">return</span> optNet-&gt;<a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>-&gt;GetGraph();</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00953">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p>
</div>
</div>
<a id="a6d9d90e2ace1cd49789835b0073196a3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6d9d90e2ace1cd49789835b0073196a3">&#9670;&nbsp;</a></span>GetILayerSupportByBackendId()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_layer_support_handle.html">LayerSupportHandle</a> GetILayerSupportByBackendId </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.html">armnn::BackendId</a> &amp;&#160;</td>
<td class="paramname"><em>backend</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Convenience function to retrieve the ILayerSupportHandle for a backend. </p>
<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.html#l00023">23</a> of file <a class="el" href="_backend_helper_8cpp_source.html">BackendHelper.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; BackendRegistry&amp; backendRegistry = <a class="code" href="namespacearmnn.html#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>();</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">if</span> (!backendRegistry.IsBackendRegistered(backend))</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; {</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> LayerSupportHandle(<span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; }</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">auto</span> backendObject = factoryFunc();</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">return</span> LayerSupportHandle(backendObject-&gt;GetLayerSupport(), backend);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_registry_8cpp_source.html#l00015">BackendRegistryInstance()</a>, <a class="el" href="_backend_registry_8cpp_source.html#l00057">BackendRegistry::GetFactory()</a>, and <a class="el" href="_backend_registry_8cpp_source.html#l00052">BackendRegistry::IsBackendRegistered()</a>.</p>
</div>
</div>
<a id="a9ef4b4b6c421b5fd4b62274e63d08f11"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9ef4b4b6c421b5fd4b62274e63d08f11">&#9670;&nbsp;</a></span>GetInputTensor()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classarmnn_1_1_const_tensor.html">armnn::ConstTensor</a> armnn::GetInputTensor </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a>&#160;</td>
<td class="paramname"><em>layerId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#aa01bce88f89975a5a031db4cc8861527">InputTensors</a> &amp;&#160;</td>
<td class="paramname"><em>inputTensors</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_loaded_network_8cpp_source.html#l01460">1460</a> of file <a class="el" href="_loaded_network_8cpp_source.html">LoadedNetwork.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;{</div>
<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> inputTensorPair : inputTensors)</div>
<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; {</div>
<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; <a class="code" href="namespacearmnn.html#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> <span class="keywordtype">id</span> = inputTensorPair.first;</div>
<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == layerId)</div>
<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; {</div>
<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; <span class="keywordflow">return</span> inputTensorPair.second;</div>
<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; }</div>
<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; }</div>
<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Input does not exist.&quot;</span>);</div>
<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a2187ea15b1ae8c323a0cc5c211fc43d9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2187ea15b1ae8c323a0cc5c211fc43d9">&#9670;&nbsp;</a></span>GetInputTensorData()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>* armnn::GetInputTensorData </td>
<td>(</td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>idx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const PayloadType &amp;&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.html#l00042">42</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.html">RefWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;{</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> ITensorHandle* tensorHandle = data.m_Inputs[idx];</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>*<span class="keyword">&gt;</span>(tensorHandle-&gt;Map());</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_i_tensor_handle.html#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</a>.</p>
</div>
</div>
<a id="ac44cb4d413a43342b120b2c4d047d648"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac44cb4d413a43342b120b2c4d047d648">&#9670;&nbsp;</a></span>GetInputTensorDataBFloat16()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classarmnn_1_1_b_float16.html">BFloat16</a>* armnn::GetInputTensorDataBFloat16 </td>
<td>(</td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>idx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const PayloadType &amp;&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.html#l00086">86</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.html">RefWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">return</span> GetInputTensorData&lt;BFloat16&gt;(idx, data);</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a691846a9eee59b0cd5b22fb5f674e007"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a691846a9eee59b0cd5b22fb5f674e007">&#9670;&nbsp;</a></span>GetInputTensorDataFloat()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const float* armnn::GetInputTensorDataFloat </td>
<td>(</td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>idx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const PayloadType &amp;&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.html#l00062">62</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.html">RefWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;{</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> GetInputTensorData&lt;float&gt;(idx, data);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a084b0ce273bef78aa314bd97fc574b84"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a084b0ce273bef78aa314bd97fc574b84">&#9670;&nbsp;</a></span>GetInputTensorDataHalf()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">Half</a>* armnn::GetInputTensorDataHalf </td>
<td>(</td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>idx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const PayloadType &amp;&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.html#l00074">74</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.html">RefWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;{</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">return</span> GetInputTensorData&lt;Half&gt;(idx, data);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a2b8ec686784330e8f20e4444f1ed7e98"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2b8ec686784330e8f20e4444f1ed7e98">&#9670;&nbsp;</a></span>GetLayerInOutDatatype()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;<a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt; armnn::GetLayerInOutDatatype </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.html">Layer</a> *&#160;</td>
<td class="paramname"><em>layer</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01017">1017</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;{</div>
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataTypeIn = layer-&gt;GetNumInputSlots() == 0 ? DataType::Float32 :</div>
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; layer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo().GetDataType();</div>
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataTypeOut = layer-&gt;GetNumOutputSlots() == 0 ? DataType::Float32 :</div>
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; layer-&gt;GetOutputSlot(0).GetTensorInfo().GetDataType();</div>
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="keywordflow">return</span> {dataTypeIn, dataTypeOut};</div>
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_layer_8hpp_source.html#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.html#l00200">TensorInfo::GetDataType()</a>, <a class="el" href="_layer_8hpp_source.html#l00337">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00334">Layer::GetNumInputSlots()</a>, <a class="el" href="_layer_8hpp_source.html#l00335">Layer::GetNumOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.html#l00339">Layer::GetOutputSlot()</a>, and <a class="el" href="_layer_8cpp_source.html#l00100">OutputSlot::GetTensorInfo()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01179">AssignBackends()</a>, and <a class="el" href="_network_8cpp_source.html#l01073">AssignBackendsIConnectable()</a>.</p>
</div>
</div>
<a id="addb6b14dd1b632263ffe77430259a7c4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#addb6b14dd1b632263ffe77430259a7c4">&#9670;&nbsp;</a></span>GetLayerTypeAsCString()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char const * GetLayerTypeAsCString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td>
<td class="paramname"><em>type</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_internal_types_8cpp_source.html#l00013">13</a> of file <a class="el" href="_internal_types_8cpp_source.html">InternalTypes.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;{</div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; <span class="keywordflow">switch</span> (type)</div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; {</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#define X(name) case LayerType::name: return #name;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <a class="code" href="_types_8hpp.html#ac6d0779b576215649c2610ef2bd1903f">LIST_OF_LAYER_TYPE</a></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#undef X</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Unknown layer type&quot;</span>);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; }</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_types_8hpp_source.html#l00408">LIST_OF_LAYER_TYPE</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l00844">AttemptBackendAssignment()</a>, <a class="el" href="_test_utils_8cpp_source.html#l00014">Connect()</a>, <a class="el" href="_strategy_base_8hpp_source.html#l00033">StrategyBase&lt; DefaultStrategy &gt;::ExecuteStrategy()</a>, <a class="el" href="_layer_8cpp_source.html#l00432">Layer::InferOutputShapes()</a>, <a class="el" href="_graph_8cpp_source.html#l00645">Graph::InferTensorInfos()</a>, <a class="el" href="_graph_8cpp_source.html#l00068">Graph::Print()</a>, <a class="el" href="_network_8cpp_source.html#l00786">ReturnWithError()</a>, <a class="el" href="_layer_8cpp_source.html#l00540">Layer::SerializeLayerParameters()</a>, <a class="el" href="_graph_8cpp_source.html#l00146">Graph::SerializeToDot()</a>, <a class="el" href="_elementwise_base_layer_8cpp_source.html#l00068">ElementwiseBaseLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_elementwise_binary_layer_8cpp_source.html#l00076">ElementwiseBinaryLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_elementwise_unary_layer_8cpp_source.html#l00048">ElementwiseUnaryLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_graph_8cpp_source.html#l00622">Graph::VerifyConstantLayerSetTensorInfo()</a>, and <a class="el" href="_layer_8cpp_source.html#l00410">Layer::VerifyLayerConnections()</a>.</p>
</div>
</div>
<a id="a0ad431ff1600c845fda078ac58a47809"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0ad431ff1600c845fda078ac58a47809">&#9670;&nbsp;</a></span>GetLogicalBinaryOperationAsCString()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetLogicalBinaryOperationAsCString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a2da4db0140d1a6dc69c9c82e9ef5379e">LogicalBinaryOperation</a>&#160;</td>
<td class="paramname"><em>operation</em></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="_types_utils_8hpp_source.html#l00109">109</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;{</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">switch</span> (operation)</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; {</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">case</span> LogicalBinaryOperation::LogicalAnd: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LogicalAnd&quot;</span>;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">case</span> LogicalBinaryOperation::LogicalOr: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LogicalOr&quot;</span>;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55">LogicalAnd</a>, and <a class="el" href="namespacearmnn.html#a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247">LogicalOr</a>.</p>
</div>
</div>
<a id="aa0a94554d6ef64e32793b3d54b2563f0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa0a94554d6ef64e32793b3d54b2563f0">&#9670;&nbsp;</a></span>GetMemBlockStrategyTypeName()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::GetMemBlockStrategyTypeName </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a7100de49939c3e393101f78d425a98c6">MemBlockStrategyType</a>&#160;</td>
<td class="paramname"><em>memBlockStrategyType</em></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="_types_utils_8hpp_source.html#l00295">295</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;{</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">switch</span> (memBlockStrategyType)</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; {</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">case</span> MemBlockStrategyType::SingleAxisPacking: <span class="keywordflow">return</span> <span class="stringliteral">&quot;SingleAxisPacking&quot;</span>;</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">case</span> MemBlockStrategyType::MultiAxisPacking: <span class="keywordflow">return</span> <span class="stringliteral">&quot;MultiAxisPacking&quot;</span>;</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; }</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f">MultiAxisPacking</a>, and <a class="el" href="namespacearmnn.html#a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7">SingleAxisPacking</a>.</p>
<p class="reference">Referenced by <a class="el" href="_runtime_8cpp_source.html#l00323">RuntimeImpl::RuntimeImpl()</a>.</p>
</div>
</div>
<a id="a7c8192a429fc68220e4fc308062a02ba"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7c8192a429fc68220e4fc308062a02ba">&#9670;&nbsp;</a></span>GetMemoryOptimizerStrategy()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_i_memory_optimizer_strategy.html">IMemoryOptimizerStrategy</a>&gt; armnn::GetMemoryOptimizerStrategy </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>strategyName</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_memory_optimizer_strategy_library_8hpp_source.html#l00036">36</a> of file <a class="el" href="_memory_optimizer_strategy_library_8hpp_source.html">MemoryOptimizerStrategyLibrary.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; strategyFactoryMap = GetStrategyFactories();</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">auto</span> strategyFactory = strategyFactoryMap.find(strategyName);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">if</span> (strategyFactory != GetStrategyFactories().end())</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; {</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> strategyFactory-&gt;second-&gt;CreateMemoryOptimizerStrategy();</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_runtime_8cpp_source.html#l00323">RuntimeImpl::RuntimeImpl()</a>.</p>
</div>
</div>
<a id="aedc54936fd5ebb2d5697c8001532401a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aedc54936fd5ebb2d5697c8001532401a">&#9670;&nbsp;</a></span>GetMemoryOptimizerStrategyNames()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const std::vector&lt;std::string&gt; armnn::GetMemoryOptimizerStrategyNames </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_memory_optimizer_strategy_library_8hpp_source.html#l00047">47</a> of file <a class="el" href="_memory_optimizer_strategy_library_8hpp_source.html">MemoryOptimizerStrategyLibrary.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; strategyFactoryMap = GetStrategyFactories();</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; std::vector&lt;std::string&gt; strategyNames;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; strategyFactory : strategyFactoryMap)</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; strategyNames.emplace_back(strategyFactory.first);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">return</span> strategyNames;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ac8c5f9574593b4623d4850f5fd26e3cc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac8c5f9574593b4623d4850f5fd26e3cc">&#9670;&nbsp;</a></span>GetModelOptionsForTesting()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> &amp; GetModelOptionsForTesting </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> *&#160;</td>
<td class="paramname"><em>optNet</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_test_utils_8cpp_source.html#l00054">54</a> of file <a class="el" href="_test_utils_8cpp_source.html">TestUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;{</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">return</span> optNet-&gt;<a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>-&gt;GetModelOptions();</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00953">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p>
</div>
</div>
<a id="aeadd602e128a2be97161345b48533417"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeadd602e128a2be97161345b48533417">&#9670;&nbsp;</a></span>GetNormalizationAlgorithmChannelAsCString()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::GetNormalizationAlgorithmChannelAsCString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#abe18a5033f2ab9c0de82c676b48f5437">NormalizationAlgorithmChannel</a>&#160;</td>
<td class="paramname"><em>channel</em></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="_types_utils_8hpp_source.html#l00265">265</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;{</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">switch</span> (channel)</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; {</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">case</span> NormalizationAlgorithmChannel::Across: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Across&quot;</span>;</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">case</span> NormalizationAlgorithmChannel::Within: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Within&quot;</span>;</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">Across</a>, and <a class="el" href="namespacearmnn.html#abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b">Within</a>.</p>
<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00260">StringifyLayerParameters&lt; NormalizationDescriptor &gt;::Serialize()</a>.</p>
</div>
</div>
<a id="ad57460ea53cd0b519a3b3547eaf1db7c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad57460ea53cd0b519a3b3547eaf1db7c">&#9670;&nbsp;</a></span>GetNormalizationAlgorithmMethodAsCString()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::GetNormalizationAlgorithmMethodAsCString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad605d1661fa0d8c7fea651d82fbe11c9">NormalizationAlgorithmMethod</a>&#160;</td>
<td class="paramname"><em>method</em></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="_types_utils_8hpp_source.html#l00275">275</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;{</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">switch</span> (method)</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">case</span> NormalizationAlgorithmMethod::LocalBrightness: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LocalBrightness&quot;</span>;</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">case</span> NormalizationAlgorithmMethod::LocalContrast: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LocalContrast&quot;</span>;</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; }</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad605d1661fa0d8c7fea651d82fbe11c9ac65d2e51c610dd3853a3c777aa8bfe9d">LocalBrightness</a>, and <a class="el" href="namespacearmnn.html#ad605d1661fa0d8c7fea651d82fbe11c9aa94d2fcabc6b001015aeddfa19266e6f">LocalContrast</a>.</p>
<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00260">StringifyLayerParameters&lt; NormalizationDescriptor &gt;::Serialize()</a>.</p>
</div>
</div>
<a id="a3f8e72f86ecaf365978a993127ea5957"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3f8e72f86ecaf365978a993127ea5957">&#9670;&nbsp;</a></span>GetNumActivations()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned int armnn::GetNumActivations </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_fully_connected_workload_8cpp_source.html#l00016">16</a> of file <a class="el" href="_ref_fully_connected_workload_8cpp_source.html">RefFullyConnectedWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numActivations = 1; <span class="comment">// Total number of activations in the input.</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1; i &lt; inputInfo.GetNumDimensions(); i++)</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; {</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; numActivations *= inputInfo.GetShape()[i];</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; }</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> numActivations;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, and <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>.</p>
</div>
</div>
<a id="ae266ee8bf362cbf8a88ab6e6b389791a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae266ee8bf362cbf8a88ab6e6b389791a">&#9670;&nbsp;</a></span>GetNumberOfCacheFiles()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned int GetNumberOfCacheFiles </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.html">armnn::BackendId</a> &amp;&#160;</td>
<td class="paramname"><em>backend</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the number of cached files if backend supports caching. </p>
<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.html#l00130">130</a> of file <a class="el" href="_backend_helper_8cpp_source.html">BackendHelper.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;{</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span>&amp; backendRegistry = <a class="code" href="namespacearmnn.html#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>();</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; {</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keyword">auto</span> backendObject = factoryFunc();</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">return</span> backendObject-&gt;GetNumberOfCacheFiles();</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_registry_8cpp_source.html#l00015">BackendRegistryInstance()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_armnn_driver_8hpp_source.html#l00095">ArmnnDriver::getNumberOfCacheFilesNeeded()</a>, <a class="el" href="_armnn_driver_impl_8cpp_source.html#l00099">ArmnnDriverImpl::PrepareArmnnModel()</a>, and <a class="el" href="_armnn_driver_impl_8cpp_source.html#l00338">ArmnnDriverImpl::PrepareArmnnModelFromCache()</a>.</p>
</div>
</div>
<a id="aed508ea8d7b3ef4e171cb6f178acf086"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aed508ea8d7b3ef4e171cb6f178acf086">&#9670;&nbsp;</a></span>GetNumInputs()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint32_t armnn::GetNumInputs </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>biasEnabled</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_descriptors_8cpp_source.html#l00455">455</a> of file <a class="el" href="_descriptors_8cpp_source.html">Descriptors.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;{</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputs = 2;</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">if</span> (biasEnabled)</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; {</div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; numInputs = 3;</div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; }</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">return</span> numInputs;</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_descriptors_8cpp_source.html#l00475">FullyConnectedDescriptor::GetNumInputs()</a>, <a class="el" href="_descriptors_8cpp_source.html#l00470">Convolution2dDescriptor::GetNumInputs()</a>, <a class="el" href="_descriptors_8cpp_source.html#l00465">Convolution3dDescriptor::GetNumInputs()</a>, and <a class="el" href="_descriptors_8cpp_source.html#l00480">DepthwiseConvolution2dDescriptor::GetNumInputs()</a>.</p>
</div>
</div>
<a id="adafb0fd0a3f6435c2bdf41f971761ecf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adafb0fd0a3f6435c2bdf41f971761ecf">&#9670;&nbsp;</a></span>GetOffset()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned int armnn::GetOffset </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>shape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>b</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>w</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>c</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_utils_1_1_data_layout_indexed.html">DataLayoutIndexed</a> &amp;&#160;</td>
<td class="paramname"><em>dataLayout</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_space_to_batch_nd_8cpp_source.html#l00015">15</a> of file <a class="el" href="_space_to_batch_nd_8cpp_source.html">SpaceToBatchNd.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="comment">// 3D Tensors</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelDimension3D = dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a7d8b3d755b6ca8f5533657969efb06c4">GetDataLayout</a>() == DataLayout::NCHW ? 1 : 2;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">if</span> (shape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() == 3)</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; {</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">return</span> (b * shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()] + h) * shape[channelDimension3D] + c;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; }</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="comment">// 4D Tensors</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (shape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() == 4)</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; {</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">if</span> (dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a7d8b3d755b6ca8f5533657969efb06c4">GetDataLayout</a>() == DataLayout::NHWC)</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; {</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">return</span> ((b * shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()] + h) * shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()] + w) *</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()] + c;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; }</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">return</span> ((b * shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()] + c) * shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()] + h) *</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()] + w;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(<span class="stringliteral">&quot;Tensor rank must be either 3 or 4&quot;</span>, <a class="code" href="_exceptions_8hpp.html#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>());</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; }</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00203">CHECK_LOCATION</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00022">DataLayoutIndexed::GetDataLayout()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_tensor_8cpp_source.html#l00174">TensorShape::GetNumDimensions()</a>, and <a class="el" href="_data_layout_indexed_8hpp_source.html#l00025">DataLayoutIndexed::GetWidthIndex()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_space_to_batch_nd_8cpp_source.html#l00048">SpaceToBatchNd()</a>, and <a class="el" href="_space_to_depth_8cpp_source.html#l00036">SpaceToDepth()</a>.</p>
</div>
</div>
<a id="a67d7ce2e14ebd328f423322db88279c3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a67d7ce2e14ebd328f423322db88279c3">&#9670;&nbsp;</a></span>GetOutputShapeRoundingAsCString()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetOutputShapeRoundingAsCString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#adf2e5515c4c36a3e7e46bb8b83c6754e">OutputShapeRounding</a>&#160;</td>
<td class="paramname"><em>rounding</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.html#l00139">139</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;{</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">switch</span> (rounding)</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">case</span> OutputShapeRounding::Ceiling: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Ceiling&quot;</span>;</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">case</span> OutputShapeRounding::Floor: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Floor&quot;</span>;</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb">Ceiling</a>, and <a class="el" href="namespacearmnn.html#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">Floor</a>.</p>
<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00337">StringifyLayerParameters&lt; Pooling2dDescriptor &gt;::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00365">StringifyLayerParameters&lt; Pooling3dDescriptor &gt;::Serialize()</a>.</p>
</div>
</div>
<a id="ac624e40d8096e61c73b246934f18afd0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac624e40d8096e61c73b246934f18afd0">&#9670;&nbsp;</a></span>GetOutputTensor()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classarmnn_1_1_tensor.html">armnn::Tensor</a> armnn::GetOutputTensor </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a>&#160;</td>
<td class="paramname"><em>layerId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#a8f091a512915d1cb29a4ebf13dfc53ea">OutputTensors</a> &amp;&#160;</td>
<td class="paramname"><em>outputTensors</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_loaded_network_8cpp_source.html#l01473">1473</a> of file <a class="el" href="_loaded_network_8cpp_source.html">LoadedNetwork.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;{</div>
<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> outputTensorPair : outputTensors)</div>
<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; {</div>
<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; <a class="code" href="namespacearmnn.html#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> <span class="keywordtype">id</span> = outputTensorPair.first;</div>
<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == layerId)</div>
<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; {</div>
<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; <span class="keywordflow">return</span> outputTensorPair.second;</div>
<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; }</div>
<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; }</div>
<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Output does not exist.&quot;</span>);</div>
<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a5442d22144b3608bcfc7eea1bc55e35d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5442d22144b3608bcfc7eea1bc55e35d">&#9670;&nbsp;</a></span>GetOutputTensorData() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>* armnn::GetOutputTensorData </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *&#160;</td>
<td class="paramname"><em>tensorHandle</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.html#l00056">56</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.html">RefWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;{</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>*<span class="keyword">&gt;</span>(tensorHandle-&gt;Map());</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_i_tensor_handle.html#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</a>.</p>
</div>
</div>
<a id="ae9f37e0b5f15afd89a29788a319da9ec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae9f37e0b5f15afd89a29788a319da9ec">&#9670;&nbsp;</a></span>GetOutputTensorData() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> * GetOutputTensorData </td>
<td>(</td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>idx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const PayloadType &amp;&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.html#l00180">180</a> of file <a class="el" href="_cl_workload_utils_8hpp_source.html">ClWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;{</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; ITensorHandle* tensorHandle = data.m_Outputs[idx];</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>*<span class="keyword">&gt;</span>(tensorHandle-&gt;Map());</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_i_tensor_handle.html#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</a>.</p>
</div>
</div>
<a id="a85ace5e5f41a093622a8c04150d24c60"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a85ace5e5f41a093622a8c04150d24c60">&#9670;&nbsp;</a></span>GetOutputTensorDataBFloat16()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_b_float16.html">BFloat16</a>* armnn::GetOutputTensorDataBFloat16 </td>
<td>(</td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>idx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const PayloadType &amp;&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.html#l00092">92</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.html">RefWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;{</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">return</span> GetOutputTensorData&lt;BFloat16&gt;(idx, data);</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ab5f0afc1e37fd100843ecd55d8f284c1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab5f0afc1e37fd100843ecd55d8f284c1">&#9670;&nbsp;</a></span>GetOutputTensorDataFloat()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">float* armnn::GetOutputTensorDataFloat </td>
<td>(</td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>idx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const PayloadType &amp;&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.html#l00068">68</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.html">RefWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;{</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">return</span> GetOutputTensorData&lt;float&gt;(idx, data);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ab98e77207c3d676b0b9ffa67357dbc6a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab98e77207c3d676b0b9ffa67357dbc6a">&#9670;&nbsp;</a></span>GetOutputTensorDataHalf()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">Half</a>* armnn::GetOutputTensorDataHalf </td>
<td>(</td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>idx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const PayloadType &amp;&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.html#l00080">80</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.html">RefWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;{</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> GetOutputTensorData&lt;Half&gt;(idx, data);</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a129bde68152f5892e6abdedcb62aa983"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a129bde68152f5892e6abdedcb62aa983">&#9670;&nbsp;</a></span>GetPaddingMethodAsCString()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetPaddingMethodAsCString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a3888429b6ebc79f9a7df549e5e4d9a2f">PaddingMethod</a>&#160;</td>
<td class="paramname"><em>method</em></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="_types_utils_8hpp_source.html#l00149">149</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;{</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">switch</span> (method)</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; {</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">case</span> PaddingMethod::Exclude: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Exclude&quot;</span>;</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">case</span> PaddingMethod::IgnoreValue: <span class="keywordflow">return</span> <span class="stringliteral">&quot;IgnoreValue&quot;</span>;</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6">Exclude</a>, and <a class="el" href="namespacearmnn.html#a3888429b6ebc79f9a7df549e5e4d9a2faad301514192636ad34210adce598a45a">IgnoreValue</a>.</p>
<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00337">StringifyLayerParameters&lt; Pooling2dDescriptor &gt;::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00365">StringifyLayerParameters&lt; Pooling3dDescriptor &gt;::Serialize()</a>.</p>
</div>
</div>
<a id="adb4d7f45aaa839541a90821a21d69c82"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adb4d7f45aaa839541a90821a21d69c82">&#9670;&nbsp;</a></span>GetPaddingModeAsCString()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetPaddingModeAsCString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91">PaddingMode</a>&#160;</td>
<td class="paramname"><em>mode</em></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="_types_utils_8hpp_source.html#l00159">159</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;{</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">switch</span> (mode)</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; {</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">case</span> PaddingMode::Constant: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Exclude&quot;</span>;</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">case</span> PaddingMode::Symmetric: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Symmetric&quot;</span>;</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">case</span> PaddingMode::Reflect: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Reflect&quot;</span>;</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00">Reflect</a>, and <a class="el" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626">Symmetric</a>.</p>
<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00301">StringifyLayerParameters&lt; PadDescriptor &gt;::Serialize()</a>.</p>
</div>
</div>
<a id="a517314c21ac5309b90408da162212f9d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a517314c21ac5309b90408da162212f9d">&#9670;&nbsp;</a></span>GetPoolingAlgorithmAsCString()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetPoolingAlgorithmAsCString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718">PoolingAlgorithm</a>&#160;</td>
<td class="paramname"><em>pooling</em></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="_types_utils_8hpp_source.html#l00128">128</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;{</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">switch</span> (pooling)</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">case</span> PoolingAlgorithm::Average: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Average&quot;</span>;</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">case</span> PoolingAlgorithm::Max: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Max&quot;</span>;</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">case</span> PoolingAlgorithm::L2: <span class="keywordflow">return</span> <span class="stringliteral">&quot;L2&quot;</span>;</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">Average</a>, <a class="el" href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76">L2</a>, and <a class="el" href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718a6a061313d22e51e0f25b7cd4dc065233">Max</a>.</p>
<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00337">StringifyLayerParameters&lt; Pooling2dDescriptor &gt;::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00365">StringifyLayerParameters&lt; Pooling3dDescriptor &gt;::Serialize()</a>.</p>
</div>
</div>
<a id="a292c96e5bbde0ca0242b1138bea6195d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a292c96e5bbde0ca0242b1138bea6195d">&#9670;&nbsp;</a></span>GetProfilingService()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm::pipe::IProfilingService &amp; GetProfilingService </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_runtime_impl.html">armnn::RuntimeImpl</a> *&#160;</td>
<td class="paramname"><em>runtime</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_test_utils_8cpp_source.html#l00059">59</a> of file <a class="el" href="_test_utils_8cpp_source.html">TestUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;{</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">return</span> *(runtime-&gt;m_ProfilingService.get());</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a3c1f8116bfc753b5a72ae00d9f92a595"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3c1f8116bfc753b5a72ae00d9f92a595">&#9670;&nbsp;</a></span>GetReduceOperationAsCString()</h2>
<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>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0">ReduceOperation</a>&#160;</td>
<td class="paramname"><em>reduce_operation</em></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="_types_utils_8hpp_source.html#l00170">170</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;{</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">switch</span> (reduce_operation)</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; {</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Sum: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Sum&quot;</span>;</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Max: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Max&quot;</span>;</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Mean: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Mean&quot;</span>;</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Min: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Min&quot;</span>;</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Prod: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Prod&quot;</span>;</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; }</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a6a061313d22e51e0f25b7cd4dc065233">Max</a>, <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">Mean</a>, <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a78d811e98514cd165dda532286610fd2">Min</a>, <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">Prod</a>, and <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">Sum</a>.</p>
<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00414">StringifyLayerParameters&lt; ReduceDescriptor &gt;::Serialize()</a>.</p>
</div>
</div>
<a id="aded981a42027bd3302b9c0f09d988659"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aded981a42027bd3302b9c0f09d988659">&#9670;&nbsp;</a></span>GetResizeMethodAsCString()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::GetResizeMethodAsCString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4">ResizeMethod</a>&#160;</td>
<td class="paramname"><em>method</em></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="_types_utils_8hpp_source.html#l00285">285</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;{</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">switch</span> (method)</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; {</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">case</span> ResizeMethod::Bilinear: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Bilinear&quot;</span>;</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">case</span> ResizeMethod::NearestNeighbor: <span class="keywordflow">return</span> <span class="stringliteral">&quot;NearestNeighbour&quot;</span>;</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">Bilinear</a>, and <a class="el" href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">NearestNeighbor</a>.</p>
<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00442">StringifyLayerParameters&lt; ResizeDescriptor &gt;::Serialize()</a>.</p>
</div>
</div>
<a id="ab4c4804c2b7c7b4b25a8eca3272e12d4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab4c4804c2b7c7b4b25a8eca3272e12d4">&#9670;&nbsp;</a></span>GetSizePrefixedClContext()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const armnn::ClContext* armnn::GetSizePrefixedClContext </td>
<td>(</td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>buf</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.html#l00144">144</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.html">ClContextSchema_generated.h</a>.</p>
<div class="fragment"><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; {</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">return</span> flatbuffers::GetSizePrefixedRoot&lt;armnn::ClContext&gt;(buf);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a19a90c41ca2f46ab29918fef1a6ad72e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a19a90c41ca2f46ab29918fef1a6ad72e">&#9670;&nbsp;</a></span>GetStatusAsCString()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetStatusAsCString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a>&#160;</td>
<td class="paramname"><em>status</em></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="_types_utils_8hpp_source.html#l00021">21</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">switch</span> (status)</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Status::Success</a>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Status::Success&quot;</span>;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">armnn::Status::Failure</a>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Status::Failure&quot;</span>;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; }</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">Failure</a>, and <a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Success</a>.</p>
<p class="reference">Referenced by <a class="el" href="_types_utils_8hpp_source.html#l00328">operator&lt;&lt;()</a>.</p>
</div>
</div>
<a id="aa815fde54f6d8e8aa5b4f0301cf4178b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa815fde54f6d8e8aa5b4f0301cf4178b">&#9670;&nbsp;</a></span>GetTensorInfo()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a>&amp; armnn::GetTensorInfo </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *&#160;</td>
<td class="paramname"><em>tensorHandle</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>float32 helpers </p>
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.html#l00033">33</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.html">RefWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;{</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="comment">// We know that reference workloads use RefTensorHandles for inputs and outputs</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> TensorHandleType* refTensorHandle =</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; PolymorphicDowncast&lt;const TensorHandleType*&gt;(tensorHandle);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">return</span> refTensorHandle-&gt;GetTensorInfo();</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_batch_norm_impl_8cpp_source.html#l00018">BatchNormImpl()</a>, <a class="el" href="_concatenate_8cpp_source.html#l00014">Concatenate()</a>, <a class="el" href="_ref_elementwise_binary_workload_8cpp_source.html#l00027">ExecuteFunction()</a>, <a class="el" href="_splitter_8cpp_source.html#l00020">Split()</a>, <a class="el" href="_splitter_8hpp_source.html#l00017">Splitter()</a>, <a class="el" href="_fill_layer_8cpp_source.html#l00034">FillLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_switch_layer_8cpp_source.html#l00032">SwitchLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_constant_layer_8cpp_source.html#l00045">ConstantLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_detection_post_process_layer_8cpp_source.html#l00039">DetectionPostProcessLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_splitter_layer_8cpp_source.html#l00205">SplitterLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_lstm_layer_8cpp_source.html#l00172">LstmLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_quantized_lstm_layer_8cpp_source.html#l00100">QuantizedLstmLayer::ValidateTensorShapesFromInputs()</a>, and <a class="el" href="_q_lstm_layer_8cpp_source.html#l00174">QLstmLayer::ValidateTensorShapesFromInputs()</a>.</p>
</div>
</div>
<a id="a441621f00fd5665898c81a5ae3473c6b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a441621f00fd5665898c81a5ae3473c6b">&#9670;&nbsp;</a></span>GetTimeDuration()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::chrono::duration&lt;double, std::milli&gt; armnn::GetTimeDuration </td>
<td>(</td>
<td class="paramtype">std::chrono::high_resolution_clock::time_point&#160;</td>
<td class="paramname"><em>start_time</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_timer_8hpp_source.html#l00019">19</a> of file <a class="el" href="_timer_8hpp_source.html">Timer.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> std::chrono::duration&lt;double, std::milli&gt;(<a class="code" href="namespacearmnn.html#ac895f6f6897ce335b7b433201bae0b48">GetTimeNow</a>() - start_time);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_timer_8hpp_source.html#l00014">GetTimeNow()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_runtime_8cpp_source.html#l00647">RuntimeImpl::EnqueueWorkload()</a>, <a class="el" href="_runtime_8cpp_source.html#l00699">RuntimeImpl::Execute()</a>, and <a class="el" href="_runtime_8cpp_source.html#l00551">RuntimeImpl::~RuntimeImpl()</a>.</p>
</div>
</div>
<a id="ac895f6f6897ce335b7b433201bae0b48"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac895f6f6897ce335b7b433201bae0b48">&#9670;&nbsp;</a></span>GetTimeNow()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::chrono::high_resolution_clock::time_point armnn::GetTimeNow </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_timer_8hpp_source.html#l00014">14</a> of file <a class="el" href="_timer_8hpp_source.html">Timer.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{</div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keywordflow">return</span> std::chrono::high_resolution_clock::now();</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_runtime_8cpp_source.html#l00647">RuntimeImpl::EnqueueWorkload()</a>, <a class="el" href="_runtime_8cpp_source.html#l00699">RuntimeImpl::Execute()</a>, <a class="el" href="_timer_8hpp_source.html#l00019">GetTimeDuration()</a>, <a class="el" href="_runtime_8cpp_source.html#l00323">RuntimeImpl::RuntimeImpl()</a>, and <a class="el" href="_runtime_8cpp_source.html#l00551">RuntimeImpl::~RuntimeImpl()</a>.</p>
</div>
</div>
<a id="a6dac966f265381903c8ef4f392becced"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6dac966f265381903c8ef4f392becced">&#9670;&nbsp;</a></span>GetUnaryOperationAsCString()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetUnaryOperationAsCString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8">UnaryOperation</a>&#160;</td>
<td class="paramname"><em>operation</em></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="_types_utils_8hpp_source.html#l00092">92</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;{</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">switch</span> (operation)</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">case</span> UnaryOperation::Abs: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Abs&quot;</span>;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">case</span> UnaryOperation::Ceil: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Ceil&quot;</span>;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">case</span> UnaryOperation::Exp: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Exp&quot;</span>;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">case</span> UnaryOperation::Sqrt: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Sqrt&quot;</span>;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">case</span> UnaryOperation::Rsqrt: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Rsqrt&quot;</span>;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">case</span> UnaryOperation::Neg: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Neg&quot;</span>;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">case</span> UnaryOperation::Log: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Log&quot;</span>;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">case</span> UnaryOperation::LogicalNot: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LogicalNot&quot;</span>;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">case</span> UnaryOperation::Sin: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Sin&quot;</span>;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; }</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8a1e34af023adeb7d5f484f8eb4b9826b6">Abs</a>, <a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8ab95a01ffffa8fcdd2a9af961937c097c">Ceil</a>, <a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0">Exp</a>, <a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b">Log</a>, <a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc">LogicalNot</a>, <a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd">Neg</a>, <a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4">Rsqrt</a>, <a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd">Sin</a>, and <a class="el" href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8aae77f3ad25595e35b327334d89410054">Sqrt</a>.</p>
<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.html#l00196">StringifyLayerParameters&lt; ElementwiseUnaryDescriptor &gt;::Serialize()</a>.</p>
</div>
</div>
<a id="a36e8f52330a21eeab3cc7c4e030f3583"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a36e8f52330a21eeab3cc7c4e030f3583">&#9670;&nbsp;</a></span>GetUnpaddedTensorStrides()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> GetUnpaddedTensorStrides </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>tensorInfo</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_tensor_handle_8cpp_source.html#l00015">15</a> of file <a class="el" href="_tensor_handle_8cpp_source.html">TensorHandle.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;{</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; TensorShape shape(tensorInfo.GetShape());</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">auto</span> size = <a class="code" href="namespacearmnn.html#aa02b9e06fb20fa3c13da0427e6ee5ab2">GetDataTypeSize</a>(tensorInfo.GetDataType());</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">auto</span> runningSize = size;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; std::vector&lt;unsigned int&gt; strides(shape.GetNumDimensions());</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">auto</span> lastIdx = shape.GetNumDimensions()-1;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i &lt; lastIdx ; i++)</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; {</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; strides[lastIdx-i] = runningSize;</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; runningSize *= shape[lastIdx-i];</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; }</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; strides[0] = runningSize;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> TensorShape(shape.GetNumDimensions(), strides.data());</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.html#l00200">TensorInfo::GetDataType()</a>, <a class="el" href="_types_utils_8hpp_source.html#l00182">GetDataTypeSize()</a>, <a class="el" href="_tensor_8cpp_source.html#l00174">TensorShape::GetNumDimensions()</a>, and <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_tosa_ref_tensor_handle_8hpp_source.html#l00039">TosaRefTensorHandle::GetStrides()</a>, <a class="el" href="_sample_tensor_handle_8hpp_source.html#l00039">SampleTensorHandle::GetStrides()</a>, <a class="el" href="_ref_tensor_handle_8hpp_source.html#l00043">RefTensorHandle::GetStrides()</a>, <a class="el" href="_tensor_handle_8hpp_source.html#l00052">ConstTensorHandle::GetStrides()</a>, and <a class="el" href="_ref_tensor_handle_8hpp_source.html#l00106">RefTensorHandleDecorator::GetStrides()</a>.</p>
</div>
</div>
<a id="aa09a8bb02eed50715082d8b7fccd2f8d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa09a8bb02eed50715082d8b7fccd2f8d">&#9670;&nbsp;</a></span>GetVersion()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const std::string GetVersion </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_utils_8cpp_source.html#l00081">81</a> of file <a class="el" href="_utils_8cpp_source.html">Utils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;{</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">return</span> <a class="code" href="include_2armnn_2_version_8hpp.html#a50bf0553d5c4b76d18a3d37e155b4d11">ARMNN_VERSION</a>;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="include_2armnn_2_version_8hpp_source.html#l00022">ARMNN_VERSION</a>.</p>
</div>
</div>
<a id="a40f8d250a71183a6cd1b700b287fc32c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a40f8d250a71183a6cd1b700b287fc32c">&#9670;&nbsp;</a></span>GpuFsaActivationCreateOp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void GpuFsaActivationCreateOp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *&#160;</td>
<td class="paramname"><em>blob</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_activation_8cpp_source.html#l00058">58</a> of file <a class="el" href="_gpu_fsa_activation_8cpp_source.html">GpuFsaActivation.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;{</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; GpuWorkloadSketch* sketch = blob-&gt;sketch.get();</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; GpuWorkloadContext* workloadContext = blob-&gt;workloadContext.get();</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; inputTensorInfos = {};</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; outputTensorInfos = {};</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input, input.GetNumDimensions());</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; aclInput0Info.set_are_values_constant(input.IsConstant());</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; inputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info(aclInput0Info));</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">// Validate operator, check status and update reasonIfUnsupported</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus{};</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">switch</span> (descriptor.m_Function)</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">case</span> ActivationFunction::TanH:</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; aclStatus = GpuTanh::validate_op(*sketch, inputTensorInfos[0]);</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Sigmoid:</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; aclStatus = GpuSigmoid::validate_op(*sketch, inputTensorInfos[0]);</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(std::string(<span class="stringliteral">&quot;Activation function currently not supported in GpuFsa: &quot;</span>)</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; + <a class="code" href="namespacearmnn.html#aa093207ea7c4e7a9c9abe40d2f57995b">GetActivationFunctionAsCString</a>(descriptor.m_Function));</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> supported = aclStatus.error_code() == arm_compute::ErrorCode::OK;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">if</span> (!supported)</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; {</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">throw</span> BackendCapabilityException(<span class="stringliteral">&quot;\&quot;GpuFsa\&quot; backend failed during Activation layer validation&quot;</span>);</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; arm_compute::ITensorInfo* activationOutputInfo{};</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">switch</span> (descriptor.m_Function)</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">case</span> ActivationFunction::TanH:</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; {</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; activationOutputInfo = GpuTanh::create_op(*sketch, inputTensorInfos[0]);</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Sigmoid:</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; {</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; activationOutputInfo = GpuSigmoid::create_op(*sketch, inputTensorInfos[0]);</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(std::string(<span class="stringliteral">&quot;Activation function currently not supported in GpuFsa: &quot;</span>)</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; + <a class="code" href="namespacearmnn.html#aa093207ea7c4e7a9c9abe40d2f57995b">GetActivationFunctionAsCString</a>(descriptor.m_Function));</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; </div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="comment">// Temporary fix until fusing attempt is make for GpuFsa backend and Output layer workload is created.</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; outputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info());</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; GpuOutput::create_op(*sketch, activationOutputInfo, outputTensorInfos[0]);</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="comment">// Store the TensorInfos within the blob as unique_ptrs to be used later</span></div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; blob-&gt;inputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(inputTensorInfos);</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; blob-&gt;outputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(outputTensorInfos);</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00034">GpuFsaPreCompiledBlob::sketch</a>, and <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00035">GpuFsaPreCompiledBlob::workloadContext</a>.</p>
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00220">GpuFsaBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="aa8d17ff94651485b0aa4b58e1d4ef5b5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa8d17ff94651485b0aa4b58e1d4ef5b5">&#9670;&nbsp;</a></span>GpuFsaActivationValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status GpuFsaActivationValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_activation_8cpp_source.html#l00022">22</a> of file <a class="el" href="_gpu_fsa_activation_8cpp_source.html">GpuFsaActivation.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="comment">// Create a new workload sketch, for validation purposes</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">auto</span> compileCtx = arm_compute::CLKernelLibrary::get().get_compile_context();</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">auto</span> workloadContext = GpuWorkloadContext(&amp;compileCtx);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; GpuWorkloadSketch sketch{ &amp;workloadContext };</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, input.GetNumDimensions());</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; aclInputInfo.set_are_values_constant(input.IsConstant());</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; arm_compute::ITensorInfo* inputInfo = workloadContext.create_tensor_info(aclInputInfo);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">switch</span> (descriptor.m_Function)</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; {</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">case</span> ActivationFunction::TanH:</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">if</span> ( descriptor.m_A != 1 || descriptor.m_B != 1)</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="stringliteral">&quot;Activation function TanH only works with a=1 and b=1&quot;</span>);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> GpuTanh::validate_op(sketch, inputInfo);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; }</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Sigmoid:</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">return</span> GpuSigmoid::validate_op(sketch, inputInfo);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; std::string(<span class="stringliteral">&quot;Activation function currently not supported in GpuFsa: &quot;</span>)</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; + <a class="code" href="namespacearmnn.html#aa093207ea7c4e7a9c9abe40d2f57995b">GetActivationFunctionAsCString</a>(descriptor.m_Function));</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_layer_support_8cpp_source.html#l00071">GpuFsaLayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
<a id="ab912656f08118f8b81f8261b5e0dc3a9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab912656f08118f8b81f8261b5e0dc3a9">&#9670;&nbsp;</a></span>GpuFsaBackendId()</h2>
<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::GpuFsaBackendId </td>
<td>(</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="_gpu_fsa_backend_id_8hpp_source.html#l00010">10</a> of file <a class="el" href="_gpu_fsa_backend_id_8hpp_source.html">GpuFsaBackendId.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;GpuFsa&quot;</span>; }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00069">GpuFsaBackend::GetIdStatic()</a>.</p>
</div>
</div>
<a id="a1334119d4ee3de23f273ee91aa256cbd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1334119d4ee3de23f273ee91aa256cbd">&#9670;&nbsp;</a></span>GpuFsaBatchMatMulCreateOp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void GpuFsaBatchMatMulCreateOp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *&#160;</td>
<td class="paramname"><em>blob</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_batch_mat_mul_descriptor.html">BatchMatMulDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_batch_mat_mul_8cpp_source.html#l00051">51</a> of file <a class="el" href="_gpu_fsa_batch_mat_mul_8cpp_source.html">GpuFsaBatchMatMul.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;{</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; GpuWorkloadSketch* sketch = blob-&gt;sketch.get();</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; GpuWorkloadContext* workloadContext = blob-&gt;workloadContext.get();</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; inputTensorInfos = {};</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; outputTensorInfos = {};</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0, input0.GetNumDimensions());</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1, input1.GetNumDimensions());</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; </div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; aclInput0Info.set_are_values_constant(input0.IsConstant());</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; aclInput1Info.set_are_values_constant(input1.IsConstant());</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; inputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info(aclInput0Info));</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; inputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info(aclInput1Info));</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; MatMulAttributes matMulAttributes{};</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; matMulAttributes.adj_lhs(descriptor.m_TransposeX);</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; matMulAttributes.adj_rhs(descriptor.m_TransposeY);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; GpuMatMulSettings matmulSettings{};</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; matmulSettings.m0(1);</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; matmulSettings.n0(1);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; matmulSettings.k0(1);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">// Validate operator, check status and update reasonIfUnsupported</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = GpuMatMul::validate_op(*sketch,</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; inputTensorInfos[0],</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; inputTensorInfos[1],</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; matMulAttributes,</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; matmulSettings);</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; </div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> supported = aclStatus.error_code() == arm_compute::ErrorCode::OK;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">if</span> (!supported)</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; {</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">throw</span> BackendCapabilityException(<span class="stringliteral">&quot;\&quot;GpuFsa\&quot; backend failed during elementwise binary add validation&quot;</span>);</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; arm_compute::ITensorInfo* addOutputInfo = GpuMatMul::create_op(*sketch,</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; inputTensorInfos[0],</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; inputTensorInfos[1],</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; matMulAttributes,</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; matmulSettings);</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; </div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// Temporary fix until fusing attempt is make for GpuFsa backend and Output layer workload is created.</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; outputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info());</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; GpuOutput::create_op(*sketch, addOutputInfo, outputTensorInfos[0]);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="comment">// Store the TensorInfos within the blob as unique_ptrs to be used later</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; blob-&gt;inputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(inputTensorInfos);</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; blob-&gt;outputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(outputTensorInfos);</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00034">GpuFsaPreCompiledBlob::sketch</a>, and <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00035">GpuFsaPreCompiledBlob::workloadContext</a>.</p>
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00220">GpuFsaBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="a47e56eb9bcbb170dddd202d770ed2cd8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a47e56eb9bcbb170dddd202d770ed2cd8">&#9670;&nbsp;</a></span>GpuFsaBatchMatMulValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status GpuFsaBatchMatMulValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_batch_mat_mul_descriptor.html">BatchMatMulDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_batch_mat_mul_8cpp_source.html#l00022">22</a> of file <a class="el" href="_gpu_fsa_batch_mat_mul_8cpp_source.html">GpuFsaBatchMatMul.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="comment">// Create a new workload sketch, for validation purposes</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">auto</span> compileCtx = arm_compute::CLKernelLibrary::get().get_compile_context();</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">auto</span> workloadContext = GpuWorkloadContext(&amp;compileCtx);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; GpuWorkloadSketch sketch{ &amp;workloadContext };</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0, input0.GetNumDimensions());</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1, input1.GetNumDimensions());</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; aclInput0Info.set_are_values_constant(input0.IsConstant());</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; aclInput1Info.set_are_values_constant(input1.IsConstant());</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; arm_compute::ITensorInfo* inputInfo0 = workloadContext.create_tensor_info(aclInput0Info);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; arm_compute::ITensorInfo* inputInfo1 = workloadContext.create_tensor_info(aclInput1Info);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; MatMulAttributes matMulAttributes{};</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; matMulAttributes.adj_lhs(descriptor.m_TransposeX);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; matMulAttributes.adj_rhs(descriptor.m_TransposeY);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; GpuMatMulSettings matmulSettings{};</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; matmulSettings.m0(1);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; matmulSettings.n0(1);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; matmulSettings.k0(1);</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">return</span> GpuMatMul::validate_op(sketch, inputInfo0, inputInfo1, matMulAttributes, matmulSettings);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_layer_support_8cpp_source.html#l00071">GpuFsaLayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
<a id="aa2889978c1d194097838a2a0e671da60"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa2889978c1d194097838a2a0e671da60">&#9670;&nbsp;</a></span>GpuFsaCastCreateOp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void GpuFsaCastCreateOp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *&#160;</td>
<td class="paramname"><em>blob</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_cast_8cpp_source.html#l00061">61</a> of file <a class="el" href="_gpu_fsa_cast_8cpp_source.html">GpuFsaCast.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;{</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">using namespace </span>armcomputetensorutils;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; GpuWorkloadSketch* sketch = blob-&gt;sketch.get();</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; GpuWorkloadContext* workloadContext = blob-&gt;workloadContext.get();</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; inputTensorInfos = {};</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; outputTensorInfos = {};</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; arm_compute::TensorInfo aclinputInfo = BuildArmComputeTensorInfo(input, input.GetNumDimensions());</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; aclinputInfo.set_are_values_constant(input.IsConstant());</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; inputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info(aclinputInfo));</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; CastAttributes cast_attr = CastAttributesFromTensorInfo(output);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; </div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="comment">// Validate operator, check status and update reasonIfUnsupported</span></div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = GpuCast::validate_op(*sketch, inputTensorInfos[0], cast_attr);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> validated = aclStatus.error_code() == arm_compute::ErrorCode::OK;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">if</span> (!validated)</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; {</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">throw</span> BackendCapabilityException(<span class="stringliteral">&quot;\&quot;&quot;</span> + std::string(<a class="code" href="namespacearmnn.html#ab912656f08118f8b81f8261b5e0dc3a9">GpuFsaBackendId</a>())</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; + <span class="stringliteral">&quot;\&quot; backend failed during cast operator validation&quot;</span>);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; arm_compute::ITensorInfo* castOutputInfo =</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; GpuCast::create_op(*sketch, inputTensorInfos[0], cast_attr);</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="comment">// Temporary fix until fusing attempt is make for GpuFsa backend and Output layer workload is created.</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; outputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info());</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; GpuOutput::create_op(*sketch, castOutputInfo, outputTensorInfos[0]);</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// Store the TensorInfos within the blob as unique_ptrs to be used later</span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; blob-&gt;inputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(inputTensorInfos);</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; blob-&gt;outputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(outputTensorInfos);</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00034">GpuFsaPreCompiledBlob::sketch</a>, and <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00035">GpuFsaPreCompiledBlob::workloadContext</a>.</p>
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00220">GpuFsaBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="a10d20c479436685e213150471a4a395b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a10d20c479436685e213150471a4a395b">&#9670;&nbsp;</a></span>GpuFsaCastValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status GpuFsaCastValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_cast_8cpp_source.html#l00033">33</a> of file <a class="el" href="_gpu_fsa_cast_8cpp_source.html">GpuFsaCast.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;{</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">using namespace </span>armcomputetensorutils;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">// Create a new workload sketch, for validation purposes</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">auto</span> compileCtx = arm_compute::CLKernelLibrary::get().get_compile_context();</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">auto</span> workloadContext = GpuWorkloadContext(&amp;compileCtx);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; GpuWorkloadSketch sketch{ &amp;workloadContext };</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; arm_compute::TensorInfo aclinputInfo = BuildArmComputeTensorInfo(input, input.GetNumDimensions());</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; aclinputInfo.set_are_values_constant(input.IsConstant());</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; arm_compute::ITensorInfo* inputInfo0 = workloadContext.create_tensor_info(aclinputInfo);</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; CastAttributes cast_attr = CastAttributesFromTensorInfo(output);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = GpuCast::validate_op(sketch, inputInfo0, cast_attr);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#ifndef NDEBUG</span></div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> validated = aclStatus.error_code() == arm_compute::ErrorCode::OK;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">if</span> (!validated)</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; {</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;GpuFsaCastValidate failed: &quot;</span> &lt;&lt; aclStatus.error_description() &lt;&lt; std::endl;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_layer_support_8cpp_source.html#l00071">GpuFsaLayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
<a id="a5c31c4a0efe105a5f26067c8433968dd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5c31c4a0efe105a5f26067c8433968dd">&#9670;&nbsp;</a></span>GpuFsaConstantWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status GpuFsaConstantWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_constant_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_gpu_fsa_constant_workload_8cpp_source.html">GpuFsaConstantWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo neonOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; std::array&lt;arm_compute::DataType,8&gt; supportedTypes = {</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; arm_compute::DataType::F16,</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; arm_compute::DataType::F32,</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; arm_compute::DataType::QASYMM8,</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; arm_compute::DataType::QASYMM8_SIGNED,</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; arm_compute::DataType::QSYMM16,</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; arm_compute::DataType::QSYMM8,</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; arm_compute::DataType::QSYMM8_PER_CHANNEL,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; arm_compute::DataType::S32</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; };</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">auto</span> it = std::find(begin(supportedTypes), end(supportedTypes), neonOutputInfo.data_type());</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">if</span> (it != end(supportedTypes))</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{};</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Unsupported DataType&quot;</span>};</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ab8a797269fd9db3b8832998f10ad9688"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab8a797269fd9db3b8832998f10ad9688">&#9670;&nbsp;</a></span>GpuFsaConvolution2dCreateOp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void GpuFsaConvolution2dCreateOp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *&#160;</td>
<td class="paramname"><em>blob</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_convolution2d_descriptor.html">Convolution2dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>weights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>biases</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_convolution2d_8cpp_source.html#l00070">70</a> of file <a class="el" href="_gpu_fsa_convolution2d_8cpp_source.html">GpuFsaConvolution2d.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;{</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment"> * Creating an Op for the GpuFsa backend requires us to create and maintain quite a bit of data, which is then stored</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment"> * in a GpuFsaPreCompiledBlob for execution later. Specifically we need:</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment"> * GpuWorkloadContext, this contains the TensorInfos and is unique to the Graph being executed</span></div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"> * Sketch, this is similar to a subgraph and can contain one or more operations. Multiple ops can be &quot;fused&quot; together</span></div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"> * using a single sketch.</span></div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"> * The inputTensorinfos / outputTensorInfos, these are pointers to the TensorInfos used when creating the sketch.</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"> * They refer to the TensorInfos stored within the GpuWorkloadContext and are needed when executing the sketch</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"> * as the TensorInfos used when creating the Tensors must match those used to create the Sketch. Otherwise the runtime</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment"> * doesn&#39;t know which Tensors to use.</span></div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; GpuWorkloadSketch* sketch = blob-&gt;sketch.get();</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; GpuWorkloadContext* workloadContext = blob-&gt;workloadContext.get();</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; inputTensorInfos = {};</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; outputTensorInfos = {};</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="comment">// Build and create tensor infos using the sketch</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; aclWeightsInfo.set_are_values_constant(weights.IsConstant());</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; </div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; inputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info(aclInputInfo));</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; inputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info(aclWeightsInfo));</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// Only create the bias tensor info if enabled, otherwise pass nullptr to validate_op / create_op</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; arm_compute::TensorInfo aclBiasInfo;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; arm_compute::ITensorInfo* biasSketchInfoPtr = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">if</span>(!biases.has_value())</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; {</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;GpuFsaConvolution2d::CreateOp: No biases set when biases are enabled&quot;</span>);</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; aclBiasInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; aclBiasInfo.set_are_values_constant(biases.value().IsConstant());</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; inputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info(aclBiasInfo));</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; biasSketchInfoPtr = inputTensorInfos[2];</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; Conv2dAttributes conv2dAttributes = <a class="code" href="_utils_gpu_fsa_8cpp.html#a6fb30c0d325066e78619d5e5a5611973">CreateConv2dAttributes</a>(descriptor);</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; </div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="comment">// Validate operator, check status and update reasonIfUnsupported</span></div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = GpuConv2d::validate_op(*sketch,</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; inputTensorInfos[0],</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; inputTensorInfos[1],</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; biasSketchInfoPtr,</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; conv2dAttributes);</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> supported = (aclStatus.error_code() == arm_compute::ErrorCode::OK);</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">if</span> (!supported)</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; {</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">throw</span> BackendCapabilityException(<span class="stringliteral">&quot;\&quot;GpuFsa\&quot; backend failed during Convolution2D operation validation&quot;</span>);</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; }</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; </div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="comment">// Create the Op within the Sketch using the TensorInfos we have stored</span></div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; arm_compute::ITensorInfo* convOutInfo = GpuConv2d::create_op(*sketch,</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; inputTensorInfos[0],</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; inputTensorInfos[1],</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; biasSketchInfoPtr,</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; conv2dAttributes);</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; </div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="comment">// Create the Output</span></div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; outputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info());</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; GpuOutput::create_op(*sketch, convOutInfo, outputTensorInfos[0]);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; </div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="comment">// Store the TensorInfos within the blob as unique_ptrs to be used later</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; blob-&gt;inputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(inputTensorInfos);</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; blob-&gt;outputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(outputTensorInfos);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00034">GpuFsaPreCompiledBlob::sketch</a>, and <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00035">GpuFsaPreCompiledBlob::workloadContext</a>.</p>
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00220">GpuFsaBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="a1c42ef784299460fb9db004dd395d5e1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1c42ef784299460fb9db004dd395d5e1">&#9670;&nbsp;</a></span>GpuFsaConvolution2dValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status GpuFsaConvolution2dValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_convolution2d_descriptor.html">Convolution2dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>weights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>biases</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_convolution2d_8cpp_source.html#l00024">24</a> of file <a class="el" href="_gpu_fsa_convolution2d_8cpp_source.html">GpuFsaConvolution2d.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="comment">// Create a new workload sketch, for validation purposes</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">auto</span> compileCtx = arm_compute::CLKernelLibrary::get().get_compile_context();</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">auto</span> workloadContext = GpuWorkloadContext(&amp;compileCtx);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; GpuWorkloadSketch sketch{ &amp;workloadContext };</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="comment">// Build and create tensor infos using the sketch</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; aclWeightsInfo.set_are_values_constant(weights.IsConstant());</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">auto</span> inputInfo = workloadContext.create_tensor_info(aclInputInfo);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">auto</span> weightInfo = workloadContext.create_tensor_info(aclWeightsInfo);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">// Only create the bias tensor info if enabled, otherwise pass nullptr to validate_op</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; arm_compute::TensorInfo aclBiasInfo;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; arm_compute::ITensorInfo* biasSketchInfoPtr = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">if</span>(!biases.has_value())</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;GpuFsaConvolution2d::ValidateOp: No biases set when biases are enabled&quot;</span>);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; aclBiasInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; aclBiasInfo.set_are_values_constant(biases.value().IsConstant());</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; biasSketchInfoPtr = workloadContext.create_tensor_info(aclBiasInfo);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; Conv2dAttributes conv2dAttributes = <a class="code" href="_utils_gpu_fsa_8cpp.html#a6fb30c0d325066e78619d5e5a5611973">CreateConv2dAttributes</a>(descriptor);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="comment">// Validate operator, check status and update reasonIfUnsupported</span></div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = GpuConv2d::validate_op(sketch,</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; inputInfo,</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; weightInfo,</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; biasSketchInfoPtr,</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; conv2dAttributes);</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_layer_support_8cpp_source.html#l00071">GpuFsaLayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
<a id="a5bdf4240a1fbda27b5fc84baba721781"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5bdf4240a1fbda27b5fc84baba721781">&#9670;&nbsp;</a></span>GpuFsaDepthwiseConvolution2dCreateOp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void GpuFsaDepthwiseConvolution2dCreateOp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *&#160;</td>
<td class="paramname"><em>blob</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html">DepthwiseConvolution2dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>weights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>biases</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_depthwise_convolution2d_8cpp_source.html#l00089">89</a> of file <a class="el" href="_gpu_fsa_depthwise_convolution2d_8cpp_source.html">GpuFsaDepthwiseConvolution2d.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;{</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment">* Creating an Op for the GpuFsa backend requires us to create and maintain quite a bit of data, which is then stored</span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment">* in a GpuFsaPreCompiledBlob for execution later. Specifically we need:</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment">* GpuWorkloadContext, this contains the TensorInfos and is unique to the Graph being executed</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment">* Sketch, this is similar to a subgraph and can contain one or more operations. Multiple ops can be &quot;fused&quot; together</span></div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="comment">* using a single sketch.</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="comment">* The inputTensorinfos / outputTensorInfos, these are pointers to the TensorInfos used when creating the sketch.</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="comment">* They refer to the TensorInfos stored within the GpuWorkloadContext and are needed when executing the sketch</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment">* as the TensorInfos used when creating the Tensors must match those used to create the Sketch. Otherwise the runtime</span></div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="comment">* doesn&#39;t know which Tensors to use.</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment">*/</span></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; GpuWorkloadSketch* sketch = blob-&gt;sketch.get();</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; GpuWorkloadContext* workloadContext = blob-&gt;workloadContext.get();</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; inputTensorInfos = {};</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; outputTensorInfos = {};</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; </div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="comment">// Build and create tensor infos using the sketch</span></div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; </div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="comment">// ArmNN format for weights for depthwise is [1, H, W, C] independently of the input/output layout</span></div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="comment">// ACL format for weights for depthwise is:</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="comment">// - [1, H, W, C] for [N, H, W, C] input/output layout (matches with ArmNN)</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="comment">// - [1, C, H, W] for [N, C, H, W] input/output layout</span></div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="comment">// Therefore ArmNN weights have to be permuted when input/output layout is [N, C, H, W] to pass them to ACL.</span></div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="comment">// The PermuteDepthwiseConv2dWeights backend optimization takes care of this, but it has not been performed yet,</span></div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="comment">// so we do the permute here for the TensorInfo weights.</span></div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclDepthMultiplier;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; TensorInfo weightsPermuted;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; std::tie(weightsPermuted, aclDepthMultiplier) = <a class="code" href="namespacearmnn.html#ac4aa9e41515b354234645f115c49de32">Convert1HWOTensorInfoToAcl</a>(weights, input,descriptor.m_DataLayout);</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">auto</span> weightsShape = weightsPermuted.GetShape();</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; weightsPermuted.SetShape({weightsShape[1], weightsShape[2], weightsShape[3]});</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; </div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weightsPermuted, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; aclWeightsInfo.set_are_values_constant(weights.IsConstant());</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; </div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; inputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info(aclInputInfo));</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; inputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info(aclWeightsInfo));</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="comment">// Only create the bias tensor info if enabled, otherwise pass nullptr to validate_op</span></div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; arm_compute::TensorInfo aclBiasInfo;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; arm_compute::ITensorInfo* biasSketchInfoPtr = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; </div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; {</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">if</span>(!biases.has_value())</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;GpuFsaConvolution2dValidate: No biases set when biases are enabled&quot;</span>);</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; aclBiasInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; aclBiasInfo.set_are_values_constant(biases.value().IsConstant());</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; inputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info(aclBiasInfo));</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; biasSketchInfoPtr = inputTensorInfos[2];</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; }</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; </div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; DepthwiseConv2dAttributes depthwiseConv2dAttributes = <a class="code" href="_utils_gpu_fsa_8cpp.html#a54d1f7200479dad24822853a1e1da500">CreateDWConv2dAttributes</a>(descriptor, aclDepthMultiplier);</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; </div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">// Validate operator, check status and update reasonIfUnsupported</span></div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = GpuDepthwiseConv2d::validate_op(*sketch,</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; inputTensorInfos[0],</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; inputTensorInfos[1],</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; biasSketchInfoPtr,</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; depthwiseConv2dAttributes);</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; </div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> supported = (aclStatus.error_code() == arm_compute::ErrorCode::OK);</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">if</span> (!supported)</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; {</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">throw</span> BackendCapabilityException(</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="stringliteral">&quot;\&quot;GpuFsa\&quot; backend failed during DepthwiseConvolution2D operation validation&quot;</span>);</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; }</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; </div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="comment">// Create the Op within the Sketch using the TensorInfos we have stored</span></div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; arm_compute::ITensorInfo* convOutInfo = GpuDepthwiseConv2d::create_op(*sketch,</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; inputTensorInfos[0],</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; inputTensorInfos[1],</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; biasSketchInfoPtr,</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; depthwiseConv2dAttributes);</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; </div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; outputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info());</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; GpuOutput::create_op(*sketch, convOutInfo, outputTensorInfos[0]);</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; </div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="comment">// Store the TensorInfos within the blob as unique_ptrs to be used later</span></div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; blob-&gt;inputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(inputTensorInfos);</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; blob-&gt;outputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(outputTensorInfos);</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00034">GpuFsaPreCompiledBlob::sketch</a>, and <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00035">GpuFsaPreCompiledBlob::workloadContext</a>.</p>
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00220">GpuFsaBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="af2016aed3575b7302e79c72830c23025"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af2016aed3575b7302e79c72830c23025">&#9670;&nbsp;</a></span>GpuFsaDepthwiseConvolution2dValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status GpuFsaDepthwiseConvolution2dValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html">DepthwiseConvolution2dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>weights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>biases</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_depthwise_convolution2d_8cpp_source.html#l00026">26</a> of file <a class="el" href="_gpu_fsa_depthwise_convolution2d_8cpp_source.html">GpuFsaDepthwiseConvolution2d.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="comment">// Create a new workload sketch, for validation purposes</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">auto</span> compileCtx = arm_compute::CLKernelLibrary::get().get_compile_context();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">auto</span> workloadContext = GpuWorkloadContext(&amp;compileCtx);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; GpuWorkloadSketch sketch{ &amp;workloadContext };</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// Build and create tensor infos using the sketch</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// ArmNN format for weights for depthwise is [1, H, W, C] independently of the input/output layout</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">// ACL format for weights for depthwise is:</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">// - [1, H, W, C] for [N, H, W, C] input/output layout (matches with ArmNN)</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// - [1, C, H, W] for [N, C, H, W] input/output layout</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">// Therefore ArmNN weights have to be permuted when input/output layout is [N, C, H, W] to pass them to ACL.</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="comment">// The PermuteDepthwiseConv2dWeights backend optimization takes care of this, but it has not been performed yet,</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="comment">// so we do the permute here for the TensorInfo weights.</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclDepthMultiplier;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; TensorInfo weightsPermuted;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; std::tie(weightsPermuted, aclDepthMultiplier) = <a class="code" href="namespacearmnn.html#ac4aa9e41515b354234645f115c49de32">Convert1HWOTensorInfoToAcl</a>(weights, input,descriptor.m_DataLayout);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">auto</span> weightsShape = weightsPermuted.GetShape();</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; weightsPermuted.SetShape({weightsShape[1], weightsShape[2], weightsShape[3]});</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weightsPermuted, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; aclWeightsInfo.set_are_values_constant(weights.IsConstant());</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">auto</span> inputInfo = workloadContext.create_tensor_info(aclInputInfo);</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">auto</span> weightInfo = workloadContext.create_tensor_info(aclWeightsInfo);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="comment">// Only create the bias tensor info if enabled, otherwise pass nullptr to validate_op</span></div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; arm_compute::TensorInfo aclBiasInfo;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; arm_compute::ITensorInfo* biasSketchInfoPtr = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; </div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">if</span>(!biases.has_value())</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="stringliteral">&quot;GpuFsaDepthwiseConvolution2dValidate: No biases set when biases are enabled&quot;</span>);</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; aclBiasInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; aclBiasInfo.set_are_values_constant(biases.value().IsConstant());</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; biasSketchInfoPtr = workloadContext.create_tensor_info(aclBiasInfo);</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; DepthwiseConv2dAttributes depthwiseConv2dAttributes = <a class="code" href="_utils_gpu_fsa_8cpp.html#a54d1f7200479dad24822853a1e1da500">CreateDWConv2dAttributes</a>(descriptor, aclDepthMultiplier);</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="comment">// Validate operator, check status and update reasonIfUnsupported</span></div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = GpuDepthwiseConv2d::validate_op(sketch,</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; inputInfo,</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; weightInfo,</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; biasSketchInfoPtr,</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; depthwiseConv2dAttributes);</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; </div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_layer_support_8cpp_source.html#l00071">GpuFsaLayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
<a id="ab9fda8f44398cd4c531c9ac136f2a1bf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab9fda8f44398cd4c531c9ac136f2a1bf">&#9670;&nbsp;</a></span>GpuFsaElementwiseBinaryCreateOp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void GpuFsaElementwiseBinaryCreateOp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *&#160;</td>
<td class="paramname"><em>blob</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_elementwise_binary_descriptor.html">ElementwiseBinaryDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_elementwise_binary_8cpp_source.html#l00063">63</a> of file <a class="el" href="_gpu_fsa_elementwise_binary_8cpp_source.html">GpuFsaElementwiseBinary.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;{</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; GpuWorkloadSketch* sketch = blob-&gt;sketch.get();</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; GpuWorkloadContext* workloadContext = blob-&gt;workloadContext.get();</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; inputTensorInfos = {};</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; outputTensorInfos = {};</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0, input0.GetNumDimensions());</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1, input1.GetNumDimensions());</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; aclInput0Info.set_are_values_constant(input0.IsConstant());</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; aclInput1Info.set_are_values_constant(input1.IsConstant());</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; inputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info(aclInput0Info));</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; inputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info(aclInput1Info));</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; </div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="comment">// Validate operator, check status and update reasonIfUnsupported</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="comment">// Validate operator, check status and update reasonIfUnsupported</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus{};</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">switch</span> (descriptor.m_Operation)</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Add:</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; aclStatus = GpuAdd::validate_op(*sketch, inputTensorInfos[0], inputTensorInfos[1]);</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Mul:</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; aclStatus = GpuMul::validate_op(*sketch, inputTensorInfos[0], inputTensorInfos[1]);</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Sub:</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; aclStatus = GpuSub::validate_op(*sketch, inputTensorInfos[0], inputTensorInfos[1]);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(std::string(<span class="stringliteral">&quot;Elementwise Binary operation not supported in GpuFsa: &quot;</span>)</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; + <a class="code" href="namespacearmnn.html#aed346b74795fd613f727ca8369778704">GetBinaryOperationAsCString</a>(descriptor.m_Operation));</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> supported = aclStatus.error_code() == arm_compute::ErrorCode::OK;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">if</span> (!supported)</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">throw</span> BackendCapabilityException(<span class="stringliteral">&quot;\&quot;GpuFsa\&quot; backend failed during elementwise binary add validation&quot;</span>);</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; arm_compute::ITensorInfo* elementwiseBinaryOutputInfo{};</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">switch</span> (descriptor.m_Operation)</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; {</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Add:</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; elementwiseBinaryOutputInfo = GpuAdd::create_op(*sketch, inputTensorInfos[0], inputTensorInfos[1]);</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Mul:</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; {</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; elementwiseBinaryOutputInfo = GpuMul::create_op(*sketch, inputTensorInfos[0], inputTensorInfos[1]);</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Sub:</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; {</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; elementwiseBinaryOutputInfo = GpuSub::create_op(*sketch, inputTensorInfos[0], inputTensorInfos[1]);</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; }</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(std::string(<span class="stringliteral">&quot;Elementwise Binary operation not supported in GpuFsa: &quot;</span>)</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; + <a class="code" href="namespacearmnn.html#aed346b74795fd613f727ca8369778704">GetBinaryOperationAsCString</a>(descriptor.m_Operation));</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; }</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="comment">// Temporary fix until fusing attempt is make for GpuFsa backend and Output layer workload is created.</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; outputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info());</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; GpuOutput::create_op(*sketch, elementwiseBinaryOutputInfo, outputTensorInfos[0]);</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; </div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="comment">// Store the TensorInfos within the blob as unique_ptrs to be used later</span></div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; blob-&gt;inputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(inputTensorInfos);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; blob-&gt;outputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(outputTensorInfos);</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00034">GpuFsaPreCompiledBlob::sketch</a>, and <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00035">GpuFsaPreCompiledBlob::workloadContext</a>.</p>
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00220">GpuFsaBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="abd83d555d05a33057f9e80475522a631"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abd83d555d05a33057f9e80475522a631">&#9670;&nbsp;</a></span>GpuFsaElementwiseBinaryValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status GpuFsaElementwiseBinaryValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_elementwise_binary_descriptor.html">ElementwiseBinaryDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_elementwise_binary_8cpp_source.html#l00024">24</a> of file <a class="el" href="_gpu_fsa_elementwise_binary_8cpp_source.html">GpuFsaElementwiseBinary.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="comment">// Create a new workload sketch, for validation purposes</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">auto</span> compileCtx = arm_compute::CLKernelLibrary::get().get_compile_context();</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">auto</span> workloadContext = GpuWorkloadContext(&amp;compileCtx);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; GpuWorkloadSketch sketch{ &amp;workloadContext };</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0, input0.GetNumDimensions());</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1, input1.GetNumDimensions());</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; aclInput0Info.set_are_values_constant(input0.IsConstant());</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; aclInput1Info.set_are_values_constant(input1.IsConstant());</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; arm_compute::ITensorInfo* inputInfo0 = workloadContext.create_tensor_info(aclInput0Info);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; arm_compute::ITensorInfo* inputInfo1 = workloadContext.create_tensor_info(aclInput1Info);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">switch</span> (descriptor.m_Operation)</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Add:</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> GpuAdd::validate_op(sketch, inputInfo0, inputInfo1);</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Mul:</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">return</span> GpuMul::validate_op(sketch, inputInfo0, inputInfo1);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Sub:</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; {</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">return</span> GpuSub::validate_op(sketch, inputInfo0, inputInfo1);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; }</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; std::string(<span class="stringliteral">&quot;Elementwise Binary operation not supported in GpuFsa: &quot;</span>)</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; + <a class="code" href="namespacearmnn.html#aed346b74795fd613f727ca8369778704">GetBinaryOperationAsCString</a>(descriptor.m_Operation));</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_layer_support_8cpp_source.html#l00071">GpuFsaLayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
<a id="abcce06cfe2568f392b05010579e83ae0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abcce06cfe2568f392b05010579e83ae0">&#9670;&nbsp;</a></span>GpuFsaPooling2dCreateOp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void GpuFsaPooling2dCreateOp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *&#160;</td>
<td class="paramname"><em>blob</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.html">Pooling2dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_pooling2d_8cpp_source.html#l00040">40</a> of file <a class="el" href="_gpu_fsa_pooling2d_8cpp_source.html">GpuFsaPooling2d.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;{</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; GpuWorkloadSketch* sketch = blob-&gt;sketch.get();</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; GpuWorkloadContext* workloadContext = blob-&gt;workloadContext.get();</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; inputTensorInfos = {};</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; outputTensorInfos = {};</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; aclInputInfo.set_are_values_constant(input.IsConstant());</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; inputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info(aclInputInfo));</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; Pool2dAttributes pool2dAttributes = <a class="code" href="_utils_gpu_fsa_8cpp.html#a9dca3adcd3c40a295f4055518b071dd5">CreatePool2dAttributes</a>(descriptor);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; GpuPool2dSettings pool2dSettings{};</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="comment">// Validate operator, check status and update reasonIfUnsupported</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = GpuPool2d::validate_op(*sketch,</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; inputTensorInfos[0],</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; pool2dAttributes,</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; pool2dSettings);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> supported = aclStatus.error_code() == arm_compute::ErrorCode::OK;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">if</span> (!supported)</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">throw</span> BackendCapabilityException(<span class="stringliteral">&quot;\&quot;GpuFsa\&quot; backend failed during pooling 2d validation&quot;</span>);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; arm_compute::ITensorInfo* addOutputInfo = GpuPool2d::create_op(*sketch,</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; inputTensorInfos[0],</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; pool2dAttributes,</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; pool2dSettings);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// Temporary fix until fusing attempt is make for GpuFsa backend and Output layer workload is created.</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; outputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info());</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; GpuOutput::create_op(*sketch, addOutputInfo, outputTensorInfos[0]);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">// Store the TensorInfos within the blob as unique_ptrs to be used later</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; blob-&gt;inputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(inputTensorInfos);</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; blob-&gt;outputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(outputTensorInfos);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00034">GpuFsaPreCompiledBlob::sketch</a>, and <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00035">GpuFsaPreCompiledBlob::workloadContext</a>.</p>
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00220">GpuFsaBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="a7aff81ee45420f659fc30fa239ccc7c8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7aff81ee45420f659fc30fa239ccc7c8">&#9670;&nbsp;</a></span>GpuFsaPooling2dValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status GpuFsaPooling2dValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.html">Pooling2dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_pooling2d_8cpp_source.html#l00022">22</a> of file <a class="el" href="_gpu_fsa_pooling2d_8cpp_source.html">GpuFsaPooling2d.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="comment">// Create a new workload sketch, for validation purposes</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">auto</span> compileCtx = arm_compute::CLKernelLibrary::get().get_compile_context();</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">auto</span> workloadContext = GpuWorkloadContext(&amp;compileCtx);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; GpuWorkloadSketch sketch{ &amp;workloadContext };</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; aclInputInfo.set_are_values_constant(input.IsConstant());</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; arm_compute::ITensorInfo* inputInfo = workloadContext.create_tensor_info(aclInputInfo);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; Pool2dAttributes pool2dAttributes = <a class="code" href="_utils_gpu_fsa_8cpp.html#a9dca3adcd3c40a295f4055518b071dd5">CreatePool2dAttributes</a>(descriptor);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; GpuPool2dSettings pool2dSettings{};</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">return</span> GpuPool2d::validate_op(sketch, inputInfo, pool2dAttributes, pool2dSettings);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_layer_support_8cpp_source.html#l00071">GpuFsaLayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
<a id="a40eb0a9acd5d5111f916bfb29f75599b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a40eb0a9acd5d5111f916bfb29f75599b">&#9670;&nbsp;</a></span>GpuFsaPreCompiledWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::GpuFsaPreCompiledWorkloadValidate </td>
<td>(</td>
<td class="paramtype">std::string *&#160;</td>
<td class="paramname"><em>reasonIfUnsupported</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a4cc1900a15abbcc19a632e99c7c2120f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4cc1900a15abbcc19a632e99c7c2120f">&#9670;&nbsp;</a></span>GpuFsaReshapeCreateOp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void GpuFsaReshapeCreateOp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *&#160;</td>
<td class="paramname"><em>blob</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_reshape_descriptor.html">ReshapeDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_reshape_8cpp_source.html#l00049">49</a> of file <a class="el" href="_gpu_fsa_reshape_8cpp_source.html">GpuFsaReshape.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; GpuWorkloadSketch* sketch = blob-&gt;sketch.get();</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; GpuWorkloadContext* workloadContext = blob-&gt;workloadContext.get();</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; inputTensorInfos;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; outputTensorInfos;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, input.GetNumDimensions());</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; aclInputInfo.set_are_values_constant(input.IsConstant());</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; inputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info(aclInputInfo));</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; ReshapeAttributes attributes;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; attributes.shape(BuildArmComputeTensorShape(descriptor.m_TargetShape));</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; arm_compute::ITensorInfo* addOutputInfo = GpuReshape::create_op(*sketch, inputTensorInfos[0], attributes);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">// Temporary fix until fusing attempt is made for GpuFsa backend and outputLayer workoad is created</span></div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; outputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info());</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; GpuOutput::create_op(*sketch, addOutputInfo, outputTensorInfos[0]);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">// Store the tensorInfos within the blob as std::unique_ptr&lt;&gt; so they can be used later</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; blob-&gt;inputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(inputTensorInfos);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; blob-&gt;outputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(outputTensorInfos);</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00034">GpuFsaPreCompiledBlob::sketch</a>, and <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00035">GpuFsaPreCompiledBlob::workloadContext</a>.</p>
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00220">GpuFsaBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="a75837bce7e31ee2315b702d16833c0ff"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a75837bce7e31ee2315b702d16833c0ff">&#9670;&nbsp;</a></span>GpuFsaReshapeValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status GpuFsaReshapeValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_reshape_descriptor.html">ReshapeDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_reshape_8cpp_source.html#l00022">22</a> of file <a class="el" href="_gpu_fsa_reshape_8cpp_source.html">GpuFsaReshape.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">auto</span> compileContext = arm_compute::CLKernelLibrary::get().get_compile_context();</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">auto</span> workloadContext = GpuWorkloadContext(&amp;compileContext);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; GpuWorkloadSketch sketch(&amp;workloadContext);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, input.GetNumDimensions());</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; aclInputInfo.set_are_values_constant(input.IsConstant());</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; arm_compute::ITensorInfo* inputInfo = workloadContext.create_tensor_info(aclInputInfo);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; ReshapeAttributes attributes;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; attributes.shape(BuildArmComputeTensorShape(descriptor.m_TargetShape));</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = GpuReshape::validate_op(sketch, inputInfo, attributes);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#ifndef NDEBUG</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">if</span> (aclStatus.error_code() != arm_compute::ErrorCode::OK)</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; {</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;GpuFsaReshapeValidate failed: &quot;</span> &lt;&lt; aclStatus.error_description() &lt;&lt; std::endl;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_layer_support_8cpp_source.html#l00071">GpuFsaLayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
<a id="a67faae0ae4e9d94069de01964d3fa0a0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a67faae0ae4e9d94069de01964d3fa0a0">&#9670;&nbsp;</a></span>GpuFsaResizeCreateOp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void GpuFsaResizeCreateOp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *&#160;</td>
<td class="paramname"><em>blob</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_resize_descriptor.html">ResizeDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_resize_8cpp_source.html#l00039">39</a> of file <a class="el" href="_gpu_fsa_resize_8cpp_source.html">GpuFsaResize.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; GpuWorkloadSketch* sketch = blob-&gt;sketch.get();</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; GpuWorkloadContext* workloadContext = blob-&gt;workloadContext.get();</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; inputTensorInfos = {};</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; outputTensorInfos = {};</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; aclInputInfo.set_are_values_constant(input.IsConstant());</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; </div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; inputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info(aclInputInfo));</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; ResizeAttributes resizeAttributes = <a class="code" href="_utils_gpu_fsa_8cpp.html#a5226333a123be03ae6c3609921886a07">CreateResizeAttributes</a>(descriptor);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="comment">// Validate operator, check status and update reasonIfUnsupported</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = GpuResize::validate_op(*sketch,</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; inputTensorInfos[0],</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; resizeAttributes);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> supported = aclStatus.error_code() == arm_compute::ErrorCode::OK;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">if</span> (!supported)</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">throw</span> BackendCapabilityException(<span class="stringliteral">&quot;\&quot;GpuFsa\&quot; backend failed during resize validation&quot;</span>);</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; arm_compute::ITensorInfo* addOutputInfo = GpuResize::create_op(*sketch,</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; inputTensorInfos[0],</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; resizeAttributes);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="comment">// Temporary fix until fusing attempt is make for GpuFsa backend and Output layer workload is created.</span></div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; outputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info());</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; GpuOutput::create_op(*sketch, addOutputInfo, outputTensorInfos[0]);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// Store the TensorInfos within the blob as unique_ptrs to be used later</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; blob-&gt;inputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(inputTensorInfos);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; blob-&gt;outputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(outputTensorInfos);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00034">GpuFsaPreCompiledBlob::sketch</a>, and <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00035">GpuFsaPreCompiledBlob::workloadContext</a>.</p>
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00220">GpuFsaBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="a7a26e6ad4d26aa9c32cfbd1d0d9110be"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7a26e6ad4d26aa9c32cfbd1d0d9110be">&#9670;&nbsp;</a></span>GpuFsaResizeValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status GpuFsaResizeValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_resize_descriptor.html">ResizeDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_resize_8cpp_source.html#l00022">22</a> of file <a class="el" href="_gpu_fsa_resize_8cpp_source.html">GpuFsaResize.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="comment">// Create a new workload sketch, for validation purposes</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">auto</span> compileCtx = arm_compute::CLKernelLibrary::get().get_compile_context();</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">auto</span> workloadContext = GpuWorkloadContext(&amp;compileCtx);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; GpuWorkloadSketch sketch{ &amp;workloadContext };</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; aclInputInfo.set_are_values_constant(input.IsConstant());</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; arm_compute::ITensorInfo* inputInfo = workloadContext.create_tensor_info(aclInputInfo);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; ResizeAttributes resizeAttributes = <a class="code" href="_utils_gpu_fsa_8cpp.html#a5226333a123be03ae6c3609921886a07">CreateResizeAttributes</a>(descriptor);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> GpuResize::validate_op(sketch, inputInfo, resizeAttributes);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_layer_support_8cpp_source.html#l00071">GpuFsaLayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
<a id="af347e46317f7427d35f87c6fae065bcb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af347e46317f7427d35f87c6fae065bcb">&#9670;&nbsp;</a></span>GpuFsaSoftmaxCreateOp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void GpuFsaSoftmaxCreateOp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_gpu_fsa_pre_compiled_blob.html">GpuFsaPreCompiledBlob</a> *&#160;</td>
<td class="paramname"><em>blob</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_softmax_descriptor.html">SoftmaxDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_softmax_8cpp_source.html#l00063">63</a> of file <a class="el" href="_gpu_fsa_softmax_8cpp_source.html">GpuFsaSoftmax.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;{</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; GpuWorkloadSketch* sketch = blob-&gt;sketch.get();</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; GpuWorkloadContext* workloadContext = blob-&gt;workloadContext.get();</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; inputTensorInfos = {};</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; outputTensorInfos = {};</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, input.GetNumDimensions());</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, output.GetNumDimensions());</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; aclInputInfo.set_are_values_constant(input.IsConstant());</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; aclOutputInfo.set_are_values_constant(output.IsConstant());</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; inputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info(aclInputInfo));</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; outputTensorInfos.emplace_back(workloadContext-&gt;create_tensor_info(aclOutputInfo));</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; </div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="comment">// Set Softmax attributes using descriptor</span></div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; SoftmaxAttributes softmaxAttributes{};</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; softmaxAttributes.beta(descriptor.m_Beta); <span class="comment">// Only used for LogSoftmax else default</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; softmaxAttributes.is_log_softmax(<span class="keyword">false</span>); <span class="comment">// Use Softmax not LogSoftmax</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.html#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(descriptor.m_Axis, input);</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; softmaxAttributes.axis(aclAxis);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; </div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="comment">// Validate operator, check status and update reasonIfUnsupported</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = GpuSoftmax::validate_op(*sketch,</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; inputTensorInfos[0],</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; outputTensorInfos[0],</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; softmaxAttributes);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> supported = aclStatus.error_code() == arm_compute::ErrorCode::OK;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">if</span> (!supported)</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">throw</span> BackendCapabilityException(<span class="stringliteral">&quot;\&quot;GpuFsa\&quot; backend failed during softmax validation&quot;</span>);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; </div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; GpuSoftmax::create_op(*sketch, inputTensorInfos[0], outputTensorInfos[0], softmaxAttributes);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="comment">// Store the TensorInfos within the blob as unique_ptrs to be used later</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; blob-&gt;inputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(inputTensorInfos);</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; blob-&gt;outputTensorInfos = std::make_unique&lt;std::vector&lt;arm_compute::ITensorInfo*&gt;&gt;(outputTensorInfos);</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00034">GpuFsaPreCompiledBlob::sketch</a>, and <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00035">GpuFsaPreCompiledBlob::workloadContext</a>.</p>
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00220">GpuFsaBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="ad0672c046428b5b75115d2c91d0162eb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad0672c046428b5b75115d2c91d0162eb">&#9670;&nbsp;</a></span>GpuFsaSoftmaxValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status GpuFsaSoftmaxValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_softmax_descriptor.html">SoftmaxDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_softmax_8cpp_source.html#l00022">22</a> of file <a class="el" href="_gpu_fsa_softmax_8cpp_source.html">GpuFsaSoftmax.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="comment">// Create a new workload sketch, for validation purposes</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">auto</span> compileCtx = arm_compute::CLKernelLibrary::get().get_compile_context();</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">auto</span> workloadContext = GpuWorkloadContext(&amp;compileCtx);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; GpuWorkloadSketch sketch{ &amp;workloadContext };</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="comment">// Build and create tensor infos using the sketch</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, input.GetNumDimensions());</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, output.GetNumDimensions());</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; aclInputInfo.set_are_values_constant(input.IsConstant());</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; aclOutputInfo.set_are_values_constant(output.IsConstant());</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; arm_compute::ITensorInfo* inputInfo = workloadContext.create_tensor_info(aclInputInfo);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; arm_compute::ITensorInfo* outputInfo = workloadContext.create_tensor_info(aclOutputInfo);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// Set Softmax attributes using descriptor</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; SoftmaxAttributes softmaxAttributes{};</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; softmaxAttributes.beta(descriptor.m_Beta);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; softmaxAttributes.is_log_softmax(<span class="keyword">false</span>); <span class="comment">// Use Softmax not LogSoftmax</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.html#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(descriptor.m_Axis, input);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; softmaxAttributes.axis(aclAxis);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="comment">// Validate operator, check status and update reasonIfUnsupported</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = GpuSoftmax::validate_op(sketch,</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; inputInfo,</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; outputInfo,</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; softmaxAttributes);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#ifndef NDEBUG</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> validated = aclStatus.error_code() == arm_compute::ErrorCode::OK;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">if</span> (!validated)</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;GpuFsaSoftmaxValidate failed: &quot;</span> &lt;&lt; aclStatus.error_description() &lt;&lt; std::endl;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_layer_support_8cpp_source.html#l00071">GpuFsaLayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
<a id="a18fff586ab6caa7bc3adc16ccce650a4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a18fff586ab6caa7bc3adc16ccce650a4">&#9670;&nbsp;</a></span>GpuFsaTensorHandleFactoryId()</h2>
<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::GpuFsaTensorHandleFactoryId </td>
<td>(</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="_gpu_fsa_tensor_handle_factory_8hpp_source.html#l00014">14</a> of file <a class="el" href="_gpu_fsa_tensor_handle_factory_8hpp_source.html">GpuFsaTensorHandleFactory.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;Arm/GpuFsa/TensorHandleFactory&quot;</span>; }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_tensor_handle_factory_8cpp_source.html#l00086">GpuFsaTensorHandleFactory::GetIdStatic()</a>.</p>
</div>
</div>
<a id="a78fe085e22e9822075ad791aa5cc34d5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a78fe085e22e9822075ad791aa5cc34d5">&#9670;&nbsp;</a></span>HasCapability() <span class="overload">[1/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool HasCapability </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.html">BackendOptions::BackendOption</a> &amp;&#160;</td>
<td class="paramname"><em>backendOption</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.html">armnn::BackendId</a> &amp;&#160;</td>
<td class="paramname"><em>backend</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Convenience function to check if a given capability matches a capability in a backend. </p>
<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.html#l00080">80</a> of file <a class="el" href="_backend_helper_8cpp_source.html">BackendHelper.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;{</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a406399d2a16ead98e4e93cdd57adead4">HasMatchingCapability</a>(backendOption, backend);</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_helper_8cpp_source.html#l00085">HasMatchingCapability()</a>.</p>
</div>
</div>
<a id="ae702febbc6139e20b2b8c4f03ff89b01"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae702febbc6139e20b2b8c4f03ff89b01">&#9670;&nbsp;</a></span>HasCapability() <span class="overload">[2/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool HasCapability </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.html">BackendOptions::BackendOption</a> &amp;&#160;</td>
<td class="paramname"><em>capability</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &amp;&#160;</td>
<td class="paramname"><em>capabilities</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Convenience function to check if a given capability matches a capability in a BackendCapabilities struct. </p>
<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.html#l00075">75</a> of file <a class="el" href="_backend_helper_8cpp_source.html">BackendHelper.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;{</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a406399d2a16ead98e4e93cdd57adead4">HasMatchingCapability</a>(capability, capabilities);</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_helper_8cpp_source.html#l00085">HasMatchingCapability()</a>.</p>
</div>
</div>
<a id="a8439e8b224a1fb7abdf449c8e6775469"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8439e8b224a1fb7abdf449c8e6775469">&#9670;&nbsp;</a></span>HasCapability() <span class="overload">[3/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool HasCapability </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>name</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.html">armnn::BackendId</a> &amp;&#160;</td>
<td class="paramname"><em>backend</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Convenience function to check if a capability exists in a backend. </p>
<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.html#l00070">70</a> of file <a class="el" href="_backend_helper_8cpp_source.html">BackendHelper.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;{</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a71c3bdadfe1c69aba2cbf054bff47744">GetCapability</a>(name, backend).has_value();</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_helper_8cpp_source.html#l00037">GetCapability()</a>.</p>
</div>
</div>
<a id="abd839f0f103c1ae19a4b38d59b869108"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abd839f0f103c1ae19a4b38d59b869108">&#9670;&nbsp;</a></span>HasCapability() <span class="overload">[4/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool HasCapability </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>name</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &amp;&#160;</td>
<td class="paramname"><em>capabilities</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Convenience function to check if a capability exists in a BackendCapabilites struct. </p>
<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.html#l00065">65</a> of file <a class="el" href="_backend_helper_8cpp_source.html">BackendHelper.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;{</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a71c3bdadfe1c69aba2cbf054bff47744">GetCapability</a>(name, capabilities).has_value();</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_helper_8cpp_source.html#l00037">GetCapability()</a>.</p>
</div>
</div>
<a id="ab627d99aaab05ad358c60fb931cee241"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab627d99aaab05ad358c60fb931cee241">&#9670;&nbsp;</a></span>HasMatchingCapability() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool HasMatchingCapability </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.html">BackendOptions::BackendOption</a> &amp;&#160;</td>
<td class="paramname"><em>backendOption</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.html">armnn::BackendId</a> &amp;&#160;</td>
<td class="paramname"><em>backend</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Convenience function to check if a given capability matches a capability in a backend. </p>
<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.html#l00117">117</a> of file <a class="el" href="_backend_helper_8cpp_source.html">BackendHelper.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;{</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span>&amp; backendRegistry = <a class="code" href="namespacearmnn.html#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>();</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keyword">auto</span> backendObject = factoryFunc();</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">auto</span> capabilities = backendObject-&gt;GetCapabilities();</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a406399d2a16ead98e4e93cdd57adead4">HasMatchingCapability</a>(backendOption, capabilities);</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_registry_8cpp_source.html#l00015">BackendRegistryInstance()</a>, and <a class="el" href="_backend_helper_8cpp_source.html#l00085">HasMatchingCapability()</a>.</p>
</div>
</div>
<a id="a406399d2a16ead98e4e93cdd57adead4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a406399d2a16ead98e4e93cdd57adead4">&#9670;&nbsp;</a></span>HasMatchingCapability() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool HasMatchingCapability </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.html">BackendOptions::BackendOption</a> &amp;&#160;</td>
<td class="paramname"><em>capability</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &amp;&#160;</td>
<td class="paramname"><em>capabilities</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Convenience function to check if a given capability matches a capability in a BackendCapabilities struct. </p>
<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.html#l00085">85</a> of file <a class="el" href="_backend_helper_8cpp_source.html">BackendHelper.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;{</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i &lt; capabilities.GetOptionCount(); i++)</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; backendCapability = capabilities.GetOption(i);</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">if</span> (capability.GetName() == backendCapability.GetName())</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; {</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">if</span> (capability.GetValue().IsBool() &amp;&amp; backendCapability.GetValue().IsBool())</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">return</span> capability.GetValue().AsBool() == backendCapability.GetValue().AsBool();</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsFloat() &amp;&amp; backendCapability.GetValue().IsFloat())</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; {</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> capability.GetValue().AsFloat() == backendCapability.GetValue().AsFloat();</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsInt() &amp;&amp; backendCapability.GetValue().IsInt())</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; {</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">return</span> capability.GetValue().AsInt() == backendCapability.GetValue().AsInt();</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsString() &amp;&amp; backendCapability.GetValue().IsString())</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">return</span> capability.GetValue().AsString() == backendCapability.GetValue().AsString();</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsUnsignedInt() &amp;&amp; backendCapability.GetValue().IsUnsignedInt())</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> capability.GetValue().AsUnsignedInt() == backendCapability.GetValue().AsUnsignedInt();</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_options_8hpp_source.html#l00119">BackendOptions::Var::AsBool()</a>, <a class="el" href="_backend_options_8hpp_source.html#l00122">BackendOptions::Var::AsFloat()</a>, <a class="el" href="_backend_options_8hpp_source.html#l00120">BackendOptions::Var::AsInt()</a>, <a class="el" href="_backend_options_8hpp_source.html#l00123">BackendOptions::Var::AsString()</a>, <a class="el" href="_backend_options_8hpp_source.html#l00121">BackendOptions::Var::AsUnsignedInt()</a>, <a class="el" href="_backend_options_8hpp_source.html#l00251">BackendOptions::BackendOption::GetName()</a>, <a class="el" href="_backend_options_8hpp_source.html#l00285">BackendOptions::GetOption()</a>, <a class="el" href="_backend_options_8hpp_source.html#l00284">BackendOptions::GetOptionCount()</a>, <a class="el" href="_backend_options_8hpp_source.html#l00252">BackendOptions::BackendOption::GetValue()</a>, <a class="el" href="_backend_options_8hpp_source.html#l00112">BackendOptions::Var::IsBool()</a>, <a class="el" href="_backend_options_8hpp_source.html#l00115">BackendOptions::Var::IsFloat()</a>, <a class="el" href="_backend_options_8hpp_source.html#l00113">BackendOptions::Var::IsInt()</a>, <a class="el" href="_backend_options_8hpp_source.html#l00116">BackendOptions::Var::IsString()</a>, and <a class="el" href="_backend_options_8hpp_source.html#l00114">BackendOptions::Var::IsUnsignedInt()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_armnn_device_8cpp_source.html#l00042">ArmnnDevice::ArmnnDevice()</a>, <a class="el" href="_network_8cpp_source.html#l01026">CheckFp16Support()</a>, <a class="el" href="_backend_helper_8cpp_source.html#l00075">HasCapability()</a>, <a class="el" href="_backend_helper_8cpp_source.html#l00117">HasMatchingCapability()</a>, <a class="el" href="_loaded_network_8cpp_source.html#l01486">LoadedNetwork::ImportInputs()</a>, <a class="el" href="_loaded_network_8cpp_source.html#l01632">LoadedNetwork::ImportOutputs()</a>, and <a class="el" href="_runtime_8cpp_source.html#l00323">RuntimeImpl::RuntimeImpl()</a>.</p>
</div>
</div>
<a id="a44affeeb090c3c6a3062830562672e84"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a44affeeb090c3c6a3062830562672e84">&#9670;&nbsp;</a></span>IgnoreUnused()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void armnn::IgnoreUnused </td>
<td>(</td>
<td class="paramtype">Ts &amp;&amp;&#160;</td>
<td class="paramname"><em>...</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ignore_unused_8hpp_source.html#l00014">14</a> of file <a class="el" href="_ignore_unused_8hpp_source.html">IgnoreUnused.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;{}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_backend_default_allocator_8hpp_source.html#l00019">ClBackendDefaultAllocator::allocate()</a>, <a class="el" href="_default_allocator_8hpp_source.html#l00022">DefaultAllocator::allocate()</a>, <a class="el" href="_gpu_fsa_backend_default_allocator_8hpp_source.html#l00023">GpuFsaBackendDefaultAllocator::allocate()</a>, <a class="el" href="_arg_min_max_8cpp_source.html#l00017">ArgMinMax()</a>, <a class="el" href="_network_8cpp_source.html#l01566">CalculateSlotOptionForOutput()</a>, <a class="el" href="_i_tensor_handle_8hpp_source.html#l00086">ITensorHandle::CanBeImported()</a>, <a class="el" href="_cl_tensor_handle_8hpp_source.html#l00135">ClTensorHandle::CanBeImported()</a>, <a class="el" href="_cl_convolution3d_workload_8cpp_source.html#l00060">ClConvolution3dWorkload::ClConvolution3dWorkload()</a>, <a class="el" href="_space_to_depth_layer_8cpp_source.html#l00038">SpaceToDepthLayer::Clone()</a>, <a class="el" href="_space_to_batch_nd_layer_8cpp_source.html#l00033">SpaceToBatchNdLayer::Clone()</a>, <a class="el" href="_dynamic_backend_utils_8cpp_source.html#l00037">DynamicBackendUtils::CloseHandle()</a>, <a class="el" href="_conversion_utils_8cpp_source.html#l00086">ConstTensorPin::ConstTensorPin()</a>, <a class="el" href="_i_backend_internal_8hpp_source.html#l00215">IBackendInternal::CreateExecutionData()</a>, <a class="el" href="_ref_tensor_handle_factory_8cpp_source.html#l00022">RefTensorHandleFactory::CreateSubTensorHandle()</a>, <a class="el" href="_tosa_ref_tensor_handle_factory_8cpp_source.html#l00022">TosaRefTensorHandleFactory::CreateSubTensorHandle()</a>, <a class="el" href="_sample_dynamic_tensor_handle_factory_8cpp_source.html#l00023">SampleDynamicTensorHandleFactory::CreateSubTensorHandle()</a>, <a class="el" href="_sample_dynamic_workload_factory_8hpp_source.html#l00033">SampleDynamicWorkloadFactory::CreateSubTensorHandle()</a>, <a class="el" href="_tosa_ref_workload_factory_8hpp_source.html#l00040">TosaRefWorkloadFactory::CreateSubTensorHandle()</a>, <a class="el" href="_ref_workload_factory_8hpp_source.html#l00049">RefWorkloadFactory::CreateSubTensorHandle()</a>, <a class="el" href="_ref_tensor_handle_factory_8cpp_source.html#l00035">RefTensorHandleFactory::CreateTensorHandle()</a>, <a class="el" href="_tosa_ref_tensor_handle_factory_8cpp_source.html#l00036">TosaRefTensorHandleFactory::CreateTensorHandle()</a>, <a class="el" href="_sample_dynamic_tensor_handle_factory_8cpp_source.html#l00037">SampleDynamicTensorHandleFactory::CreateTensorHandle()</a>, <a class="el" href="_mock_tensor_handle_factory_8cpp_source.html#l00032">MockTensorHandleFactory::CreateTensorHandle()</a>, <a class="el" href="_cl_workload_factory_8cpp_source.html#l00201">ClWorkloadFactory::CreateTensorHandle()</a>, <a class="el" href="_tosa_ref_workload_factory_8cpp_source.html#l00092">TosaRefWorkloadFactory::CreateTensorHandle()</a>, <a class="el" href="_ref_workload_factory_8cpp_source.html#l00128">RefWorkloadFactory::CreateTensorHandle()</a>, <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00067">ITensorHandleFactory::CreateTensorHandle()</a>, <a class="el" href="_output_layer_8hpp_source.html#l00027">OutputLayer::CreateTensorHandles()</a>, <a class="el" href="_output_layer_8cpp_source.html#l00021">OutputLayer::CreateWorkload()</a>, <a class="el" href="_merge_layer_8cpp_source.html#l00019">MergeLayer::CreateWorkload()</a>, <a class="el" href="_unmap_layer_8cpp_source.html#l00027">UnmapLayer::CreateWorkload()</a>, <a class="el" href="_input_layer_8cpp_source.html#l00020">InputLayer::CreateWorkload()</a>, <a class="el" href="_map_layer_8cpp_source.html#l00027">MapLayer::CreateWorkload()</a>, <a class="el" href="_mem_copy_layer_8cpp_source.html#l00027">MemCopyLayer::CreateWorkload()</a>, <a class="el" href="_mem_import_layer_8cpp_source.html#l00027">MemImportLayer::CreateWorkload()</a>, <a class="el" href="_stand_in_layer_8cpp_source.html#l00017">StandInLayer::CreateWorkload()</a>, <a class="el" href="_i_backend_internal_8cpp_source.html#l00060">IBackendInternal::CreateWorkloadFactory()</a>, <a class="el" href="_i_tensor_handle_8hpp_source.html#l00098">ITensorHandle::DecorateTensorHandle()</a>, <a class="el" href="_quantize_helper_8hpp_source.html#l00045">SelectiveQuantizer&lt; T, false &gt;::Dequantize()</a>, <a class="el" href="_quantize_helper_8hpp_source.html#l00061">SelectiveQuantizer&lt; armnn::Half, false &gt;::Dequantize()</a>, <a class="el" href="_quantize_helper_8hpp_source.html#l00077">SelectiveQuantizer&lt; armnn::BFloat16, false &gt;::Dequantize()</a>, <a class="el" href="_serializer_8cpp_source.html#l02074">SerializerStrategy::ExecuteStrategy()</a>, <a class="el" href="_unmap_layer_8cpp_source.html#l00048">UnmapLayer::ExecuteStrategy()</a>, <a class="el" href="_map_layer_8cpp_source.html#l00048">MapLayer::ExecuteStrategy()</a>, <a class="el" href="_mem_import_layer_8cpp_source.html#l00057">MemImportLayer::ExecuteStrategy()</a>, <a class="el" href="_fake_quantization_layer_8cpp_source.html#l00054">FakeQuantizationLayer::ExecuteStrategy()</a>, <a class="el" href="_strategy_base_8hpp_source.html#l00033">StrategyBase&lt; DefaultStrategy &gt;::ExecuteStrategy()</a>, <a class="el" href="_execution_frame_8cpp_source.html#l00014">ExecutionFrame::ExecuteWorkloads()</a>, <a class="el" href="_layer_support_common_8hpp_source.html#l00062">FalseFunc()</a>, <a class="el" href="_layer_support_common_8hpp_source.html#l00070">FalseFuncF16()</a>, <a class="el" href="_layer_support_common_8hpp_source.html#l00078">FalseFuncF32()</a>, <a class="el" href="_layer_support_common_8hpp_source.html#l00094">FalseFuncI32()</a>, <a class="el" href="_layer_support_common_8hpp_source.html#l00086">FalseFuncU8()</a>, <a class="el" href="_layer_support_common_8hpp_source.html#l00110">FalseInputFuncF16()</a>, <a class="el" href="_layer_support_common_8hpp_source.html#l00102">FalseInputFuncF32()</a>, <a class="el" href="_layer_support_common_8hpp_source.html#l00126">FalseOutputFuncF16()</a>, <a class="el" href="_layer_support_common_8hpp_source.html#l00118">FalseOutputFuncF32()</a>, <a class="el" href="_gather_8cpp_source.html#l00015">Gather()</a>, <a class="el" href="_cl_import_tensor_handle_factory_8cpp_source.html#l00124">ClImportTensorHandleFactory::GetCapabilities()</a>, <a class="el" href="_neon_tensor_handle_factory_8cpp_source.html#l00120">NeonTensorHandleFactory::GetCapabilities()</a>, <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00093">ITensorHandleFactory::GetCapabilities()</a>, <a class="el" href="_dynamic_backend_utils_8hpp_source.html#l00062">DynamicBackendUtils::GetEntryPoint()</a>, <a class="el" href="_default_allocator_8hpp_source.html#l00038">DefaultAllocator::GetMemoryRegionAtOffset()</a>, <a class="el" href="_cl_backend_default_allocator_8hpp_source.html#l00041">ClBackendDefaultAllocator::GetMemoryRegionAtOffset()</a>, <a class="el" href="_gpu_fsa_backend_default_allocator_8hpp_source.html#l00045">GpuFsaBackendDefaultAllocator::GetMemoryRegionAtOffset()</a>, <a class="el" href="_i_custom_allocator_8hpp_source.html#l00046">ICustomAllocator::GetMemoryRegionAtOffset()</a>, <a class="el" href="_deserializer_8cpp_source.html#l00961">IDeserializer::DeserializerImpl::GetNetworkInputBindingInfo()</a>, <a class="el" href="_deserializer_8cpp_source.html#l00977">IDeserializer::DeserializerImpl::GetNetworkOutputBindingInfo()</a>, <a class="el" href="_deserializer_8cpp_source.html#l02972">IDeserializer::DeserializerImpl::GetNormalizationDescriptor()</a>, <a class="el" href="_deserializer_8cpp_source.html#l02383">IDeserializer::DeserializerImpl::GetPooling2dDescriptor()</a>, <a class="el" href="_deserializer_8cpp_source.html#l02478">IDeserializer::DeserializerImpl::GetPooling3dDescriptor()</a>, <a class="el" href="_dynamic_backend_utils_8cpp_source.html#l00178">DynamicBackendUtils::GetSharedObjects()</a>, <a class="el" href="_i_tensor_handle_8hpp_source.html#l00076">ITensorHandle::Import()</a>, <a class="el" href="_cl_tensor_handle_8hpp_source.html#l00124">ClTensorHandle::Import()</a>, <a class="el" href="_slice_layer_8cpp_source.html#l00057">SliceLayer::InferOutputShapes()</a>, <a class="el" href="_stand_in_layer_8cpp_source.html#l00031">StandInLayer::InferOutputShapes()</a>, <a class="el" href="_reshape_layer_8cpp_source.html#l00035">ReshapeLayer::InferOutputShapes()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00770">NeonLayerSupport::IsActivationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00665">RefLayerSupport::IsArgMinMaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00697">RefLayerSupport::IsBatchMatMulSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00742">RefLayerSupport::IsBatchNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00788">RefLayerSupport::IsBatchToSpaceNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00823">RefLayerSupport::IsBroadcastToSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00883">RefLayerSupport::IsChannelShuffleSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00915">RefLayerSupport::IsComparisonSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l00949">RefLayerSupport::IsConcatSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01039">RefLayerSupport::IsConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01108">RefLayerSupport::IsConvolution3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01206">RefLayerSupport::IsDepthToSpaceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01235">RefLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01339">RefLayerSupport::IsDetectionPostProcessSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01418">RefLayerSupport::IsElementwiseUnarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01469">RefLayerSupport::IsFakeQuantizationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01149">NeonLayerSupport::IsFillSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.html#l01084">ClLayerSupport::IsFillSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01487">RefLayerSupport::IsFillSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01161">NeonLayerSupport::IsFloorSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01512">RefLayerSupport::IsFloorSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01631">RefLayerSupport::IsGatherSupported()</a>, <a class="el" href="_gpu_fsa_layer_support_8cpp_source.html#l00031">IsGpuFsaBackendSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01670">RefLayerSupport::IsInstanceNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01701">RefLayerSupport::IsL2NormalizationSupported()</a>, <a class="el" href="_tosa_ref_layer_support_8cpp_source.html#l00021">TosaRefLayerSupport::IsLayerSupported()</a>, <a class="el" href="_gpu_fsa_layer_support_8cpp_source.html#l00071">GpuFsaLayerSupport::IsLayerSupported()</a>, <a class="el" href="_i_layer_support_8cpp_source.html#l00017">ILayerSupport::IsLayerSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.html#l01179">ClLayerSupport::IsLogicalBinarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01735">RefLayerSupport::IsLogicalBinarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01763">RefLayerSupport::IsLogSoftmaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01789">RefLayerSupport::IsLstmSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02102">RefLayerSupport::IsNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02140">RefLayerSupport::IsPadSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02170">RefLayerSupport::IsPermuteSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02201">RefLayerSupport::IsPooling2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02231">RefLayerSupport::IsPooling3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02262">RefLayerSupport::IsQLstmSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02321">RefLayerSupport::IsRankSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02336">RefLayerSupport::IsReduceSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.html#l01424">ClLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01514">NeonLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02365">RefLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02389">RefLayerSupport::IsResizeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02458">RefLayerSupport::IsScatterNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02516">RefLayerSupport::IsShapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02534">RefLayerSupport::IsSliceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02563">RefLayerSupport::IsSoftmaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02592">RefLayerSupport::IsSpaceToBatchNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02620">RefLayerSupport::IsSpaceToDepthSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01594">NeonLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.html#l01509">ClLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02650">RefLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02680">RefLayerSupport::IsStackSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02712">RefLayerSupport::IsStridedSliceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02811">RefLayerSupport::IsTileSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02840">RefLayerSupport::IsTransposeConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02908">RefLayerSupport::IsTransposeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l02939">RefLayerSupport::IsUnidirectionalSequenceLstmSupported()</a>, <a class="el" href="_layer_8cpp_source.html#l00233">Layer::Layer()</a>, <a class="el" href="_cl_import_tensor_handle_8hpp_source.html#l00052">ClImportTensorHandle::Map()</a>, <a class="el" href="_cl_backend_8hpp_source.html#l00231">ClBackend::ClBackendCustomAllocatorMemoryRegion::map()</a>, <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00251">GpuFsaBackend::ClBackendCustomAllocatorMemoryRegion::map()</a>, <a class="el" href="_cl_import_tensor_handle_8hpp_source.html#l00353">ClImportSubTensorHandle::Map()</a>, <a class="el" href="_neon_convert_fp16_to_fp32_workload_8cpp_source.html#l00019">NeonConvertFp16ToFp32WorkloadValidate()</a>, <a class="el" href="_neon_convert_fp32_to_fp16_workload_8cpp_source.html#l00021">NeonConvertFp32ToFp16WorkloadValidate()</a>, <a class="el" href="_neon_convolution3d_workload_8cpp_source.html#l00060">NeonConvolution3dWorkload::NeonConvolution3dWorkload()</a>, <a class="el" href="_dynamic_backend_utils_8cpp_source.html#l00016">DynamicBackendUtils::OpenHandle()</a>, <a class="el" href="_quantize_helper_8hpp_source.html#l00039">SelectiveQuantizer&lt; T, false &gt;::Quantize()</a>, <a class="el" href="_quantize_helper_8hpp_source.html#l00055">SelectiveQuantizer&lt; armnn::Half, false &gt;::Quantize()</a>, <a class="el" href="_quantize_helper_8hpp_source.html#l00071">SelectiveQuantizer&lt; armnn::BFloat16, false &gt;::Quantize()</a>, <a class="el" href="_workload_8hpp_source.html#l00075">BaseWorkload&lt; SplitterQueueDescriptor &gt;::ReplaceInputTensorHandle()</a>, <a class="el" href="_workload_8hpp_source.html#l00082">BaseWorkload&lt; SplitterQueueDescriptor &gt;::ReplaceOutputTensorHandle()</a>, <a class="el" href="_optimize_inverse_conversions_8hpp_source.html#l00021">OptimizeInverseConversionsImpl::Run()</a>, <a class="el" href="_optimize_inverse_permutes_8hpp_source.html#l00023">OptimizeInversePermutesImpl&lt; PermuteType &gt;::Run()</a>, <a class="el" href="_squash_equal_siblings_8hpp_source.html#l00025">SquashEqualSiblingsImpl&lt; Comparable &gt;::Run()</a>, <a class="el" href="_fuse_batch_norm_8hpp_source.html#l00027">FuseBatchNorm&lt; ConvLayer, ArmnnType, T &gt;::Run()</a>, <a class="el" href="_convert_constants_8hpp_source.html#l00071">ConvertConstants&lt; Converter, Predicate &gt;::Run()</a>, <a class="el" href="_cl_import_tensor_handle_8hpp_source.html#l00067">ClImportTensorHandle::SetMemoryGroup()</a>, <a class="el" href="_cl_import_tensor_handle_8hpp_source.html#l00367">ClImportSubTensorHandle::SetMemoryGroup()</a>, <a class="el" href="_open_cl_timer_8cpp_source.html#l00021">OpenClTimer::Start()</a>, <a class="el" href="_memory_manager_8cpp_source.html#l00013">MemoryManager::StoreMemToAllocate()</a>, <a class="el" href="_layer_support_common_8hpp_source.html#l00054">TrueFunc()</a>, <a class="el" href="_cl_backend_8hpp_source.html#l00260">ClBackend::ClBackendCustomAllocatorMemoryRegion::unmap()</a>, <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00280">GpuFsaBackend::ClBackendCustomAllocatorMemoryRegion::unmap()</a>, <a class="el" href="_i_backend_internal_8hpp_source.html#l00225">IBackendInternal::UpdateExecutionData()</a>, <a class="el" href="_cl_backend_8hpp_source.html#l00082">ClBackend::UseCustomMemoryAllocator()</a>, <a class="el" href="_i_backend_internal_8hpp_source.html#l00182">IBackendInternal::UseCustomMemoryAllocator()</a>, <a class="el" href="_working_mem_handle_8cpp_source.html#l00018">WorkingMemHandle::WorkingMemHandle()</a>, <a class="el" href="_graph_8hpp_source.html#l00423">Graph::LayerInGraph&lt; InputLayer &gt;::~LayerInGraph()</a>, and <a class="el" href="_graph_8hpp_source.html#l00448">Graph::LayerInGraph&lt; OutputLayer &gt;::~LayerInGraph()</a>.</p>
</div>
</div>
<a id="a536bd930213ea3fd689fc28c8589fc4a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a536bd930213ea3fd689fc28c8589fc4a">&#9670;&nbsp;</a></span>IndexToCoordinates()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;uint32_t&gt; armnn::IndexToCoordinates </td>
<td>(</td>
<td class="paramtype">std::vector&lt; uint32_t &gt; &amp;&#160;</td>
<td class="paramname"><em>shape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>index</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_tile_8cpp_source.html#l00016">16</a> of file <a class="el" href="_tile_8cpp_source.html">Tile.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; std::vector&lt;uint32_t&gt; coordinates;</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="comment">// Iterating through dimensions starting from the last dimension to the first</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keywordflow">for</span> (std::size_t i = shape.size() - 1; i &lt; shape.size(); --i)</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; {</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="comment">// Coordinate is found by getting the index and modulus it by the current dimension size</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="comment">// shape of dimension = dimension size</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; coordinates.insert(coordinates.begin(), index % shape[i]);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="comment">// Pass the index to next iteration making index = index / size of the current dimension</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; index = index/shape[i];</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; }</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> coordinates;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_tile_8cpp_source.html#l00045">Tile()</a>.</p>
</div>
</div>
<a id="a9a8bd8184644cbdfcefe062087b8f048"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9a8bd8184644cbdfcefe062087b8f048">&#9670;&nbsp;</a></span>InitializeArmComputeClTensorData()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void InitializeArmComputeClTensorData </td>
<td>(</td>
<td class="paramtype">arm_compute::CLTensor &amp;&#160;</td>
<td class="paramname"><em>clTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_const_tensor_handle.html">ConstTensorHandle</a> *&#160;</td>
<td class="paramname"><em>handle</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.html#l00124">124</a> of file <a class="el" href="_cl_workload_utils_8hpp_source.html">ClWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;{</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(handle, <span class="stringliteral">&quot;Null tensor handle passed to InitializeArmComputeTensorData.&quot;</span>);</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; armcomputetensorutils::InitialiseArmComputeTensorEmpty(clTensor);</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">switch</span>(handle-&gt;GetTensorInfo().GetDataType())</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">case</span> DataType::Float16:</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="namespacearmnn.html#a80bf40fafb5d10cd4d2a27c515052e2e">CopyArmComputeClTensorData</a>(clTensor, handle-&gt;GetConstTensor&lt;<a class="code" href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">armnn::Half</a>&gt;());</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="namespacearmnn.html#a80bf40fafb5d10cd4d2a27c515052e2e">CopyArmComputeClTensorData</a>(clTensor, handle-&gt;GetConstTensor&lt;<span class="keywordtype">float</span>&gt;());</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="namespacearmnn.html#a80bf40fafb5d10cd4d2a27c515052e2e">CopyArmComputeClTensorData</a>(clTensor, handle-&gt;GetConstTensor&lt;uint8_t&gt;());</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="namespacearmnn.html#a80bf40fafb5d10cd4d2a27c515052e2e">CopyArmComputeClTensorData</a>(clTensor, handle-&gt;GetConstTensor&lt;int8_t&gt;());</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16:</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="namespacearmnn.html#a80bf40fafb5d10cd4d2a27c515052e2e">CopyArmComputeClTensorData</a>(clTensor, handle-&gt;GetConstTensor&lt;int16_t&gt;());</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="namespacearmnn.html#a80bf40fafb5d10cd4d2a27c515052e2e">CopyArmComputeClTensorData</a>(clTensor, handle-&gt;GetConstTensor&lt;int32_t&gt;());</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">case</span> DataType::BFloat16:</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="namespacearmnn.html#a80bf40fafb5d10cd4d2a27c515052e2e">CopyArmComputeClTensorData</a>(clTensor, handle-&gt;GetConstTensor&lt;<a class="code" href="classarmnn_1_1_b_float16.html">armnn::BFloat16</a>&gt;());</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">// Throw exception; assertion not called in release build.</span></div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">throw</span> Exception(<span class="stringliteral">&quot;Unexpected tensor type during InitializeArmComputeClTensorData().&quot;</span>);</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;};</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>.</p>
</div>
</div>
<a id="acf8e1f43fc13cf7603564cc15743fce2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acf8e1f43fc13cf7603564cc15743fce2">&#9670;&nbsp;</a></span>InitializeArmComputeTensorData() <span class="overload">[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::InitializeArmComputeTensorData </td>
<td>(</td>
<td class="paramtype">arm_compute::Tensor &amp;&#160;</td>
<td class="paramname"><em>tensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_const_tensor_handle.html">ConstTensorHandle</a> *&#160;</td>
<td class="paramname"><em>handle</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_workload_utils_8hpp_source.html#l00104">104</a> of file <a class="el" href="_neon_workload_utils_8hpp_source.html">NeonWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;{</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(handle, <span class="stringliteral">&quot;Null tensor handle passed to InitializeArmComputeTensorData.&quot;</span>);</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">switch</span>(handle-&gt;GetTensorInfo().GetDataType())</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">case</span> DataType::Float16:</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="namespacearmnn.html#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle-&gt;GetConstTensor&lt;<a class="code" href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">armnn::Half</a>&gt;());</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="namespacearmnn.html#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle-&gt;GetConstTensor&lt;<span class="keywordtype">float</span>&gt;());</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="namespacearmnn.html#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle-&gt;GetConstTensor&lt;uint8_t&gt;());</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="namespacearmnn.html#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle-&gt;GetConstTensor&lt;int8_t&gt;());</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="namespacearmnn.html#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle-&gt;GetConstTensor&lt;int32_t&gt;());</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16:</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="namespacearmnn.html#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle-&gt;GetConstTensor&lt;int16_t&gt;());</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">case</span> DataType::BFloat16:</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="namespacearmnn.html#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle-&gt;GetConstTensor&lt;<a class="code" href="classarmnn_1_1_b_float16.html">armnn::BFloat16</a>&gt;());</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="comment">// Throw exception; assertion not called in release build.</span></div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">throw</span> Exception(<span class="stringliteral">&quot;Unexpected tensor type during InitializeArmComputeTensorData().&quot;</span>);</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; }</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;};</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>, <a class="el" href="_neon_workload_utils_8hpp_source.html#l00063">CopyArmComputeTensorData()</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_tensor_handle_8hpp_source.html#l00028">ConstTensorHandle::GetConstTensor()</a>, <a class="el" href="_tensor_8hpp_source.html#l00200">TensorInfo::GetDataType()</a>, <a class="el" href="_tensor_handle_8hpp_source.html#l00040">ConstTensorHandle::GetTensorInfo()</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, and <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>.</p>
</div>
</div>
<a id="a611208865d55ea576cc89ac86d7c19b7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a611208865d55ea576cc89ac86d7c19b7">&#9670;&nbsp;</a></span>InitializeArmComputeTensorData() <span class="overload">[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">void armnn::InitializeArmComputeTensorData </td>
<td>(</td>
<td class="paramtype">arm_compute::Tensor &amp;&#160;</td>
<td class="paramname"><em>tensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a>&#160;</td>
<td class="paramname"><em>tensorInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *&#160;</td>
<td class="paramname"><em>handle</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_workload_utils_8hpp_source.html#l00069">69</a> of file <a class="el" href="_neon_workload_utils_8hpp_source.html">NeonWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;{</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(handle, <span class="stringliteral">&quot;Null tensor handle passed to InitializeArmComputeTensorData.&quot;</span>);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">switch</span>(tensorInfo.GetDataType())</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">case</span> DataType::Float16:</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="namespacearmnn.html#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><a class="code" href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">armnn::Half</a>*<span class="keyword">&gt;</span>(handle-&gt;Map()));</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="namespacearmnn.html#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">float</span>*<span class="keyword">&gt;</span>(handle-&gt;Map()));</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="namespacearmnn.html#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(handle-&gt;Map()));</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="namespacearmnn.html#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>int8_t*<span class="keyword">&gt;</span>(handle-&gt;Map()));</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="namespacearmnn.html#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>int32_t*<span class="keyword">&gt;</span>(handle-&gt;Map()));</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16:</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="namespacearmnn.html#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>int16_t*<span class="keyword">&gt;</span>(handle-&gt;Map()));</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">case</span> DataType::BFloat16:</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="namespacearmnn.html#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><a class="code" href="classarmnn_1_1_b_float16.html">armnn::BFloat16</a>*<span class="keyword">&gt;</span>(handle-&gt;Map()));</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="comment">// Throw exception; assertion not called in release build.</span></div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">throw</span> Exception(<span class="stringliteral">&quot;Unexpected tensor type during InitializeArmComputeTensorData().&quot;</span>);</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;};</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>, <a class="el" href="_neon_workload_utils_8hpp_source.html#l00063">CopyArmComputeTensorData()</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_tensor_8hpp_source.html#l00200">TensorInfo::GetDataType()</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle.html#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, and <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_fully_connected_workload_8cpp_source.html#l00114">NeonFullyConnectedWorkload::Execute()</a>, and <a class="el" href="_neon_convolution2d_workload_8cpp_source.html#l00150">NeonConvolution2dWorkload::Execute()</a>.</p>
</div>
</div>
<a id="ad31c56533e4f9f9f51719599fbfcf7bb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad31c56533e4f9f9f51719599fbfcf7bb">&#9670;&nbsp;</a></span>InsertConvertFp16ToFp32LayersBefore()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; <a class="el" href="classarmnn_1_1_convert_fp16_to_fp32_layer.html">ConvertFp16ToFp32Layer</a> * &gt; InsertConvertFp16ToFp32LayersBefore </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&#160;</td>
<td class="paramname"><em>graph</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;&#160;</td>
<td class="paramname"><em>layer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>expectCorrectInputType</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_utils_8cpp_source.html#l00040">40</a> of file <a class="el" href="_network_utils_8cpp_source.html">NetworkUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;{</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; std::vector&lt;ConvertFp16ToFp32Layer*&gt; convertLayers;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; convertLayers.reserve(layer.GetNumInputSlots());</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="comment">// Insert a ConvertFp16ToFp32Layer before each input slot</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; inputSlot = layer.BeginInputSlots(); inputSlot != layer.EndInputSlots(); ++inputSlot)</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordtype">bool</span> allowInsert = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (expectCorrectInputType)</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="comment">// Only insert ConvertFp16ToFp32Layer before FP16 input slots</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; OutputSlot* connectedOutputSlot = inputSlot-&gt;GetConnectedOutputSlot();</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; allowInsert =</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; connectedOutputSlot &amp;&amp; connectedOutputSlot-&gt;GetTensorInfo().GetDataType() == DataType::Float16;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">if</span> (allowInsert)</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">const</span> std::string name =</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; std::string(<span class="stringliteral">&quot;convert_fp16_to_fp32-&quot;</span> + std::to_string(inputSlot-&gt;GetSlotIndex()) + <span class="stringliteral">&quot;-&quot;</span>) +</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; layer.GetName();</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; ConvertFp16ToFp32Layer* convertLayer =</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; graph.InsertNewLayer&lt;ConvertFp16ToFp32Layer&gt;(*inputSlot, name.c_str());</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; TensorInfo convertInfo = convertLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; convertInfo.SetDataType(DataType::Float32);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; convertLayer-&gt;GetOutputSlot().SetTensorInfo(convertInfo);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; convertLayers.emplace_back(convertLayer);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">return</span> convertLayers;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_layer_8hpp_source.html#l00262">Layer::BeginInputSlots()</a>, <a class="el" href="_layer_8hpp_source.html#l00263">Layer::EndInputSlots()</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_layer_8hpp_source.html#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.html#l00200">TensorInfo::GetDataType()</a>, <a class="el" href="_layer_8hpp_source.html#l00337">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00332">Layer::GetName()</a>, <a class="el" href="_layer_8hpp_source.html#l00334">Layer::GetNumInputSlots()</a>, <a class="el" href="_layer_8hpp_source.html#l00339">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.html#l00100">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_graph_8hpp_source.html#l00481">Graph::InsertNewLayer()</a>, <a class="el" href="_tensor_8hpp_source.html#l00201">TensorInfo::SetDataType()</a>, and <a class="el" href="_layer_8cpp_source.html#l00095">OutputSlot::SetTensorInfo()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l00844">AttemptBackendAssignment()</a>, and <a class="el" href="_convert_fp32_network_to_fp16_8hpp_source.html#l00018">ConvertFp32NetworkToFp16Impl::Run()</a>.</p>
</div>
</div>
<a id="abf625e50a5eaeafce5b39580dc95a9d3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abf625e50a5eaeafce5b39580dc95a9d3">&#9670;&nbsp;</a></span>InsertConvertFp32ToFp16LayersAfter()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; <a class="el" href="classarmnn_1_1_convert_fp32_to_fp16_layer.html">ConvertFp32ToFp16Layer</a> * &gt; InsertConvertFp32ToFp16LayersAfter </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&#160;</td>
<td class="paramname"><em>graph</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;&#160;</td>
<td class="paramname"><em>layer</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_utils_8cpp_source.html#l00079">79</a> of file <a class="el" href="_network_utils_8cpp_source.html">NetworkUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;{</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputSlots = layer.GetNumOutputSlots();</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; std::vector&lt;ConvertFp32ToFp16Layer*&gt; convertLayers;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; convertLayers.reserve(numOutputSlots);</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; </div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="comment">// Update FP16 output slots to FP32 on current layer</span></div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; ChangeOutputFp16ToFp32(layer);</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">// Insert a ConvertFp32ToFp16Layer after each FP32 output slot</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slotIndex = 0u; slotIndex &lt; numOutputSlots; ++slotIndex)</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; {</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; OutputSlot&amp; outputSlot = layer.GetOutputSlot(slotIndex);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">if</span>(outputSlot.GetTensorInfo().GetDataType() == DataType::Float32)</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; {</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keyword">const</span> std::string name =</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; std::string(<span class="stringliteral">&quot;convert_fp32_to_fp16-&quot;</span> + std::to_string(slotIndex) + <span class="stringliteral">&quot;-&quot;</span>) + layer.GetName();</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; ConvertFp32ToFp16Layer* convertLayer =</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; graph.InsertNewLayer&lt;ConvertFp32ToFp16Layer&gt;(outputSlot, name.c_str());</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; TensorInfo convertInfo = convertLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; convertInfo.SetDataType(DataType::Float16);</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; </div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; convertLayer-&gt;GetOutputSlot().SetTensorInfo(convertInfo);</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; </div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; convertLayers.emplace_back(convertLayer);</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; }</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">return</span> convertLayers;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_layer_8hpp_source.html#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.html#l00200">TensorInfo::GetDataType()</a>, <a class="el" href="_layer_8hpp_source.html#l00337">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00332">Layer::GetName()</a>, <a class="el" href="_layer_8hpp_source.html#l00335">Layer::GetNumOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.html#l00339">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.html#l00100">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_graph_8hpp_source.html#l00481">Graph::InsertNewLayer()</a>, <a class="el" href="_tensor_8hpp_source.html#l00201">TensorInfo::SetDataType()</a>, and <a class="el" href="_layer_8cpp_source.html#l00095">OutputSlot::SetTensorInfo()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l00844">AttemptBackendAssignment()</a>, and <a class="el" href="_convert_fp32_network_to_fp16_8hpp_source.html#l00018">ConvertFp32NetworkToFp16Impl::Run()</a>.</p>
</div>
</div>
<a id="a67b1630e1df3a06c51d18eed6134b663"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a67b1630e1df3a06c51d18eed6134b663">&#9670;&nbsp;</a></span>InsertDebugLayerAfter()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; <a class="el" href="classarmnn_1_1_debug_layer.html">DebugLayer</a> * &gt; InsertDebugLayerAfter </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&#160;</td>
<td class="paramname"><em>graph</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;&#160;</td>
<td class="paramname"><em>layer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>toFile</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_utils_8cpp_source.html#l00112">112</a> of file <a class="el" href="_network_utils_8cpp_source.html">NetworkUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;{</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; std::vector&lt;DebugLayer*&gt; debugLayers;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; debugLayers.reserve(layer.GetNumOutputSlots());</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="comment">// Connect a DebugLayer to each output slot of the layer</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; uint32_t outputSlotIdx = 0;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> outputSlot = layer.BeginOutputSlots(); outputSlot != layer.EndOutputSlots(); ++outputSlot)</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; {</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">const</span> std::string debugName = std::string(<span class="stringliteral">&quot;DebugLayerAfter&quot;</span>) + layer.GetNameStr() + <span class="stringliteral">&quot;_&quot;</span> +</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; std::to_string(outputSlotIdx);</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; DebugLayer* debugLayer =</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; graph.InsertNewLayer&lt;DebugLayer&gt;(*outputSlot, debugName.c_str(), toFile);</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="comment">// Sets output tensor info for the debug layer.</span></div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">if</span> (debugLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot() != &amp;(*outputSlot))</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; {</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;unable to set output tensor info for the debug layer.&quot;</span>);</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; </div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; TensorInfo debugInfo = debugLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; debugLayer-&gt;GetOutputSlot().SetTensorInfo(debugInfo);</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="comment">// NOTE: It is OK to do this because DebugLayer is only supported on CpuRef</span></div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; debugLayer-&gt;SetBackendId(Compute::CpuRef);</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; </div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; debugLayers.emplace_back(debugLayer);</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; </div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; ++outputSlotIdx;</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">return</span> debugLayers;</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_layer_8hpp_source.html#l00266">Layer::BeginOutputSlots()</a>, <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">CpuRef</a>, <a class="el" href="_layer_8hpp_source.html#l00267">Layer::EndOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.html#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00337">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00240">Layer::GetNameStr()</a>, <a class="el" href="_layer_8hpp_source.html#l00335">Layer::GetNumOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.html#l00339">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.html#l00100">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_graph_8hpp_source.html#l00481">Graph::InsertNewLayer()</a>, <a class="el" href="_layer_8hpp_source.html#l00291">Layer::SetBackendId()</a>, and <a class="el" href="_layer_8cpp_source.html#l00095">OutputSlot::SetTensorInfo()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_add_debug_8hpp_source.html#l00019">AddDebugImpl::Run()</a>, and <a class="el" href="_add_debug_8hpp_source.html#l00038">AddDebugToFileImpl::Run()</a>.</p>
</div>
</div>
<a id="ad5ca459a0ad2c2015f137170d9dd1cf8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad5ca459a0ad2c2015f137170d9dd1cf8">&#9670;&nbsp;</a></span>InstanceNorm()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void InstanceNorm </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_instance_normalization_queue_descriptor.html">InstanceNormalizationQueueDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>inputDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>outputEncoder</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_instance_norm_8cpp_source.html#l00018">18</a> of file <a class="el" href="_instance_norm_8cpp_source.html">InstanceNorm.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> TensorShape inputShape = inputInfo.GetShape();</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html">armnnUtils::DataLayoutIndexed</a> dataLayout(data.m_Parameters.m_DataLayout);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputBatches = inputShape[0];</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = inputShape[dataLayout.GetHeightIndex()];</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = inputShape[dataLayout.GetWidthIndex()];</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels = inputShape[dataLayout.GetChannelsIndex()];</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordtype">float</span> beta = data.m_Parameters.m_Beta;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordtype">float</span> eps = data.m_Parameters.m_Eps;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">float</span> gamma = data.m_Parameters.m_Gamma;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n = 0; n &lt; inputBatches; ++n)</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; inputChannels; ++c)</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">float</span> mean = 0, var = 0;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">//Calculate Mean</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h &lt; inputHeight; h++)</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; {</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; inputWidth; w++)</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = dataLayout.GetIndex(inputShape, n, c, h, w);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; inputDecoder[index];</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordtype">float</span> value = inputDecoder.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; mean += value;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; mean /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(inputHeight * inputWidth);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="comment">//Calculate Variance</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h &lt; inputHeight; h++)</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; {</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; inputWidth; w++)</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = dataLayout.GetIndex(inputShape, n, c, h, w);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; inputDecoder[index];</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">float</span> value = inputDecoder.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; var += (value - mean) * (value - mean);</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; var /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(inputHeight * inputWidth);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="comment">// Apply Instance Normalisation</span></div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h &lt; inputHeight; ++h)</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; inputWidth; ++w)</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; {</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = dataLayout.GetIndex(inputShape, n, c, h, w);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; inputDecoder[index];</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; outputEncoder[index];</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; outputEncoder.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>((inputDecoder.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>() - mean) * gamma / std::sqrt ( var + eps) + beta);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; </div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00028">DataLayoutIndexed::GetIndex()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.html#l00867">InstanceNormalizationDescriptor::m_Beta</a>, <a class="el" href="_descriptors_8hpp_source.html#l00871">InstanceNormalizationDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.html#l00869">InstanceNormalizationDescriptor::m_Eps</a>, <a class="el" href="_descriptors_8hpp_source.html#l00865">InstanceNormalizationDescriptor::m_Gamma</a>, <a class="el" href="_workload_data_8hpp_source.html#l00066">QueueDescriptorWithParameters&lt; LayerDescriptor &gt;::m_Parameters</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="abf6aad7bc221f8ad22b4d99cd020373b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abf6aad7bc221f8ad22b4d99cd020373b">&#9670;&nbsp;</a></span>IntersectionOverUnion()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">float IntersectionOverUnion </td>
<td>(</td>
<td class="paramtype">const float *&#160;</td>
<td class="paramname"><em>boxI</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const float *&#160;</td>
<td class="paramname"><em>boxJ</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_detection_post_process_8cpp_source.html#l00029">29</a> of file <a class="el" href="_detection_post_process_8cpp_source.html">DetectionPostProcess.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="comment">// Box-corner format: ymin, xmin, ymax, xmax.</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> yMin = 0;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> xMin = 1;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> yMax = 2;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> xMax = 3;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">float</span> areaI = (boxI[yMax] - boxI[yMin]) * (boxI[xMax] - boxI[xMin]);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">float</span> areaJ = (boxJ[yMax] - boxJ[yMin]) * (boxJ[xMax] - boxJ[xMin]);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">float</span> yMinIntersection = std::max(boxI[yMin], boxJ[yMin]);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">float</span> xMinIntersection = std::max(boxI[xMin], boxJ[xMin]);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">float</span> yMaxIntersection = std::min(boxI[yMax], boxJ[yMax]);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">float</span> xMaxIntersection = std::min(boxI[xMax], boxJ[xMax]);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">float</span> areaIntersection = std::max(yMaxIntersection - yMinIntersection, 0.0f) *</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; std::max(xMaxIntersection - xMinIntersection, 0.0f);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">float</span> areaUnion = areaI + areaJ - areaIntersection;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> areaIntersection / areaUnion;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_detection_post_process_8cpp_source.html#l00048">NonMaxSuppression()</a>.</p>
</div>
</div>
<a id="a3d504240723912bf9c76ff3afeaa25c5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3d504240723912bf9c76ff3afeaa25c5">&#9670;&nbsp;</a></span>IsBFloat16()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsBFloat16 </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8cpp_source.html#l00056">56</a> of file <a class="el" href="_ref_workload_factory_8cpp_source.html">RefWorkloadFactory.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;{</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">return</span> IsDataType&lt;DataType::BFloat16&gt;(info);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
<p class="reference">Referenced by <a class="el" href="_ref_workload_factory_8cpp_source.html#l00146">RefWorkloadFactory::CreateWorkload()</a>.</p>
</div>
</div>
<a id="abe95e2847292413f6dc71c21dabce181"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abe95e2847292413f6dc71c21dabce181">&#9670;&nbsp;</a></span>IsBoolean()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsBoolean </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8cpp_source.html#l00080">80</a> of file <a class="el" href="_ref_workload_factory_8cpp_source.html">RefWorkloadFactory.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;{</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> IsDataType&lt;DataType::Boolean&gt;(info);</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
<p class="reference">Referenced by <a class="el" href="_ref_workload_factory_8cpp_source.html#l00146">RefWorkloadFactory::CreateWorkload()</a>.</p>
</div>
</div>
<a id="a44a0b2291c5e7a1e5b6c32f613ef52f6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a44a0b2291c5e7a1e5b6c32f613ef52f6">&#9670;&nbsp;</a></span>IsDataType()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool IsDataType </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_workload_factory_8cpp_source.html#l00032">32</a> of file <a class="el" href="_gpu_fsa_workload_factory_8cpp_source.html">GpuFsaWorkloadFactory.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;{</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">auto</span> checkType = [](<span class="keyword">const</span> TensorInfo&amp; tensorInfo) {<span class="keywordflow">return</span> tensorInfo.GetDataType() == ArmnnType;};</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">auto</span> it = std::find_if(std::begin(<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.m_InputTensorInfos), std::end(<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.m_InputTensorInfos), checkType);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">if</span> (it != std::end(<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.m_InputTensorInfos))</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; it = std::find_if(std::begin(<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.m_OutputTensorInfos), std::end(<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.m_OutputTensorInfos), checkType);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">if</span> (it != std::end(<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.m_OutputTensorInfos))</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
</div>
</div>
<a id="ad78d822be14a8d585cd038cf0e73cd7e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad78d822be14a8d585cd038cf0e73cd7e">&#9670;&nbsp;</a></span>IsFloat16()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsFloat16 </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8cpp_source.html#l00060">60</a> of file <a class="el" href="_ref_workload_factory_8cpp_source.html">RefWorkloadFactory.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;{</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> IsDataType&lt;DataType::Float16&gt;(info);</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
<p class="reference">Referenced by <a class="el" href="_ref_workload_factory_8cpp_source.html#l00146">RefWorkloadFactory::CreateWorkload()</a>.</p>
</div>
</div>
<a id="a78c4767bc9e09daae610861fd00007db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a78c4767bc9e09daae610861fd00007db">&#9670;&nbsp;</a></span>IsGpuFsaBackendSupported()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsGpuFsaBackendSupported </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt;&#160;</td>
<td class="paramname"><em>reasonIfUnsupported</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Args...&#160;</td>
<td class="paramname"><em>args</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gpu_fsa_layer_support_8cpp_source.html#l00031">31</a> of file <a class="el" href="_gpu_fsa_layer_support_8cpp_source.html">GpuFsaLayerSupport.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(reasonIfUnsupported, (args)...);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#if defined(ARMCOMPUTEGPUFSA_ENABLED)</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">if</span> (reasonIfUnsupported)</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; reasonIfUnsupported.value() = <span class="stringliteral">&quot;The armnn library has been built without CL support&quot;</span>;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.html#l00014">IgnoreUnused()</a>, and <a class="el" href="_optional_8hpp_source.html#l00146">OptionalReferenceSwitch&lt; std::is_reference&lt; T &gt;::value, T &gt;::value()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_layer_support_8cpp_source.html#l00071">GpuFsaLayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
<a id="ab432cc781460dbb619afabeb88139a15"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab432cc781460dbb619afabeb88139a15">&#9670;&nbsp;</a></span>IsLayerOptimizable() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsLayerOptimizable </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.html">armnn::Layer</a> &amp;&#160;</td>
<td class="paramname"><em>layer</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_mock_backend_8cpp_source.html#l00099">99</a> of file <a class="el" href="_mock_backend_8cpp_source.html">MockBackend.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;{</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#ab432cc781460dbb619afabeb88139a15">IsLayerOptimizable</a>(&amp;layer);</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="aeb099eb45d76b4ce62d87be11c634538"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeb099eb45d76b4ce62d87be11c634538">&#9670;&nbsp;</a></span>IsLayerOptimizable() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsLayerOptimizable </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.html">armnn::Layer</a> *&#160;</td>
<td class="paramname"><em>layer</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_mock_backend_8cpp_source.html#l00088">88</a> of file <a class="el" href="_mock_backend_8cpp_source.html">MockBackend.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;{</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="_assert_8hpp.html#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="comment">// A Layer is not optimizable if its name contains &quot;unoptimizable&quot;</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">const</span> std::string layerName(layer-&gt;<a class="code" href="classarmnn_1_1_layer.html#a7ddf0cf6f620d59c10e63495ace795d0">GetName</a>());</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordtype">bool</span> optimizable = layerName.find(<span class="stringliteral">&quot;unoptimizable&quot;</span>) == std::string::npos;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">return</span> optimizable;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_assert_8hpp_source.html#l00014">ARMNN_ASSERT</a>, and <a class="el" href="_layer_8hpp_source.html#l00332">Layer::GetName()</a>.</p>
</div>
</div>
<a id="aa4452464859a025825afea5672640186"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa4452464859a025825afea5672640186">&#9670;&nbsp;</a></span>IsLayerSequence()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsLayerSequence </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;&#160;</td>
<td class="paramname"><em>currentLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">TYPE&#160;</td>
<td class="paramname"><em>first</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">TYPE&#160;</td>
<td class="paramname"><em>second</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">TYPE&#160;</td>
<td class="paramname"><em>third</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> *&#160;</td>
<td class="paramname"><em>layerList</em>[4], </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>handleValidActivates</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>validActivates</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_subgraph_utils_8hpp_source.html#l00375">375</a> of file <a class="el" href="_subgraph_utils_8hpp_source.html">SubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;{</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keyword">auto</span> PreviousLayer = [](Layer&amp; layer)</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; {</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">return</span> &amp;layer.GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetOwningLayer();</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; };</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; </div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keyword">auto</span> NextLayer = [](Layer&amp; layer)</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; {</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">return</span> &amp;layer.GetOutputSlot(0).GetConnection(0)-&gt;GetOwningLayer();</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; };</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; </div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keyword">auto</span> LayerIncomingConnectionDataType = [](Layer&amp; layer)</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; {</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">return</span> layer.GetInputSlot(0).GetTensorInfo().GetDataType();</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; };</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; </div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordtype">bool</span> result = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; </div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="comment">// Match in reverse so there is only 1 connection to check</span></div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a336dd839b81ad6a1d803c306b40f9af2">IsSequenceLayerType</a>(currentLayer, third))</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; {</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="comment">// Save DataType of third layer</span></div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataType = LayerIncomingConnectionDataType(currentLayer);</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; </div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="comment">// Save third layer</span></div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; layerList[2] = &amp;currentLayer;</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; </div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="comment">// Check the layers that proceed this one for the requested grouping</span></div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; Layer *prevLayer = PreviousLayer(currentLayer);</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">if</span> (prevLayer &amp;&amp; <a class="code" href="namespacearmnn.html#a336dd839b81ad6a1d803c306b40f9af2">IsSequenceLayerType</a>(*prevLayer, second))</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; {</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordtype">bool</span> dataTypesMatch = (dataType == LayerIncomingConnectionDataType(*prevLayer));</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">if</span> (! dataTypesMatch)</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; {</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; }</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; </div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; layerList[1] = prevLayer;</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; prevLayer = PreviousLayer(*prevLayer);</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">if</span> (prevLayer &amp;&amp; <a class="code" href="namespacearmnn.html#a336dd839b81ad6a1d803c306b40f9af2">IsSequenceLayerType</a>(*prevLayer, first))</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; {</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; dataTypesMatch = (dataType == LayerIncomingConnectionDataType(*prevLayer));</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">if</span> (! dataTypesMatch)</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; {</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; }</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; </div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; layerList[0] = prevLayer;</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; </div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="comment">// Detected the first 3 layers if we get to this point so now</span></div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="comment">// check to see if we have a valid activation. If there is no activation</span></div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="comment">// then the sequence still matches.</span></div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordflow">if</span> (handleValidActivates)</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; {</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; Layer *nextLayer = NextLayer(currentLayer);</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">if</span> (nextLayer)</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; {</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a336dd839b81ad6a1d803c306b40f9af2">IsSequenceLayerType</a>(*nextLayer, <a class="code" href="namespacearmnn.html#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">LayerType::Activation</a>))</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; {</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="comment">// This layer is an activation, so it must be a valid type for the sequence</span></div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a> activationFunction =</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; PolymorphicDowncast&lt;ActivationLayer*&gt;(nextLayer)-&gt;GetParameters().m_Function;</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordtype">long</span> count = std::count(validActivates.cbegin(),</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; validActivates.cend(),</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; activationFunction);</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">if</span> (count &gt; 0)</div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; {</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; layerList[3] = nextLayer;</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; result = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; }</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; }</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; {</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="comment">// Next layer is not an activation so sequence still matches</span></div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; result = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; }</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; }</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; }</div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; {</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; result = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; }</div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; }</div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; }</div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; }</div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; </div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a0c99a284637e7c8d3547dac8686bed3a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0c99a284637e7c8d3547dac8686bed3a">&#9670;&nbsp;</a></span>IsLayerSupported() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsLayerSupported </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.html">armnn::Layer</a> &amp;&#160;</td>
<td class="paramname"><em>layer</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_mock_backend_8cpp_source.html#l00083">83</a> of file <a class="el" href="_mock_backend_8cpp_source.html">MockBackend.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;{</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a0c99a284637e7c8d3547dac8686bed3a">IsLayerSupported</a>(&amp;layer);</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a138ca3929b888fa8d9088c076e9de48c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a138ca3929b888fa8d9088c076e9de48c">&#9670;&nbsp;</a></span>IsLayerSupported() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsLayerSupported </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.html">armnn::Layer</a> *&#160;</td>
<td class="paramname"><em>layer</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_mock_backend_8cpp_source.html#l00062">62</a> of file <a class="el" href="_mock_backend_8cpp_source.html">MockBackend.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;{</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="_assert_8hpp.html#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a> layerType = layer-&gt;<a class="code" href="classarmnn_1_1_layer.html#ad8e15c530c929ab823d89ae9fd2d3f11">GetType</a>();</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">switch</span> (layerType)</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">armnn::LayerType::Input</a>:</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">armnn::LayerType::Output</a>:</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">armnn::LayerType::Constant</a>:</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f">armnn::LayerType::Addition</a>:</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a">armnn::LayerType::Convolution2d</a>:</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a699bcffd93aff3022014b9efc9eaefd1">armnn::LayerType::ElementwiseBinary</a>:</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// Layer supported</span></div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">// Layer unsupported</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f">Addition</a>, <a class="el" href="_assert_8hpp_source.html#l00014">ARMNN_ASSERT</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a">Convolution2d</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a699bcffd93aff3022014b9efc9eaefd1">ElementwiseBinary</a>, <a class="el" href="_layer_8hpp_source.html#l00286">Layer::GetType()</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, and <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>.</p>
<p class="reference">Referenced by <a class="el" href="_sample_dynamic_workload_factory_8cpp_source.html#l00038">SampleDynamicWorkloadFactory::IsLayerSupported()</a>.</p>
</div>
</div>
<a id="a8c69ca5000838df92215ca5053141cf6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8c69ca5000838df92215ca5053141cf6">&#9670;&nbsp;</a></span>IsLayerTypeSupported()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsLayerTypeSupported </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> &amp;&#160;</td>
<td class="paramname"><em>type</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>infos</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_base_descriptor.html">BaseDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="structarmnn_1_1_lstm_input_params_info.html">LstmInputParamsInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>lstmParamsInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.html">QuantizedLstmInputParamsInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>quantizedLstmParamsInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt;&#160;</td>
<td class="paramname"><em>reasonIfUnsupported</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_neon_layer_support.html">NeonLayerSupport</a> &amp;&#160;</td>
<td class="paramname"><em>support</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_layer_support_8cpp_source.html#l00184">184</a> of file <a class="el" href="_neon_layer_support_8cpp_source.html">NeonLayerSupport.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;{</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">switch</span> (type)</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">LayerType::Activation</a>:</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">return</span> support.IsActivationSupported(infos[0],</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; infos[1],</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; *(PolymorphicDowncast&lt;const ActivationDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">case</span> LayerType::Addition:</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">return</span> support.IsAdditionSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad441be836a142e8935e0413f4a22c9ec">LayerType::ArgMinMax</a>:</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">return</span> support.IsArgMinMaxSupported(infos[0],</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; infos[1],</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; *(PolymorphicDowncast&lt;const ArgMinMaxDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">case</span> LayerType::BatchMatMul:</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">return</span> support.IsBatchMatMulSupported(infos[0],</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; infos[1],</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; infos[2],</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; *(PolymorphicDowncast&lt;const BatchMatMulDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">case</span> LayerType::BatchNormalization:</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">return</span> support.IsBatchNormalizationSupported(infos[0],</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; infos[1],</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; infos[2],</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; infos[3],</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; infos[4],</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; infos[5],</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; *(<a class="code" href="namespacearmnn.html#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; BatchNormalizationDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ae97f6a405add803682188eecea9b021d">LayerType::BatchToSpaceNd</a>:</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">return</span> support.IsBatchToSpaceNdSupported(infos[0],</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; infos[1],</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; *(<a class="code" href="namespacearmnn.html#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; BatchToSpaceNdDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">case</span> LayerType::Cast:</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">return</span> support.IsCastSupported(infos[0], infos[1], reasonIfUnsupported);</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">case</span> LayerType::ChannelShuffle:</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">return</span> support.IsChannelShuffleSupported(infos[0],</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; infos[1],</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; *(<a class="code" href="namespacearmnn.html#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; ChannelShuffleDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">case</span> LayerType::Comparison:</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">return</span> support.IsComparisonSupported(infos[0],</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; infos[1],</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; infos[2],</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; *(PolymorphicDowncast&lt;const ComparisonDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">case</span> LayerType::Concat:</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; {</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; std::vector&lt;const TensorInfo*&gt; inputInfos;</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; (infos.size() - 1); i++)</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; {</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; inputInfos.push_back(&amp;infos[i]);</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">return</span> support.IsConcatSupported(inputInfos,</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; infos[infos.size() - 1],</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; *(PolymorphicDowncast&lt;const OriginsDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; }</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">case</span> LayerType::Constant:</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">return</span> support.IsConstantSupported(infos[0], reasonIfUnsupported);</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">case</span> LayerType::ConvertFp16ToFp32:</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">return</span> support.IsConvertFp16ToFp32Supported(infos[0], infos[1], reasonIfUnsupported);</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">case</span> LayerType::ConvertFp32ToFp16:</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">return</span> support.IsConvertFp32ToFp16Supported(infos[0], infos[1], reasonIfUnsupported);</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">case</span> LayerType::Convolution2d:</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; {</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span> (infos.size() != 4)</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; {</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invalid number of TransposeConvolution2d TensorInfos. &quot;</span></div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="stringliteral">&quot;TensorInfos should be of format: {input, output, weights, biases}.&quot;</span>);</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; }</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; </div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const Convolution2dDescriptor*&gt;(&amp;descriptor));</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">if</span> (infos[3] == TensorInfo())</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; {</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">return</span> support.IsConvolution2dSupported(infos[0],</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; infos[1],</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; desc,</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; infos[2],</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; EmptyOptional(),</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; {</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">return</span> support.IsConvolution2dSupported(infos[0],</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; infos[1],</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; desc,</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; infos[2],</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; infos[3],</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; }</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">case</span> LayerType::Convolution3d:</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; {</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">if</span> (infos.size() != 4)</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; {</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invalid number of Convolution3d TensorInfos. &quot;</span></div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="stringliteral">&quot;TensorInfos should be of format: {input, output, weights, biases}.&quot;</span>);</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; </div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const Convolution3dDescriptor*&gt;(&amp;descriptor));</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">if</span> (infos[3] == TensorInfo())</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; {</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">return</span> support.IsConvolution3dSupported(infos[0],</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; infos[1],</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; desc,</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; infos[2],</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; EmptyOptional(),</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; {</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">return</span> support.IsConvolution3dSupported(infos[0],</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; infos[1],</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; desc,</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; infos[2],</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; infos[3],</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ab023d9a7687e35c0f108458a094c1f56">LayerType::DepthToSpace</a>:</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">return</span> support.IsDepthToSpaceSupported(infos[0],</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; infos[1],</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; *(PolymorphicDowncast&lt;const DepthToSpaceDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">case</span> LayerType::DepthwiseConvolution2d:</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; {</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">if</span> (infos.size() != 4)</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; {</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invalid number of DepthwiseConvolution2d TensorInfos. &quot;</span></div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="stringliteral">&quot;TensorInfos should be of format: {input, output, weights, biases}.&quot;</span>);</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; }</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; </div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const DepthwiseConvolution2dDescriptor*&gt;(&amp;descriptor));</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">if</span> (infos[3] == TensorInfo())</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">return</span> support.IsDepthwiseConvolutionSupported(infos[0],</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; infos[1],</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; desc,</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; infos[2],</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; EmptyOptional(),</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; }</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; {</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordflow">return</span> support.IsDepthwiseConvolutionSupported(infos[0],</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; infos[1],</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; desc,</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; infos[2],</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; infos[3],</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; }</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; }</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a855293b1be0581fb61ef6a1c5b027d0f">LayerType::Dequantize</a>:</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">return</span> support.IsDequantizeSupported(infos[0], infos[1], reasonIfUnsupported);</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a5826c31d9342002f512999ce89841073">LayerType::DetectionPostProcess</a>:</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; {</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const DetectionPostProcessDescriptor*&gt;(&amp;descriptor));</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">return</span> support.IsDetectionPostProcessSupported(infos[0],</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; infos[1],</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; infos[2],</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; infos[3],</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; infos[4],</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; infos[5],</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; infos[6],</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; desc,</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; }</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordflow">case</span> LayerType::Division:</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">return</span> support.IsDivisionSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">case</span> LayerType::ElementwiseBinary:</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; {</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const ElementwiseBinaryDescriptor *&gt;(&amp;descriptor));</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; </div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keywordflow">switch</span> (desc.m_Operation)</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; {</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Add:</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <a class="code" href="_neon_layer_support_8cpp.html#af0383f6bb43d6d5df6f3265367b6ebf9">FORWARD_WORKLOAD_VALIDATE_FUNC</a>(<a class="code" href="namespacearmnn.html#a1b03e82a1a53b686aedea3734b2fb957">NeonAdditionWorkloadValidate</a>,</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; reasonIfUnsupported,</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; infos[0],</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; infos[1],</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; infos[2],</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Div:</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <a class="code" href="_neon_layer_support_8cpp.html#af0383f6bb43d6d5df6f3265367b6ebf9">FORWARD_WORKLOAD_VALIDATE_FUNC</a>(<a class="code" href="namespacearmnn.html#a65c912bfcf02b3096f36caf21fa175d0">NeonDivisionWorkloadValidate</a>,</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; reasonIfUnsupported,</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; infos[0],</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; infos[1],</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; infos[2],</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Maximum:</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <a class="code" href="_neon_layer_support_8cpp.html#af0383f6bb43d6d5df6f3265367b6ebf9">FORWARD_WORKLOAD_VALIDATE_FUNC</a>(<a class="code" href="namespacearmnn.html#a8d2ea79addd8ef64be2ca0dad3408f00">NeonMaximumWorkloadValidate</a>,</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; reasonIfUnsupported,</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; infos[0],</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; infos[1],</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; infos[2]);</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Minimum:</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <a class="code" href="_neon_layer_support_8cpp.html#af0383f6bb43d6d5df6f3265367b6ebf9">FORWARD_WORKLOAD_VALIDATE_FUNC</a>(<a class="code" href="namespacearmnn.html#ab81159ebfa638af1b91fe1e8c5de1955">NeonMinimumWorkloadValidate</a>,</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; reasonIfUnsupported,</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; infos[0],</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; infos[1],</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; infos[2]);</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Mul:</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <a class="code" href="_neon_layer_support_8cpp.html#af0383f6bb43d6d5df6f3265367b6ebf9">FORWARD_WORKLOAD_VALIDATE_FUNC</a>(<a class="code" href="namespacearmnn.html#ad512520e809bfed4fbd3db9fbc241263">NeonMultiplicationWorkloadValidate</a>,</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; reasonIfUnsupported,</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; infos[0],</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; infos[1],</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; infos[2],</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Power:</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">case</span> BinaryOperation::SqDiff:</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="_neon_layer_support_8cpp.html#af0383f6bb43d6d5df6f3265367b6ebf9">FORWARD_WORKLOAD_VALIDATE_FUNC</a>(<a class="code" href="namespacearmnn.html#aa91b61cfa806ac6c8cd326f02dd993d5">NeonElementwiseBinaryWorkloadValidate</a>,</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; reasonIfUnsupported,</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; infos[0],</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; infos[1],</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; infos[2],</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; desc,</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">case</span> BinaryOperation::Sub:</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <a class="code" href="_neon_layer_support_8cpp.html#af0383f6bb43d6d5df6f3265367b6ebf9">FORWARD_WORKLOAD_VALIDATE_FUNC</a>(<a class="code" href="namespacearmnn.html#abc968e1323027f9e42cbc7642800d5ce">NeonSubtractionWorkloadValidate</a>,</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; reasonIfUnsupported,</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; infos[0],</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; infos[1],</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; infos[2],</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; }</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; }</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">case</span> LayerType::ElementwiseUnary:</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">return</span> support.IsElementwiseUnarySupported(infos[0],</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; infos[1],</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; *(<a class="code" href="namespacearmnn.html#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; ElementwiseUnaryDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a88bebdfe6309aa2cd6831cfa73c296f0">LayerType::Fill</a>:</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">return</span> support.IsFillSupported(infos[0],</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; infos[1],</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; *(PolymorphicDowncast&lt;const FillDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">case</span> LayerType::Floor:</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">return</span> support.IsFloorSupported(infos[0], infos[1], reasonIfUnsupported);</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a435f9350a94adfbb0d5b9abb5f430914">LayerType::FullyConnected</a>:</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordflow">return</span> support.IsFullyConnectedSupported(infos[0],</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; infos[1],</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; infos[2],</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; infos[3],</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; *(<a class="code" href="namespacearmnn.html#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; FullyConnectedDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">case</span> LayerType::Fused:</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; {</div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keyword">auto</span> fusedDescriptor = *(PolymorphicDowncast&lt;const FusedDescriptor*&gt;(&amp;descriptor));</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">if</span> (fusedDescriptor.m_NumInputSlots + fusedDescriptor.m_NumOutputSlots != infos.size())</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; {</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invalid number of FusedLayer TensorInfos.&quot;</span>);</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; }</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; </div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keyword">auto</span> it = infos.begin() + numeric_cast&lt;TensorInfo::DifferenceType&gt;(fusedDescriptor.m_NumInputSlots);</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; std::vector&lt;TensorInfo&gt; inputInfos(infos.begin(), it);</div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; std::vector&lt;TensorInfo&gt; outputInfos(it, infos.end());</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; </div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">return</span> support.IsFusedSupported({inputInfos.begin(), inputInfos.end()},</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; {outputInfos.begin(), outputInfos.end()},</div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; fusedDescriptor,</div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a4f1a1b88b01d8dfda3803776e0778a49">LayerType::Gather</a>:</div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">return</span> support.IsGatherSupported(infos[0],</div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; infos[1],</div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; infos[2],</div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; *(PolymorphicDowncast&lt;const GatherDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">case</span> LayerType::GatherNd:</div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">return</span> support.IsGatherNdSupported(infos[0],</div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; infos[1],</div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; infos[2],</div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordflow">case</span> LayerType::Input:</div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">return</span> support.IsInputSupported(infos[0], reasonIfUnsupported);</div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordflow">case</span> LayerType::InstanceNormalization:</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">return</span> support.IsInstanceNormalizationSupported(infos[0],</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; infos[1],</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; *(<a class="code" href="namespacearmnn.html#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; InstanceNormalizationDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">case</span> LayerType::L2Normalization:</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keywordflow">return</span> support.IsL2NormalizationSupported(infos[0],</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; infos[1],</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; *(<a class="code" href="namespacearmnn.html#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; L2NormalizationDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">case</span> LayerType::LogicalBinary:</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">return</span> support.IsLogicalBinarySupported(infos[0],</div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; infos[1],</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; infos[2],</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; *(<a class="code" href="namespacearmnn.html#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; LogicalBinaryDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ac52e04c0e349e25bcdaa72c27395ef8f">LayerType::LogSoftmax</a>:</div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordflow">return</span> support.IsLogSoftmaxSupported(infos[0],</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; infos[1],</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; *(PolymorphicDowncast&lt;const LogSoftmaxDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">case</span> LayerType::Lstm:</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">return</span> support.IsLstmSupported(infos[0],</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; infos[1],</div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; infos[2],</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; infos[3],</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; infos[4],</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; infos[5],</div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; infos[6],</div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; *(PolymorphicDowncast&lt;const LstmDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; lstmParamsInfo.value(),</div>
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">case</span> LayerType::Map:</div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">case</span> LayerType::Maximum:</div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">return</span> support.IsMaximumSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">case</span> LayerType::Mean:</div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">return</span> support.IsMeanSupported(infos[0],</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; infos[1],</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; *(PolymorphicDowncast&lt;const MeanDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keywordflow">case</span> LayerType::MemCopy:</div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">return</span> support.IsMemCopySupported(infos[0], infos[1], reasonIfUnsupported);</div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">case</span> LayerType::MemImport:</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">return</span> support.IsMemImportSupported(infos[0], infos[1], reasonIfUnsupported);</div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">case</span> LayerType::Merge:</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordflow">return</span> support.IsMergeSupported(infos[0],</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; infos[1],</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; infos[2],</div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">case</span> LayerType::Minimum:</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordflow">return</span> support.IsMinimumSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordflow">case</span> LayerType::Multiplication:</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">return</span> support.IsMultiplicationSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">case</span> LayerType::Normalization:</div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">return</span> support.IsNormalizationSupported(infos[0],</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; infos[1],</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; *(<a class="code" href="namespacearmnn.html#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; NormalizationDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">case</span> LayerType::Output:</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">return</span> support.IsOutputSupported(infos[0], reasonIfUnsupported);</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a3c62b52d21e28088f040a4b6c2a06022">LayerType::Pad</a>:</div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">return</span> support.IsPadSupported(infos[0],</div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; infos[1],</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; *(PolymorphicDowncast&lt;const PadDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn_utils.html#af3c74017185773dd61d8ca6662d65d43">LayerType::Permute</a>:</div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keywordflow">return</span> support.IsPermuteSupported(infos[0],</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; infos[1],</div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; *(PolymorphicDowncast&lt;const PermuteDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ae2e93e304cf516841c521e3eaee025cd">LayerType::Pooling2d</a>:</div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="keywordflow">return</span> support.IsPooling2dSupported(infos[0],</div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; infos[1],</div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; *(PolymorphicDowncast&lt;const Pooling2dDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a69acbef24cd1cc572b93fc3e1e6ac030">LayerType::Pooling3d</a>:</div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">return</span> support.IsPooling3dSupported(infos[0],</div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; infos[1],</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; *(PolymorphicDowncast&lt;const Pooling3dDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keywordflow">case</span> LayerType::Prelu:</div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">return</span> support.IsPreluSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">case</span> LayerType::QLstm:</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">return</span> support.IsQLstmSupported(infos[0],</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; infos[1],</div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; infos[2],</div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; infos[3],</div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; infos[4],</div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; infos[5],</div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; *(PolymorphicDowncast&lt;const QLstmDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; lstmParamsInfo.value(),</div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad773a034fb9983e15f3094b4c5c7c30c">LayerType::Quantize</a>:</div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordflow">return</span> support.IsQuantizeSupported(infos[0], infos[1], reasonIfUnsupported);</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="keywordflow">case</span> LayerType::QuantizedLstm:</div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keywordflow">return</span> support.IsQuantizedLstmSupported(infos[0],</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; infos[1],</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; infos[2],</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; infos[3],</div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; infos[4],</div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; quantizedLstmParamsInfo.value(),</div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">case</span> LayerType::Rank:</div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordflow">case</span> LayerType::Reshape:</div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">return</span> support.IsReshapeSupported(infos[0],</div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; infos[1],</div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; *(PolymorphicDowncast&lt;const ReshapeDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#aaa168a41b648cda82a2c8b9f2b91ec04">LayerType::Resize</a>:</div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordflow">return</span> support.IsResizeSupported(infos[0],</div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; infos[1],</div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; *(PolymorphicDowncast&lt;const ResizeDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad64b7a275169ba1b1ba2d15679f7e8b1">LayerType::Reduce</a>:</div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keywordflow">return</span> support.IsReduceSupported(infos[0],</div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; infos[1],</div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; *(PolymorphicDowncast&lt;const ReduceDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a8caac207d532c38c3909d40c742d8c3f">LayerType::ReverseV2</a>:</div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keywordflow">return</span> support.IsReverseV2Supported(infos[0],</div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; infos[1],</div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; infos[2],</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">case</span> LayerType::Shape:</div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">return</span> support.IsShapeSupported(infos[0],</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; infos[1],</div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a044ea0cc993d4d1fbe4ec877b17b8d39">LayerType::Slice</a>:</div>
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keywordflow">return</span> support.IsSliceSupported(infos[0],</div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; infos[1],</div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; *(PolymorphicDowncast&lt;const SliceDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#aa999ff2585ad75b95954a9323f63c32b">LayerType::Softmax</a>:</div>
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keywordflow">return</span> support.IsSoftmaxSupported(infos[0],</div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; infos[1],</div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; *(PolymorphicDowncast&lt;const SoftmaxDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a4a180e425d4c19b2cdea4ce5760180e1">LayerType::SpaceToBatchNd</a>:</div>
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordflow">return</span> support.IsSpaceToBatchNdSupported(infos[0],</div>
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; infos[1],</div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; *(<a class="code" href="namespacearmnn.html#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; SpaceToBatchNdDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a5e1dc69443b64ad16b669388a6023f7a">LayerType::SpaceToDepth</a>:</div>
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keywordflow">return</span> support.IsSpaceToDepthSupported(infos[0],</div>
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; infos[1],</div>
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; *(PolymorphicDowncast&lt;const SpaceToDepthDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a0fdab6fc39d90c5beea97f4ca0a584c4">LayerType::Splitter</a>:</div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; {</div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; std::vector&lt;TensorInfo&gt; outputInfos;</div>
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keywordflow">for</span> (uint32_t i = 1; i &lt; infos.size(); i++)</div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; {</div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; outputInfos.push_back(infos[i]);</div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; }</div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keywordflow">return</span> support.IsSplitterSupported(infos[0],</div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; {outputInfos.begin(), outputInfos.end()},</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; *(PolymorphicDowncast&lt;const ViewsDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; }</div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ac245fda400649db10eed0dc96c1b5c37">LayerType::Stack</a>:</div>
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; {</div>
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; std::vector&lt;const TensorInfo*&gt; inputInfos;</div>
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; infos.size() - 1; i++)</div>
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; {</div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; inputInfos.push_back(&amp;infos[i]);</div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; }</div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keywordflow">return</span> support.IsStackSupported(inputInfos,</div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; infos[infos.size() - 1],</div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; *(PolymorphicDowncast&lt;const StackDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; }</div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a86d7a7168ac00b75b4971f9aad623698">LayerType::StridedSlice</a>:</div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">return</span> support.IsStridedSliceSupported(infos[0],</div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; infos[1],</div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; *(PolymorphicDowncast&lt;const StridedSliceDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keywordflow">case</span> LayerType::Subtraction:</div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">return</span> support.IsSubtractionSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ae789852d4625b71ca83474fe12c511e8">LayerType::Tile</a>:</div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keywordflow">return</span> support.IsTileSupported(infos[0],</div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; infos[1],</div>
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; *(PolymorphicDowncast&lt;const TileDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn_utils.html#a405d5f966ec992d1717711e5a2d7909d">LayerType::Transpose</a>:</div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keywordflow">return</span> support.IsTransposeSupported(infos[0],</div>
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; infos[1],</div>
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; *(PolymorphicDowncast&lt;const TransposeDescriptor*&gt;(&amp;descriptor)),</div>
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <span class="keywordflow">case</span> LayerType::TransposeConvolution2d:</div>
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; {</div>
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="keywordflow">if</span> (infos.size() != 4)</div>
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; {</div>
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invalid number of TransposeConvolution2d TensorInfos. &quot;</span></div>
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="stringliteral">&quot;TensorInfos should be of format: {input, output, weights, biases}.&quot;</span>);</div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; }</div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; </div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const TransposeConvolution2dDescriptor*&gt;(&amp;descriptor));</div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keywordflow">if</span> (infos[3] == TensorInfo())</div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; {</div>
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="keywordflow">return</span> support.IsTransposeConvolution2dSupported(infos[0],</div>
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; infos[1],</div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; desc,</div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; infos[2],</div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; EmptyOptional(),</div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; }</div>
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; {</div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="keywordflow">return</span> support.IsTransposeConvolution2dSupported(infos[0],</div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; infos[1],</div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; desc,</div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; infos[2],</div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; infos[3],</div>
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; }</div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; }</div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keywordflow">case</span> LayerType::UnidirectionalSequenceLstm:</div>
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; {</div>
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const UnidirectionalSequenceLstmDescriptor*&gt;(&amp;descriptor));</div>
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="keywordflow">return</span> support.IsUnidirectionalSequenceLstmSupported(infos[0],</div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; infos[1],</div>
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; infos[2],</div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; infos[3],</div>
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; infos[4],</div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; infos[5],</div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; desc,</div>
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; lstmParamsInfo.value(),</div>
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; reasonIfUnsupported);</div>
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; }</div>
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">case</span> LayerType::Unmap:</div>
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="comment">// layers not supported in neon by default:</span></div>
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="comment">// debug, fakequantization, precompiled,</span></div>
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="comment">// standin, switch</span></div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; }</div>
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aa9a62e70841c4d06dd16306a85700d36">Activation</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047aec211f7c20af43e742bf2570c3cb84f9">Add</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f">Addition</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a2139684546b147c106b329f41547640c">ArgMinMax</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a9882ff3cfed27d6161c20a305e7a3484">BatchMatMul</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4ae4743c3ec15d1d84169b17264634692e">BatchNormalization</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a6ee06c6045d0c5b6565a247955ef0fc2">BatchToSpaceNd</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a4cd9f3996d60790cd11c04f842ebc43c">Cast</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a0ca5f33c1d35fd4105d3a26a2823f9dd">ChannelShuffle</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4af6c0e3a1c3cfabd32ae8d3ae741fcf0a">Comparison</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4ae20f0f2826a6549809f050b86274567f">Concat</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a912a4b4d73726c282e3f79aa2c390d6c">ConvertFp16ToFp32</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4addf4f83b056acd5549949fc0350e9aad">ConvertFp32ToFp16</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a">Convolution2d</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a583550d0f265fd3756f7de0e42c51953">Convolution3d</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a731729ad1b2c0eb9399b62c770b3482d">DepthToSpace</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4af97adbfc88b7012a0243215b1076e7e7">DepthwiseConvolution2d</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a9bc35e069257a508e14ed82965a8661d">Dequantize</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a1db19222ac424bd7162142ddf929fd2a">DetectionPostProcess</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a43d11850893d2fe84a1e618121c1cc0a">Div</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a3025cdaab2deb0bb2cd642449e570833">Division</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a699bcffd93aff3022014b9efc9eaefd1">ElementwiseBinary</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4abcd30d7ea97ad20c2cddc0f47e6b70c7">ElementwiseUnary</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4adb3e3f51c9107e26c9bccf9a188ce2ed">Fill</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4af3f6d0343d56ce88ce7958170ed05cb3">Floor</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00166">FORWARD_WORKLOAD_VALIDATE_FUNC</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acab78faff25393e9defd1911cb58133e">FullyConnected</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4af617f46b788e11a564cb16c9f5d59fea">Fused</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aad22c799930d644e8468fe44c0312d53">Gather</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a3028cc42e40f9a1f4f8b35556d9715a4">GatherNd</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a21baa4498161d195f5bb2e3627344ba4">InstanceNormalization</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00770">NeonLayerSupport::IsActivationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00783">NeonLayerSupport::IsAdditionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00796">NeonLayerSupport::IsArgMinMaxSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00808">NeonLayerSupport::IsBatchMatMulSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00838">NeonLayerSupport::IsBatchNormalizationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00859">NeonLayerSupport::IsBatchToSpaceNdSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00871">NeonLayerSupport::IsCastSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00881">NeonLayerSupport::IsChannelShuffleSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00893">NeonLayerSupport::IsComparisonSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00908">NeonLayerSupport::IsConcatSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00947">NeonLayerSupport::IsConstantSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00955">NeonLayerSupport::IsConvertFp16ToFp32Supported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00965">NeonLayerSupport::IsConvertFp32ToFp16Supported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00975">NeonLayerSupport::IsConvolution2dSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01008">NeonLayerSupport::IsConvolution3dSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01041">NeonLayerSupport::IsDepthToSpaceSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01053">NeonLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01070">NeonLayerSupport::IsDequantizeSupported()</a>, <a class="el" href="_layer_support_base_8cpp_source.html#l00085">LayerSupportBase::IsDetectionPostProcessSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01364">NeonLayerSupport::IsDivisionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01097">NeonLayerSupport::IsElementwiseUnarySupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01149">NeonLayerSupport::IsFillSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01161">NeonLayerSupport::IsFloorSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01176">NeonLayerSupport::IsFullyConnectedSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01193">NeonLayerSupport::IsFusedSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01220">NeonLayerSupport::IsGatherNdSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01206">NeonLayerSupport::IsGatherSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01232">NeonLayerSupport::IsInputSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01238">NeonLayerSupport::IsInstanceNormalizationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01250">NeonLayerSupport::IsL2NormalizationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01258">NeonLayerSupport::IsLogicalBinarySupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01283">NeonLayerSupport::IsLogSoftmaxSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01291">NeonLayerSupport::IsLstmSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01315">NeonLayerSupport::IsMaximumSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01327">NeonLayerSupport::IsMeanSupported()</a>, <a class="el" href="_layer_support_base_8cpp_source.html#l00098">LayerSupportBase::IsMemCopySupported()</a>, <a class="el" href="_layer_support_base_8cpp_source.html#l00105">LayerSupportBase::IsMemImportSupported()</a>, <a class="el" href="_layer_support_base_8cpp_source.html#l00112">LayerSupportBase::IsMergeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01339">NeonLayerSupport::IsMinimumSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01351">NeonLayerSupport::IsMultiplicationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01377">NeonLayerSupport::IsNormalizationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01389">NeonLayerSupport::IsOutputSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01395">NeonLayerSupport::IsPadSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01407">NeonLayerSupport::IsPermuteSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01415">NeonLayerSupport::IsPooling2dSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01423">NeonLayerSupport::IsPooling3dSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01431">NeonLayerSupport::IsPreluSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01439">NeonLayerSupport::IsQLstmSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01484">NeonLayerSupport::IsQuantizedLstmSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01474">NeonLayerSupport::IsQuantizeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01502">NeonLayerSupport::IsReduceSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01514">NeonLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01526">NeonLayerSupport::IsResizeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01538">NeonLayerSupport::IsReverseV2Supported()</a>, <a class="el" href="_layer_support_base_8cpp_source.html#l00131">LayerSupportBase::IsShapeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01550">NeonLayerSupport::IsSliceSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01562">NeonLayerSupport::IsSoftmaxSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01570">NeonLayerSupport::IsSpaceToBatchNdSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01582">NeonLayerSupport::IsSpaceToDepthSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01594">NeonLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01627">NeonLayerSupport::IsStackSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01639">NeonLayerSupport::IsStridedSliceSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01651">NeonLayerSupport::IsSubtractionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01664">NeonLayerSupport::IsTileSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01676">NeonLayerSupport::IsTransposeConvolution2dSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01692">NeonLayerSupport::IsTransposeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01700">NeonLayerSupport::IsUnidirectionalSequenceLstmSupported()</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a1189467870bc421ae59277e750263eb2">L2Normalization</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4af4f53c8297dc1cb53d4e6f8151070a30">LogicalBinary</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4ac21dbda57d88c21ec9857f5d1522c488">LogSoftmax</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a06b091bc9aea697ba473c71f0bb55925">Lstm</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a8321e79c278ec510f63675c040594892">Maximum</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a3d6c9ac08ada31c184094bbc67afe00d">Mean</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b">MemCopy</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a115bfc5d633eae55c67f9588acdd2bf9">MemImport</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a68be4837f6c739877233e527a996dd00">Merge</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047aa1d0ec6d56f8833a078b5a7ac4caf2d4">Minimum</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a62b6d55816cf737bfc6f42e60df1a3f2">Mul</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a27d1a1f7b7c2180e5b20ce9e3d00e2dd">Multiplication</a>, <a class="el" href="_neon_addition_workload_8cpp_source.html#l00020">NeonAdditionWorkloadValidate()</a>, <a class="el" href="_neon_division_workload_8cpp_source.html#l00018">NeonDivisionWorkloadValidate()</a>, <a class="el" href="_neon_elementwise_binary_workload_8cpp_source.html#l00020">NeonElementwiseBinaryWorkloadValidate()</a>, <a class="el" href="_neon_maximum_workload_8cpp_source.html#l00014">NeonMaximumWorkloadValidate()</a>, <a class="el" href="_neon_minimum_workload_8cpp_source.html#l00015">NeonMinimumWorkloadValidate()</a>, <a class="el" href="_neon_multiplication_workload_8cpp_source.html#l00019">NeonMultiplicationWorkloadValidate()</a>, <a class="el" href="_neon_subtraction_workload_8cpp_source.html#l00022">NeonSubtractionWorkloadValidate()</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aac61f2e17250a818dee4d12b112aa88f">Normalization</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4ade43468adaf6acb2c38ebc0c1176f82f">Pad</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7">Permute</a>, <a class="el" href="_polymorphic_downcast_8hpp_source.html#l00074">PolymorphicDowncast()</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4ad662867a41bfb30b9f75dda2b5849001">Pooling2d</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a2b3140dc366b9fcd25ed786a79d1817c">Pooling3d</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047add4fe0cc913f704600b97d1f5dd285de">Power</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a0c5967f09e0669c840ebb1ed0da85e32">Prelu</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a91880b71ea6d007439b7bc7c320b5c25">QLstm</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aca39930e22f40d10155a57dba32240bb">Quantize</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a890a37ff3bfe123414ba7e6f052b49f3">QuantizedLstm</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a021da1b20f73dc252361a54d80497ef3">Rank</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aec4875f03ff0bb0b26cf76ac7f41e3c8">Reduce</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aa7c59ccedc6a3bd90c17f3b990afefad">Reshape</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a9d723d04c40bfd81835c0766a698cf63">Resize</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4af9a0b6ef62dc10097826358e28b19295">ReverseV2</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a880c1273b27d27cfc82004c3a4b205c9">Shape</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4ad140d37ad98c12ccd8e1c432f548bcdb">Slice</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0">Softmax</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a337c392144dca0d18290c6b4711a2279">SpaceToBatchNd</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a5e7ff12da912dc79e7e547281823fa4a">SpaceToDepth</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a41cb9b797ebc6f6f6314e3ded935f4cf">Splitter</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a2d17ea57d7f86acde5c60cef8e123a53">SqDiff</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a2187e1021a911b3807cc1bea2eb1a9ca">Stack</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aa31904f2b3479b5a00137fd985974b4d">StridedSlice</a>, <a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047ae80155eceb940c89e2de63ad05868db2">Sub</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a6eb8b8b560161603402c0238b3a7d8b0">Subtraction</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4ac5457c5f3cfb4da8638ce7190f8e5152">Tile</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4aaf70b1ac863830a4e1ce6268c8399f54">Transpose</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a71b23d26c0f5d20416d6c77754f9806a">TransposeConvolution2d</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a300124b2433e0376ec4b19251ac3a9e5">UnidirectionalSequenceLstm</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a48180ddd584de21589006d56a86d3410">Unmap</a>, and <a class="el" href="_optional_8hpp_source.html#l00146">OptionalReferenceSwitch&lt; std::is_reference&lt; T &gt;::value, T &gt;::value()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00722">NeonLayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
<a id="ab6b4f5f3473b0ce4b241d454f8cbdd26"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab6b4f5f3473b0ce4b241d454f8cbdd26">&#9670;&nbsp;</a></span>IsNCHW()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsNCHW </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">armnn::Layer</a> &amp;&#160;</td>
<td class="paramname"><em>layer</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_subgraph_utils_8hpp_source.html#l00213">213</a> of file <a class="el" href="_subgraph_utils_8hpp_source.html">SubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;{</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; CheckForNCHW check;</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; layer.<a class="code" href="classarmnn_1_1_layer.html#a46fc3fdd4b2a5dd6d184e57983cf20bc">ExecuteStrategy</a>(check);</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">return</span> check.Result();</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_layer_8cpp_source.html#l00571">Layer::ExecuteStrategy()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_subgraph_utils_8hpp_source.html#l00250">ConnectedToLayerWithNCHW()</a>.</p>
</div>
</div>
<a id="a05323af66b9f762e269a27562a2bbdd0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a05323af66b9f762e269a27562a2bbdd0">&#9670;&nbsp;</a></span>IsOperationQueueDescriptor() <span class="overload">[1/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr bool armnn::IsOperationQueueDescriptor </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_constant_queue_descriptor.html">ConstantQueueDescriptor</a> &amp;&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8hpp_source.html#l00022">22</a> of file <a class="el" href="_ref_workload_factory_8hpp_source.html">RefWorkloadFactory.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a93e7b76d19b33076b2a4eae44014d5ea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a93e7b76d19b33076b2a4eae44014d5ea">&#9670;&nbsp;</a></span>IsOperationQueueDescriptor() <span class="overload">[2/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="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_mem_copy_queue_descriptor.html">MemCopyQueueDescriptor</a> &amp;&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8hpp_source.html#l00020">20</a> of file <a class="el" href="_ref_workload_factory_8hpp_source.html">RefWorkloadFactory.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a91332212b6a2cc9c0ea32af03c600b4f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a91332212b6a2cc9c0ea32af03c600b4f">&#9670;&nbsp;</a></span>IsOperationQueueDescriptor() <span class="overload">[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_permute_queue_descriptor.html">PermuteQueueDescriptor</a> &amp;&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8hpp_source.html#l00024">24</a> of file <a class="el" href="_ref_workload_factory_8hpp_source.html">RefWorkloadFactory.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ad05c0670c947d35d39b3b0217e9975cf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad05c0670c947d35d39b3b0217e9975cf">&#9670;&nbsp;</a></span>IsOperationQueueDescriptor() <span class="overload">[4/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr bool armnn::IsOperationQueueDescriptor </td>
<td>(</td>
<td class="paramtype">const QueueDescriptorType &amp;&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8hpp_source.html#l00018">18</a> of file <a class="el" href="_ref_workload_factory_8hpp_source.html">RefWorkloadFactory.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{ <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a47d136a5519331dee24f5e01b206ae7c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a47d136a5519331dee24f5e01b206ae7c">&#9670;&nbsp;</a></span>IsQAsymmS8()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsQAsymmS8 </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8cpp_source.html#l00072">72</a> of file <a class="el" href="_ref_workload_factory_8cpp_source.html">RefWorkloadFactory.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;{</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">return</span> IsDataType&lt;DataType::QAsymmS8&gt;(info);</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
<p class="reference">Referenced by <a class="el" href="_ref_workload_factory_8cpp_source.html#l00146">RefWorkloadFactory::CreateWorkload()</a>.</p>
</div>
</div>
<a id="a37c36bbf668cd8a0d7dcd731c9b591d7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a37c36bbf668cd8a0d7dcd731c9b591d7">&#9670;&nbsp;</a></span>IsQAsymmU8()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsQAsymmU8 </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8cpp_source.html#l00076">76</a> of file <a class="el" href="_ref_workload_factory_8cpp_source.html">RefWorkloadFactory.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;{</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">return</span> IsDataType&lt;DataType::QAsymmU8&gt;(info);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
<p class="reference">Referenced by <a class="el" href="_ref_workload_factory_8cpp_source.html#l00146">RefWorkloadFactory::CreateWorkload()</a>.</p>
</div>
</div>
<a id="abcd0d843d5736b78740ae73249b6b977"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abcd0d843d5736b78740ae73249b6b977">&#9670;&nbsp;</a></span>IsQSymmS16()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsQSymmS16 </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8cpp_source.html#l00064">64</a> of file <a class="el" href="_ref_workload_factory_8cpp_source.html">RefWorkloadFactory.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;{</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">return</span> IsDataType&lt;DataType::QSymmS16&gt;(info);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
<p class="reference">Referenced by <a class="el" href="_ref_workload_factory_8cpp_source.html#l00146">RefWorkloadFactory::CreateWorkload()</a>.</p>
</div>
</div>
<a id="a09a7cd515c3b495e61b2a5116bf6a335"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a09a7cd515c3b495e61b2a5116bf6a335">&#9670;&nbsp;</a></span>IsQSymmS8()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsQSymmS8 </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8cpp_source.html#l00068">68</a> of file <a class="el" href="_ref_workload_factory_8cpp_source.html">RefWorkloadFactory.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;{</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">return</span> IsDataType&lt;DataType::QSymmS8&gt;(info);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
<p class="reference">Referenced by <a class="el" href="_ref_workload_factory_8cpp_source.html#l00146">RefWorkloadFactory::CreateWorkload()</a>.</p>
</div>
</div>
<a id="ad91bc7bfe29186f5d78c28386c6c5309"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad91bc7bfe29186f5d78c28386c6c5309">&#9670;&nbsp;</a></span>IsQuantized8BitType()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr bool armnn::IsQuantized8BitType </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td>
<td class="paramname"><em>dataType</em></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="_types_utils_8hpp_source.html#l00316">316</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;{</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">return</span> dataType == DataType::QAsymmU8 ||</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; dataType == DataType::QAsymmS8 ||</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; dataType == DataType::QSymmS8;</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, and <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>.</p>
<p class="reference">Referenced by <a class="el" href="_ref_layer_support_8cpp_source.html#l01039">RefLayerSupport::IsConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01108">RefLayerSupport::IsConvolution3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01235">RefLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_types_utils_8hpp_source.html#l00323">IsQuantizedType()</a>, and <a class="el" href="_ref_layer_support_8cpp_source.html#l02840">RefLayerSupport::IsTransposeConvolution2dSupported()</a>.</p>
</div>
</div>
<a id="ad44c007f21af2d0375e3ef9400a1b275"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad44c007f21af2d0375e3ef9400a1b275">&#9670;&nbsp;</a></span>IsQuantizedType() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr bool armnn::IsQuantizedType </td>
<td>(</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="_types_utils_8hpp_source.html#l00311">311</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;{</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">return</span> std::is_integral&lt;T&gt;::value;</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_multiplication_workload_8cpp_source.html#l00047">ClMultiplicationWorkload::ClMultiplicationWorkload()</a>, <a class="el" href="_ref_workload_factory_8cpp_source.html#l00146">RefWorkloadFactory::CreateWorkload()</a>, <a class="el" href="_tensor_8cpp_source.html#l00508">TensorInfo::IsQuantized()</a>, <a class="el" href="_neon_multiplication_workload_8cpp_source.html#l00047">NeonMultiplicationWorkload::NeonMultiplicationWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l02497">QuantizeQueueDescriptor::Validate()</a>.</p>
</div>
</div>
<a id="aa172264d7075abf828e0b6894996a561"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa172264d7075abf828e0b6894996a561">&#9670;&nbsp;</a></span>IsQuantizedType() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr bool armnn::IsQuantizedType </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td>
<td class="paramname"><em>dataType</em></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="_types_utils_8hpp_source.html#l00323">323</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;{</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">return</span> dataType == DataType::QSymmS16 || <a class="code" href="namespacearmnn.html#ad91bc7bfe29186f5d78c28386c6c5309">IsQuantized8BitType</a>(dataType);</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_types_utils_8hpp_source.html#l00316">IsQuantized8BitType()</a>, and <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>.</p>
</div>
</div>
<a id="a6b10dc0d12c7f4a52ad01b9975dbe908"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6b10dc0d12c7f4a52ad01b9975dbe908">&#9670;&nbsp;</a></span>IsReadyForSplitAssignment()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsReadyForSplitAssignment </td>
<td>(</td>
<td class="paramtype">LayerSelectionInfo::LayerInfoContainer &amp;&#160;</td>
<td class="paramname"><em>layerInfos</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">LayerSelectionInfo &amp;&#160;</td>
<td class="paramname"><em>layerInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_subgraph_view_selector_8cpp_source.html#l00387">387</a> of file <a class="el" href="_subgraph_view_selector_8cpp_source.html">SubgraphViewSelector.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;{</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordtype">bool</span> ready = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <a class="code" href="namespacearmnn.html#afce94270d9c4a51cd0c4ac6a58af4e26">ForEachLayerInput</a>(layerInfos, layerInfo,</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; [&amp;ready](LayerSelectionInfo&amp; parentInfo)</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; {</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">if</span> (!parentInfo.m_IsProcessed)</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; {</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; ready = false;</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; }</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; });</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordflow">return</span> ready;</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_subgraph_view_selector_8cpp_source.html#l00277">ForEachLayerInput()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_subgraph_view_selector_8cpp_source.html#l00402">SubgraphViewSelector::SelectSubgraphs()</a>.</p>
</div>
</div>
<a id="a336dd839b81ad6a1d803c306b40f9af2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a336dd839b81ad6a1d803c306b40f9af2">&#9670;&nbsp;</a></span>IsSequenceLayerType() <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">bool armnn::IsSequenceLayerType </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;&#160;</td>
<td class="paramname"><em>layer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047">BinaryOperation</a>&#160;</td>
<td class="paramname"><em>type</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_subgraph_utils_8hpp_source.html#l00367">367</a> of file <a class="el" href="_subgraph_utils_8hpp_source.html">SubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;{</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">return</span> (layer.GetType() == LayerType::ElementwiseBinary) &amp;&amp;</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; (PolymorphicDowncast&lt;ElementwiseBinaryLayer*&gt;(&amp;layer)-&gt;GetParameters().m_Operation == type);</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a699bcffd93aff3022014b9efc9eaefd1">ElementwiseBinary</a>, and <a class="el" href="_layer_8hpp_source.html#l00286">Layer::GetType()</a>.</p>
</div>
</div>
<a id="aefc7bff008047b9f763c2cf82c1a0fcb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aefc7bff008047b9f763c2cf82c1a0fcb">&#9670;&nbsp;</a></span>IsSequenceLayerType() <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">bool armnn::IsSequenceLayerType </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;&#160;</td>
<td class="paramname"><em>layer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td>
<td class="paramname"><em>type</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_subgraph_utils_8hpp_source.html#l00362">362</a> of file <a class="el" href="_subgraph_utils_8hpp_source.html">SubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;{</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordflow">return</span> layer.GetType() == type;</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_layer_8hpp_source.html#l00286">Layer::GetType()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_backend_optimization_utils_8hpp_source.html#l00087">BuildAddMulAddTensorInfoLists()</a>.</p>
</div>
</div>
<a id="a87b99791ccf8793961db67ea19eb6fa4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a87b99791ccf8793961db67ea19eb6fa4">&#9670;&nbsp;</a></span>IsSigned32()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsSigned32 </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8cpp_source.html#l00052">52</a> of file <a class="el" href="_ref_workload_factory_8cpp_source.html">RefWorkloadFactory.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;{</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">return</span> IsDataType&lt;DataType::Signed32&gt;(info);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
<p class="reference">Referenced by <a class="el" href="_ref_workload_factory_8cpp_source.html#l00146">RefWorkloadFactory::CreateWorkload()</a>.</p>
</div>
</div>
<a id="aa21ff5349b2240a92b847e670659357f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa21ff5349b2240a92b847e670659357f">&#9670;&nbsp;</a></span>IsSigned64()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsSigned64 </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8cpp_source.html#l00048">48</a> of file <a class="el" href="_ref_workload_factory_8cpp_source.html">RefWorkloadFactory.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;{</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">return</span> IsDataType&lt;DataType::Signed64&gt;(info);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
<p class="reference">Referenced by <a class="el" href="_ref_workload_factory_8cpp_source.html#l00146">RefWorkloadFactory::CreateWorkload()</a>.</p>
</div>
</div>
<a id="a23a5267702f036fe70a34f91e6c07490"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a23a5267702f036fe70a34f91e6c07490">&#9670;&nbsp;</a></span>IsSupportedForDataTypeGeneric()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::IsSupportedForDataTypeGeneric </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt;&#160;</td>
<td class="paramname"><em>reasonIfUnsupported</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td>
<td class="paramname"><em>dataType</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Float16Func&#160;</td>
<td class="paramname"><em>float16FuncPtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Float32Func&#160;</td>
<td class="paramname"><em>float32FuncPtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Uint8Func&#160;</td>
<td class="paramname"><em>uint8FuncPtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Int32Func&#160;</td>
<td class="paramname"><em>int32FuncPtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">BooleanFunc&#160;</td>
<td class="paramname"><em>booleanFuncPtr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Params &amp;&amp;...&#160;</td>
<td class="paramname"><em>params</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.html#l00027">27</a> of file <a class="el" href="_layer_support_common_8hpp_source.html">LayerSupportCommon.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;{</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">switch</span>(dataType)</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">case</span> DataType::Float16:</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> float16FuncPtr(reasonIfUnsupported, std::forward&lt;Params&gt;(params)...);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> float32FuncPtr(reasonIfUnsupported, std::forward&lt;Params&gt;(params)...);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> uint8FuncPtr(reasonIfUnsupported, std::forward&lt;Params&gt;(params)...);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> int32FuncPtr(reasonIfUnsupported, std::forward&lt;Params&gt;(params)...);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">case</span> DataType::Boolean:</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> booleanFuncPtr(reasonIfUnsupported, std::forward&lt;Params&gt;(params)...);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; }</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, and <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>.</p>
<p class="reference">Referenced by <a class="el" href="_ref_layer_support_8cpp_source.html#l00999">RefLayerSupport::IsConvertFp16ToFp32Supported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.html#l01019">RefLayerSupport::IsConvertFp32ToFp16Supported()</a>, and <a class="el" href="_neon_layer_support_8cpp_source.html#l01161">NeonLayerSupport::IsFloorSupported()</a>.</p>
</div>
</div>
<a id="afb1e69829289fb07cc349c0884f27abd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afb1e69829289fb07cc349c0884f27abd">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[1/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_activation_layer.html">ActivationLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00115">115</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="acc630e11a5baa28ad5723568a7a60109"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acc630e11a5baa28ad5723568a7a60109">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[2/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_addition_layer.html">AdditionLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00116">116</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a324e860c347972fce7a1c07531bed06e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a324e860c347972fce7a1c07531bed06e">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[3/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_arg_min_max_layer.html">ArgMinMaxLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00117">117</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a317945cbed8d24f155e43d976a355c14"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a317945cbed8d24f155e43d976a355c14">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[4/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_batch_mat_mul_layer.html">BatchMatMulLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00118">118</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="ae22db3ab5196edbb2e4e5244adc512e3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae22db3ab5196edbb2e4e5244adc512e3">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[5/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_batch_normalization_layer.html">BatchNormalizationLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00119">119</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a87ffe3fb58ec36989d343e53e23fb0f8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a87ffe3fb58ec36989d343e53e23fb0f8">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[6/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_batch_to_space_nd_layer.html">BatchToSpaceNdLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00120">120</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a9ba69ec15604eac568e20fb035109f9f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9ba69ec15604eac568e20fb035109f9f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[7/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_broadcast_to_layer.html">BroadcastToLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00121">121</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a0bce3e1a80419bc6966f60c8f2db9b92"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0bce3e1a80419bc6966f60c8f2db9b92">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[8/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_cast_layer.html">CastLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00122">122</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="af99801cff508d065bede5283a0ea1dc9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af99801cff508d065bede5283a0ea1dc9">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[9/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_channel_shuffle_layer.html">ChannelShuffleLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00123">123</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a43b8024cb70c07116be132ca28b12a21"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a43b8024cb70c07116be132ca28b12a21">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[10/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_comparison_layer.html">ComparisonLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00124">124</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a300c356944bb1e9d2dff6191d1c3501c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a300c356944bb1e9d2dff6191d1c3501c">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[11/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_concat_layer.html">ConcatLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00125">125</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a307007c2249288fe158bfdfaf9e1c413"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a307007c2249288fe158bfdfaf9e1c413">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[12/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_constant_layer.html">ConstantLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00126">126</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a4471d39d8390fc550c1f8688639e66f5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4471d39d8390fc550c1f8688639e66f5">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[13/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_convert_fp16_to_fp32_layer.html">ConvertFp16ToFp32Layer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00127">127</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="af8df06bed5f1257864645e45948afa5c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af8df06bed5f1257864645e45948afa5c">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[14/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_convert_fp32_to_fp16_layer.html">ConvertFp32ToFp16Layer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00128">128</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="ab2f52d0c728933e36f581a07676d9fe9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab2f52d0c728933e36f581a07676d9fe9">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[15/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_convolution2d_layer.html">Convolution2dLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00129">129</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a8aa8025b92a7d302536ab63c1f0ea99c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8aa8025b92a7d302536ab63c1f0ea99c">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[16/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_convolution3d_layer.html">Convolution3dLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00130">130</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="ad596268fcd03c87a4b6fde86f4732546"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad596268fcd03c87a4b6fde86f4732546">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[17/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_debug_layer.html">DebugLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00131">131</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a939154289f544a02baec0735b27b8894"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a939154289f544a02baec0735b27b8894">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[18/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_depth_to_space_layer.html">DepthToSpaceLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00132">132</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a26a46c27bca08b5bd26abba341f1d795"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a26a46c27bca08b5bd26abba341f1d795">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[19/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_depthwise_convolution2d_layer.html">DepthwiseConvolution2dLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00133">133</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a95e2d190d7483017b4f4841dd07776e5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a95e2d190d7483017b4f4841dd07776e5">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[20/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_dequantize_layer.html">DequantizeLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00134">134</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a22772d461066f995cd72d13066b0f46d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a22772d461066f995cd72d13066b0f46d">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[21/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_detection_post_process_layer.html">DetectionPostProcessLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00135">135</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a955b1001b8c57c60ce443a1e31468f20"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a955b1001b8c57c60ce443a1e31468f20">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[22/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_division_layer.html">DivisionLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00136">136</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="ad7acbd84f697a9838ae5a5e2163ecd5c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad7acbd84f697a9838ae5a5e2163ecd5c">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[23/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_elementwise_binary_layer.html">ElementwiseBinaryLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00137">137</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a72f7601d11f32c8d9ccb49a80fcf662a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a72f7601d11f32c8d9ccb49a80fcf662a">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[24/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_elementwise_unary_layer.html">ElementwiseUnaryLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00138">138</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a4acae0cdcdfab8e941af5c4e42e58cb3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4acae0cdcdfab8e941af5c4e42e58cb3">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[25/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_fake_quantization_layer.html">FakeQuantizationLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00139">139</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a12fdb9a7f3cb197316e3e67e036216dc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a12fdb9a7f3cb197316e3e67e036216dc">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[26/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_fill_layer.html">FillLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00140">140</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a575f5487e62465b6b9edbc447a26f32f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a575f5487e62465b6b9edbc447a26f32f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[27/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_floor_layer.html">FloorLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00141">141</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="aa689e4a3aa77e9d9e5851f566c5eb8b3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa689e4a3aa77e9d9e5851f566c5eb8b3">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[28/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_fully_connected_layer.html">FullyConnectedLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00142">142</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="ab374e7b6a3496df4932c96355ebccc48"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab374e7b6a3496df4932c96355ebccc48">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[29/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_fused_layer.html">FusedLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00143">143</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a548fb17a9bff172e751ae4bd3add62b5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a548fb17a9bff172e751ae4bd3add62b5">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[30/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_gather_layer.html">GatherLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00144">144</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="af786ed151cee66263c0ce890d11d15c9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af786ed151cee66263c0ce890d11d15c9">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[31/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_gather_nd_layer.html">GatherNdLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00145">145</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="adef1c8c63daa9d348a29e74eac33a054"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adef1c8c63daa9d348a29e74eac33a054">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[32/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_input_layer.html">InputLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00146">146</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a57bcf309be7adcc91001834979f87bde"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a57bcf309be7adcc91001834979f87bde">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[33/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_instance_normalization_layer.html">InstanceNormalizationLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00147">147</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a36f16b97bcb662caaa4eae24ea16cccf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a36f16b97bcb662caaa4eae24ea16cccf">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[34/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_l2_normalization_layer.html">L2NormalizationLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00148">148</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a78bb83e7a83c970a54ffe923386a79d0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a78bb83e7a83c970a54ffe923386a79d0">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[35/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_logical_binary_layer.html">LogicalBinaryLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00149">149</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="afb6f9bd4f43118749a0336074bed7b35"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afb6f9bd4f43118749a0336074bed7b35">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[36/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_log_softmax_layer.html">LogSoftmaxLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00150">150</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a0d08fb555c6d1cba705fd73b71797a28"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0d08fb555c6d1cba705fd73b71797a28">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[37/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_lstm_layer.html">LstmLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00151">151</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="ac2bd34e0328cda2e23ccb4c79fa72960"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac2bd34e0328cda2e23ccb4c79fa72960">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[38/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_map_layer.html">MapLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00152">152</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a6b231c8a547d4030d9a4a1618810c20b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6b231c8a547d4030d9a4a1618810c20b">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[39/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_maximum_layer.html">MaximumLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00153">153</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="af079ba32db74f53aba1ad19193cd2a4b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af079ba32db74f53aba1ad19193cd2a4b">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[40/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_mean_layer.html">MeanLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00154">154</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="aa17969606f64ea581c28431f2395e653"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa17969606f64ea581c28431f2395e653">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[41/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_mem_copy_layer.html">MemCopyLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00155">155</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a70f3d83f6d1e3918eab895c8083058fa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a70f3d83f6d1e3918eab895c8083058fa">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[42/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_mem_import_layer.html">MemImportLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00156">156</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a9e8199bdc39f928f694591a41d7aa0c0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9e8199bdc39f928f694591a41d7aa0c0">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[43/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_merge_layer.html">MergeLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00157">157</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="ad32a13408ace1c1fa520ed64a2cbe70f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad32a13408ace1c1fa520ed64a2cbe70f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[44/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_minimum_layer.html">MinimumLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00158">158</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a40f1546c0fa69f318eeab4b29cc64b70"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a40f1546c0fa69f318eeab4b29cc64b70">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[45/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_multiplication_layer.html">MultiplicationLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00159">159</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a140713619ee498a149854a5376b8d072"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a140713619ee498a149854a5376b8d072">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[46/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_normalization_layer.html">NormalizationLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00160">160</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a7a6e68f66d1d3819640b0f2d46a55fd1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7a6e68f66d1d3819640b0f2d46a55fd1">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[47/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_output_layer.html">OutputLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00161">161</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="ab6f1994db909dcc399cb1f8bc50c2d3d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab6f1994db909dcc399cb1f8bc50c2d3d">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[48/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_pad_layer.html">PadLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00162">162</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a1e6b17606926b8f69dbeda7f7ff1df95"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1e6b17606926b8f69dbeda7f7ff1df95">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[49/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_permute_layer.html">PermuteLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00163">163</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="ade84059b48b38da3a233bed287864c5b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ade84059b48b38da3a233bed287864c5b">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[50/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_pooling2d_layer.html">Pooling2dLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00164">164</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a5afa84427b91f83f2977382da7a9c62f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5afa84427b91f83f2977382da7a9c62f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[51/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_pooling3d_layer.html">Pooling3dLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00165">165</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a6e5eaa19ff232f11daa9a1c6caccf7fe"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6e5eaa19ff232f11daa9a1c6caccf7fe">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[52/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_pre_compiled_layer.html">PreCompiledLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00166">166</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a58a5defa35b12773a97760efadffef4f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a58a5defa35b12773a97760efadffef4f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[53/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_prelu_layer.html">PreluLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00167">167</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a1da1712abdf8eb56a3fd34d09a30f88a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1da1712abdf8eb56a3fd34d09a30f88a">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[54/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_q_lstm_layer.html">QLstmLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00169">169</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a31bcd6f755df954a4d7b020a09499105"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a31bcd6f755df954a4d7b020a09499105">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[55/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_quantized_lstm_layer.html">QuantizedLstmLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00170">170</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="aaaaf64c0888ab25bfae770bd4c2ec34b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaaaf64c0888ab25bfae770bd4c2ec34b">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[56/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_quantize_layer.html">QuantizeLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00168">168</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a0c5d6fb244a3e38da85257afb91edd80"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0c5d6fb244a3e38da85257afb91edd80">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[57/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_rank_layer.html">RankLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00171">171</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a2419883b22222c7bad914095ae3a9ad2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2419883b22222c7bad914095ae3a9ad2">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[58/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_reduce_layer.html">ReduceLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00172">172</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a6a17f58da2071720e3003a56a092aab3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6a17f58da2071720e3003a56a092aab3">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[59/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_reshape_layer.html">ReshapeLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00173">173</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="aafc370ea363f0565c3a8bced1e37c79e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aafc370ea363f0565c3a8bced1e37c79e">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[60/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_resize_layer.html">ResizeLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00174">174</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a1639ecc2e0bff9c12cab2649e638ca8d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1639ecc2e0bff9c12cab2649e638ca8d">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[61/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_reverse_v2_layer.html">ReverseV2Layer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00175">175</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a741fb176bd8e8bb9a8d3e87f35908f1f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a741fb176bd8e8bb9a8d3e87f35908f1f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[62/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_scatter_nd_layer.html">ScatterNdLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00176">176</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a914ed6d4cdc4525ff0020148d4c4155c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a914ed6d4cdc4525ff0020148d4c4155c">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[63/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_shape_layer.html">ShapeLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00177">177</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a3cbbb4e00618b072ace46751e660a295"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3cbbb4e00618b072ace46751e660a295">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[64/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_slice_layer.html">SliceLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00178">178</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="af6af4b51e08d3e811620811ab5e0cd2d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af6af4b51e08d3e811620811ab5e0cd2d">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[65/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_softmax_layer.html">SoftmaxLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00179">179</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="ac2d31ced5505a9d05287f5b71d25e34a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac2d31ced5505a9d05287f5b71d25e34a">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[66/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_space_to_batch_nd_layer.html">SpaceToBatchNdLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00180">180</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a81c31de4f532a95ab85ed6d999029332"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a81c31de4f532a95ab85ed6d999029332">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[67/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_space_to_depth_layer.html">SpaceToDepthLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00181">181</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a24d3abbfc1ed81df673452c7148aa0cc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a24d3abbfc1ed81df673452c7148aa0cc">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[68/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_splitter_layer.html">SplitterLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00182">182</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="ab676aab9119d1417764849099a099ecf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab676aab9119d1417764849099a099ecf">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[69/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_stack_layer.html">StackLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00183">183</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a1b5ff142f1d4420a8d83d9bcff1bfff4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1b5ff142f1d4420a8d83d9bcff1bfff4">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[70/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_stand_in_layer.html">StandInLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00184">184</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="ad640080ff4ea3e4f9ff05823e32ce15f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad640080ff4ea3e4f9ff05823e32ce15f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[71/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_strided_slice_layer.html">StridedSliceLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00185">185</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a9cc235c8c5e2ef3d2788cd558d676b0a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9cc235c8c5e2ef3d2788cd558d676b0a">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[72/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_subtraction_layer.html">SubtractionLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00186">186</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a110b9fdf7f17a1d065cd59ebc4bb76f7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a110b9fdf7f17a1d065cd59ebc4bb76f7">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[73/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_switch_layer.html">SwitchLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00187">187</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="ac4fb1513cf6f4f3f40ab3d6559ec4067"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac4fb1513cf6f4f3f40ab3d6559ec4067">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[74/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const T *&#160;</td>
<td class="paramname"> = <code>nullptr</code></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a43f91d371d2f0351b11595f24f81d8bf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a43f91d371d2f0351b11595f24f81d8bf">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[75/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tile_layer.html">TileLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00188">188</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a60af5a86cf0261d0bdf4312736ab4461"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a60af5a86cf0261d0bdf4312736ab4461">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[76/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_transpose_convolution2d_layer.html">TransposeConvolution2dLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00190">190</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="af44c8ebb1b55f4c42cc301d0bf030aa5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af44c8ebb1b55f4c42cc301d0bf030aa5">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[77/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_transpose_layer.html">TransposeLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00189">189</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a598dbe8e8dfddfede22b52ebd0d437cb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a598dbe8e8dfddfede22b52ebd0d437cb">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[78/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_unidirectional_sequence_lstm_layer.html">UnidirectionalSequenceLstmLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00191">191</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="aac367be4f6169b13d3a8a9250d2283d6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aac367be4f6169b13d3a8a9250d2283d6">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[79/79]</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.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_unmap_layer.html">UnmapLayer</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.html#l00192">192</a> of file <a class="el" href="_layers_fwd_8hpp_source.html">LayersFwd.hpp</a>.</p>
</div>
</div>
<a id="a71f2cc06b097cb5c4f0a1f48130a823b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a71f2cc06b097cb5c4f0a1f48130a823b">&#9670;&nbsp;</a></span>LevelToString()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::string armnn::LevelToString </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a>&#160;</td>
<td class="paramname"><em>level</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_logging_8hpp_source.html#l00022">22</a> of file <a class="el" href="_logging_8hpp_source.html">Logging.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">switch</span>(level)</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; {</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">case</span> LogSeverity::Trace:</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Trace&quot;</span>;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a181ecb133401da6ff2916c192ca04d48">LogSeverity::Debug</a>:</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Debug&quot;</span>;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">case</span> LogSeverity::Info:</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Info&quot;</span>;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">case</span> LogSeverity::Warning:</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Warning&quot;</span>;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">case</span> LogSeverity::Error:</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Error&quot;</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">case</span> LogSeverity::Fatal:</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Fatal&quot;</span>;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Log&quot;</span>;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3daa603905470e2a5b8c13e96b579ef0dba">Debug</a>, <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">Error</a>, <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4">Fatal</a>, <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">Info</a>, <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">Trace</a>, and <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">Warning</a>.</p>
<p class="reference">Referenced by <a class="el" href="_logging_8hpp_source.html#l00102">ScopedRecord::ScopedRecord()</a>.</p>
</div>
</div>
<a id="ac52e04c0e349e25bcdaa72c27395ef8f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac52e04c0e349e25bcdaa72c27395ef8f">&#9670;&nbsp;</a></span>LogSoftmax()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LogSoftmax </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#ac14705405cbcdd580df613de6766fe65">LogSoftmaxDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_log_softmax_8cpp_source.html#l00027">27</a> of file <a class="el" href="_log_softmax_8cpp_source.html">LogSoftmax.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDimensions = inputInfo.GetNumDimensions();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(ValidateAxis(descriptor.m_Axis, numDimensions),</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="stringliteral">&quot;Axis index is not in range [-numDimensions, numDimensions).&quot;</span>);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> uAxis = descriptor.m_Axis &lt; 0 ?</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; numDimensions - armnn::numeric_cast&lt;unsigned int&gt;(std::abs(descriptor.m_Axis)) :</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="namespacearmnn.html">armnn</a>::<a class="code" href="namespacearmnn.html#a375ca3cff9f1b005d1412dc5f3cf5b6e">numeric_cast</a>&lt;unsigned int&gt;(descriptor.m_Axis);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">const</span> TensorShape&amp; inputShape = inputInfo.GetShape();</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outerSize = <a class="code" href="namespacearmnn_utils.html#af57864f5e03358d14c2988edae912b8b">armnnUtils::GetNumElementsBetween</a>(inputShape, 0, uAxis);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axisSize = inputShape[uAxis];</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> innerSize = <a class="code" href="namespacearmnn_utils.html#af57864f5e03358d14c2988edae912b8b">armnnUtils::GetNumElementsBetween</a>(inputShape,</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; uAxis + 1,</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; inputShape.GetNumDimensions());</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outer = 0; outer &lt; outerSize; ++outer)</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inner = 0; inner &lt; innerSize; ++inner)</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="comment">// Find max</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; input[outer * axisSize * innerSize + inner];</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordtype">float</span> maxValue = input.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1u; i &lt; axisSize; ++i)</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; {</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; input[(outer * axisSize + i) * innerSize + inner];</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; maxValue = std::max(maxValue, input.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>());</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="comment">// Compute sum</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">float</span> sum = 0.0f;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i &lt; axisSize; ++i)</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; input[(outer * axisSize + i) * innerSize + inner];</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; sum += std::exp((input.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>() - maxValue) * descriptor.m_Beta);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// Compute log sum</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> logSum = std::log(sum);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">// Compute result</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i &lt; axisSize; ++i)</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; {</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="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="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; input [index];</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; output[index];</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; </div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>((input.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>() - maxValue) * descriptor.m_Beta - logSum);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>, <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8cpp_source.html#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_utils_8cpp_source.html#l00209">armnnUtils::GetNumElementsBetween()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_descriptors_8hpp_source.html#l00192">SoftmaxDescriptor::m_Axis</a>, <a class="el" href="_descriptors_8hpp_source.html#l00190">SoftmaxDescriptor::m_Beta</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="a952423703fa6b92f18d19df3995633b4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a952423703fa6b92f18d19df3995633b4">&#9670;&nbsp;</a></span>LstmImpl()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LstmImpl </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_descriptor.html">LstmDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>inputToOutputWeightsShape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>recurrentToOutputWeightsShape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>outputStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>cellStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>outputStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>cellStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>cellStateOutDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>outputDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>inputToInputWeightsTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>inputToForgetWeightsTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>inputToCellWeightsTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>inputToOutputWeightsTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>recurrentToInputWeightsTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>recurrentToForgetWeightsTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>recurrentToCellWeightsTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>recurrentToOutputWeightsTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>cellToInputWeightsTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>cellToForgetWeightsTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>cellToOutputWeightsTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>inputGateBiasTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>forgetGateBiasTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>cellBiasTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>outputGateBiasTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>projectionWeightsTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>projectionBiasTensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>inputLayerNormWeights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>forgetLayerNormWeights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>cellLayerNormWeights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>outputLayerNormWeights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>inputGateScratch</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>cellScratch</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>forgetGateScratch</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>outputGateScratch</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>inputGateScratchDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>cellScratchDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>forgetGateScratchDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>outputGateScratchDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>layerNormEpsilon</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_lstm_8cpp_source.html#l00013">13</a> of file <a class="el" href="_lstm_8cpp_source.html">Lstm.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;{</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="comment">// This is a porting of the LSTM::Eval() method in the Android code base</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">// Refer to: android/frameworks/ml/nn/common/operations/LSTM.cpp</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">const</span> TensorShape&amp; inputShape = inputInfo.GetShape();</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&amp; outputType = outputInfo.GetDataType();</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">const</span> uint32_t nBatch = inputShape[0];</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">const</span> uint32_t nInput = inputShape[1];</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">const</span> uint32_t nCell = inputToOutputWeightsShape[0];</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">const</span> uint32_t nOutput = recurrentToOutputWeightsShape[1];</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> useCifg = descriptor.m_CifgEnabled;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> usePeephole = descriptor.m_PeepholeEnabled;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> useLayerNorm = descriptor.m_LayerNormEnabled;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">if</span> (!useLayerNorm)</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; {</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// Initialize scratch buffers with bias.</span></div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">if</span> (!useCifg)</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a8c4a96233c9b62c76d611316da11124b">VectorBatchVectorAssign</a>(*inputGateBiasTensor,</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; nCell, nBatch, *inputGateScratch);</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a8c4a96233c9b62c76d611316da11124b">VectorBatchVectorAssign</a>(*forgetGateBiasTensor,</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; nCell, nBatch, *forgetGateScratch);</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a8c4a96233c9b62c76d611316da11124b">VectorBatchVectorAssign</a>(*cellBiasTensor,</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; nCell, nBatch, *cellScratch);</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a8c4a96233c9b62c76d611316da11124b">VectorBatchVectorAssign</a>(*outputGateBiasTensor,</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; nCell, nBatch, *outputGateScratch);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">// Initialize scratch buffers with zeroes.</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">if</span> (!useCifg)</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a4c20bc573b70e89327b334f924da97b5">ZeroVector</a>(*inputGateScratch, nCell * nBatch);</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a4c20bc573b70e89327b334f924da97b5">ZeroVector</a>(*forgetGateScratch, nCell * nBatch);</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a4c20bc573b70e89327b334f924da97b5">ZeroVector</a>(*cellScratch , nCell * nBatch);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a4c20bc573b70e89327b334f924da97b5">ZeroVector</a>(*outputGateScratch, nCell * nBatch);</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// For each batch and cell: compute input_weight * input.</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (!useCifg)</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; {</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*inputToInputWeightsTensor,</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; nCell, nInput, *inputData, nBatch, *inputGateScratch);</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*inputToForgetWeightsTensor,</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; nCell, nInput, *inputData, nBatch, *forgetGateScratch);</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*inputToCellWeightsTensor,</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; nCell, nInput, *inputData, nBatch, *cellScratch);</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*inputToOutputWeightsTensor,</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; nCell, nInput, *inputData, nBatch, *outputGateScratch);</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="comment">// For each batch and cell: compute recurrent_weight * output_state.</span></div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">if</span> (!useCifg)</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; {</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*recurrentToInputWeightsTensor,</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; nCell, nOutput, *outputStateIn, nBatch, *inputGateScratch);</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; }</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*recurrentToForgetWeightsTensor,</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; nCell, nOutput, *outputStateIn, nBatch, *forgetGateScratch);</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*recurrentToCellWeightsTensor,</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; nCell, nOutput, *outputStateIn, nBatch, *cellScratch);</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*recurrentToOutputWeightsTensor,</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; nCell, nOutput, *outputStateIn, nBatch, *outputGateScratch);</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">// For each batch and cell: update input gate.</span></div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">if</span> (!useCifg)</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; {</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">if</span> (usePeephole)</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a796323e16216b880043dc5ebbaa2372b">VectorBatchVectorCwiseProductAccumulate</a>(*cellToInputWeightsTensor,</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; nCell, *cellStateIn, nBatch, *inputGateScratch);</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; }</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">if</span> (useLayerNorm)</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; {</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a0ed27dd6d6125a06bf654080f4184360">MeanStddevNormalization</a>(*inputGateScratchDecoder,</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; *inputGateScratch, nCell, nBatch, layerNormEpsilon);</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a1d7ad9698b02282a57fdb17b3af745f9">VectorBatchVectorCwiseProduct</a>(*inputLayerNormWeights,</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; nCell, *inputGateScratchDecoder, nBatch, *inputGateScratch);</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a389c4bbafd0fff7060cbb183f20a2134">VectorBatchVectorAdd</a>(*inputGateBiasTensor,</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; nCell, *inputGateScratchDecoder, nBatch, *inputGateScratch);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="namespacearmnn.html#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*inputGateScratchDecoder, *inputGateScratch,</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; TensorInfo({nCell, nBatch}, outputType),</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; ActivationFunction::Sigmoid, 0, 0);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="comment">// For each batch and cell: update forget gate.</span></div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">if</span> (usePeephole)</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; {</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a796323e16216b880043dc5ebbaa2372b">VectorBatchVectorCwiseProductAccumulate</a>(*cellToForgetWeightsTensor, nCell,</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; *cellStateIn, nBatch, *forgetGateScratch);</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">if</span> (useLayerNorm)</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a0ed27dd6d6125a06bf654080f4184360">MeanStddevNormalization</a>(*forgetGateScratchDecoder,</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; *forgetGateScratch, nCell, nBatch, layerNormEpsilon);</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a1d7ad9698b02282a57fdb17b3af745f9">VectorBatchVectorCwiseProduct</a>(*forgetLayerNormWeights,</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; nCell, *forgetGateScratchDecoder, nBatch, *forgetGateScratch);</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a389c4bbafd0fff7060cbb183f20a2134">VectorBatchVectorAdd</a>(*forgetGateBiasTensor,</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; nCell, *forgetGateScratchDecoder, nBatch, *forgetGateScratch);</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="namespacearmnn.html#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*forgetGateScratchDecoder, *forgetGateScratch,</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; TensorInfo({nCell, nBatch}, outputType),</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; ActivationFunction::Sigmoid, 0, 0);</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; </div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="comment">// For each batch and cell: update the cell.</span></div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">if</span> (useLayerNorm)</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; {</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a0ed27dd6d6125a06bf654080f4184360">MeanStddevNormalization</a>(*cellScratchDecoder,</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; *cellScratch, nCell, nBatch, layerNormEpsilon);</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a1d7ad9698b02282a57fdb17b3af745f9">VectorBatchVectorCwiseProduct</a>(*cellLayerNormWeights,</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; nCell, *cellScratchDecoder, nBatch, *cellScratch);</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a389c4bbafd0fff7060cbb183f20a2134">VectorBatchVectorAdd</a>(*cellBiasTensor,</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; nCell, *cellScratchDecoder, nBatch, *cellScratch);</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; }</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; </div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a5b81dc0a1a9a2bccab8bb79dfa3e77b7">VectorVectorCwiseProduct</a>(*forgetGateScratchDecoder, *cellStateIn, nBatch * nCell, *cellStateOut);</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; </div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a> armnnActivationFunc = ActivationFunction::Sigmoid;</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordtype">float</span> a = 0;</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordtype">float</span> b = 0;</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#afc83b9418e9721cee21de245cb8533de">SetActivationParameters</a>(descriptor.m_ActivationFunc, armnnActivationFunc, a, b);</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; </div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ActivationFunc &gt; 0)</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="namespacearmnn.html#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*cellScratchDecoder, *cellScratch,</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; TensorInfo({nCell, nBatch}, outputType),</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; armnnActivationFunc, a, b);</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">if</span> (useCifg)</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; {</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#aca7bd1dff180b6a5de894537f8220793">Sub1Vector</a>(*forgetGateScratchDecoder, nBatch * nCell, *forgetGateScratch);</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a2e653f948d93f4177f267a7b1b4ed47d">VectorVectorCwiseProductAccumulate</a>(</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; *cellScratchDecoder, *forgetGateScratchDecoder, nBatch * nCell, *cellStateOut);</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; {</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a2e653f948d93f4177f267a7b1b4ed47d">VectorVectorCwiseProductAccumulate</a>(</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; *cellScratchDecoder, *inputGateScratchDecoder, nBatch * nCell, *cellStateOut);</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ClippingThresCell &gt; 0.0)</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; {</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a117781e8e9b7321722bbdd8ff74b484a">ClipVector</a>(*cellStateOutDecoder, nBatch * nCell, descriptor.m_ClippingThresCell, *cellStateOut);</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; </div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="comment">// For each batch and cell: update the output gate.</span></div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">if</span> (usePeephole)</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; {</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a796323e16216b880043dc5ebbaa2372b">VectorBatchVectorCwiseProductAccumulate</a>(*cellToOutputWeightsTensor,</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; nCell, *cellStateOutDecoder, nBatch, *outputGateScratch);</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (useLayerNorm)</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; {</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a0ed27dd6d6125a06bf654080f4184360">MeanStddevNormalization</a>(*outputGateScratchDecoder,</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; *outputGateScratch, nCell, nBatch, layerNormEpsilon);</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a1d7ad9698b02282a57fdb17b3af745f9">VectorBatchVectorCwiseProduct</a>(*outputLayerNormWeights,</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; nCell, *outputGateScratchDecoder, nBatch, *outputGateScratch);</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a389c4bbafd0fff7060cbb183f20a2134">VectorBatchVectorAdd</a>(*outputGateBiasTensor,</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; nCell, *outputGateScratchDecoder, nBatch, *outputGateScratch);</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <a class="code" href="namespacearmnn.html#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*outputGateScratchDecoder, *outputGateScratch,</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; TensorInfo({nCell, nBatch}, outputType),</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; ActivationFunction::Sigmoid, 0, 0);</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; </div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ActivationFunc &gt; 0)</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; {</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="namespacearmnn.html#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*cellStateOutDecoder, *cellScratch,</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; TensorInfo({nCell, nBatch}, outputType),</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; armnnActivationFunc, a, b);</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; </div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a5b81dc0a1a9a2bccab8bb79dfa3e77b7">VectorVectorCwiseProduct</a>(*outputGateScratchDecoder, *cellScratchDecoder, nBatch * nCell, *outputGateScratch);</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; </div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// For each batch: update the projection and output_state.</span></div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; {</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span> (projectionBiasTensor)</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; {</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a8c4a96233c9b62c76d611316da11124b">VectorBatchVectorAssign</a>(*projectionBiasTensor,</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; nOutput, nBatch, *output);</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*projectionWeightsTensor,</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; nOutput, nCell, *outputGateScratchDecoder, nBatch, *output);</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; </div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ClippingThresProj &gt; 0.0)</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; {</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a117781e8e9b7321722bbdd8ff74b484a">ClipVector</a>(*outputDecoder, nBatch * nOutput, descriptor.m_ClippingThresProj, *output);</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; {</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a00d8a623c04f1120f6fee3fe38d1cee9">CopyVector</a>(*outputGateScratchDecoder, nBatch * nOutput, *output);</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; }</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; </div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <a class="code" href="_lstm_utils_8cpp.html#a00d8a623c04f1120f6fee3fe38d1cee9">CopyVector</a>(*outputDecoder, nBatch * nOutput, *outputStateOut);</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_activation_8cpp_source.html#l00013">Activation()</a>, <a class="el" href="_lstm_utils_8cpp_source.html#l00229">ClipVector()</a>, <a class="el" href="_lstm_utils_8cpp_source.html#l00244">CopyVector()</a>, <a class="el" href="_tensor_8hpp_source.html#l00200">TensorInfo::GetDataType()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_descriptors_8hpp_source.html#l01140">LstmDescriptor::m_ActivationFunc</a>, <a class="el" href="_descriptors_8hpp_source.html#l01146">LstmDescriptor::m_CifgEnabled</a>, <a class="el" href="_descriptors_8hpp_source.html#l01142">LstmDescriptor::m_ClippingThresCell</a>, <a class="el" href="_descriptors_8hpp_source.html#l01144">LstmDescriptor::m_ClippingThresProj</a>, <a class="el" href="_descriptors_8hpp_source.html#l01152">LstmDescriptor::m_LayerNormEnabled</a>, <a class="el" href="_descriptors_8hpp_source.html#l01148">LstmDescriptor::m_PeepholeEnabled</a>, <a class="el" href="_descriptors_8hpp_source.html#l01150">LstmDescriptor::m_ProjectionEnabled</a>, <a class="el" href="_lstm_utils_8cpp_source.html#l00087">MatrixBatchVectorMultiplyAccumulate()</a>, <a class="el" href="_lstm_utils_8cpp_source.html#l00040">MeanStddevNormalization()</a>, <a class="el" href="_lstm_utils_8cpp_source.html#l00258">SetActivationParameters()</a>, <a class="el" href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">Sigmoid</a>, <a class="el" href="_lstm_utils_8cpp_source.html#l00173">Sub1Vector()</a>, <a class="el" href="_lstm_utils_8cpp_source.html#l00016">VectorBatchVectorAdd()</a>, <a class="el" href="_lstm_utils_8cpp_source.html#l00113">VectorBatchVectorAssign()</a>, <a class="el" href="_lstm_utils_8cpp_source.html#l00152">VectorBatchVectorCwiseProduct()</a>, <a class="el" href="_lstm_utils_8cpp_source.html#l00131">VectorBatchVectorCwiseProductAccumulate()</a>, <a class="el" href="_lstm_utils_8cpp_source.html#l00187">VectorVectorCwiseProduct()</a>, <a class="el" href="_lstm_utils_8cpp_source.html#l00204">VectorVectorCwiseProductAccumulate()</a>, and <a class="el" href="_lstm_utils_8cpp_source.html#l00076">ZeroVector()</a>.</p>
</div>
</div>
<a id="a8cb12db00d6e4ab4ac5ccfa6e7a69374"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8cb12db00d6e4ab4ac5ccfa6e7a69374">&#9670;&nbsp;</a></span>MakeDecoder() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; int32_t &gt; &gt; MakeDecoder </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_decoders_8hpp_source.html#l00064">64</a> of file <a class="el" href="_decoders_8hpp_source.html">Decoders.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;{</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">switch</span>(<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QASymmS8Decoder&gt;(</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>int8_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QASymm8Decoder&gt;(</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16:</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm16Decoder&gt;(</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>int16_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">case</span> DataType::Float16:</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; {</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Float16Decoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">Half</a>*<span class="keyword">&gt;</span>(data));</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; {</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Float32Decoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">float</span>*<span class="keyword">&gt;</span>(data));</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">return</span> MakeSigned32Decoder(info, data);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; {</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.HasPerAxisQuantization())</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; std::pair&lt;unsigned int, std::vector&lt;float&gt;&gt; params = <a class="code" href="namespacearmnn_utils.html#a1826e433f7e6817976a8175b4ef8296c">armnnUtils::GetPerAxisParams</a>(info);</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm8PerAxisDecoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span>int8_t*<span class="keyword">&gt;</span>(data), info);</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymmS8Decoder&gt;(</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>int8_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a>:</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;BooleanDecoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(data));</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported target Data Type!&quot;</span>);</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; }</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_tensor_utils_8cpp_source.html#l00280">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, and <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>.</p>
</div>
</div>
<a id="a1545cb162c5a64d75d9c0c05e8ea387c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1545cb162c5a64d75d9c0c05e8ea387c">&#9670;&nbsp;</a></span>MakeDecoder() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt;T&gt; &gt; armnn::MakeDecoder </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>data</em> = <code>nullptr</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_decoders_8hpp_source.html#l00064">64</a> of file <a class="el" href="_decoders_8hpp_source.html">Decoders.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;{</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">switch</span>(<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QASymmS8Decoder&gt;(</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>int8_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QASymm8Decoder&gt;(</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16:</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm16Decoder&gt;(</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>int16_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">case</span> DataType::Float16:</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; {</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Float16Decoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">Half</a>*<span class="keyword">&gt;</span>(data));</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; {</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Float32Decoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">float</span>*<span class="keyword">&gt;</span>(data));</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">return</span> MakeSigned32Decoder(info, data);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; {</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.HasPerAxisQuantization())</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; std::pair&lt;unsigned int, std::vector&lt;float&gt;&gt; params = <a class="code" href="namespacearmnn_utils.html#a1826e433f7e6817976a8175b4ef8296c">armnnUtils::GetPerAxisParams</a>(info);</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm8PerAxisDecoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span>int8_t*<span class="keyword">&gt;</span>(data), info);</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymmS8Decoder&gt;(</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>int8_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a>:</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;BooleanDecoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(data));</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported target Data Type!&quot;</span>);</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; }</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_tensor_utils_8cpp_source.html#l00280">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, and <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>.</p>
</div>
</div>
<a id="a01cdb4291025316036201d689811255f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a01cdb4291025316036201d689811255f">&#9670;&nbsp;</a></span>MakeEncoder() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; int32_t &gt; &gt; MakeEncoder </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_encoders_8hpp_source.html#l00019">19</a> of file <a class="el" href="_encoders_8hpp_source.html">Encoders.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordflow">switch</span>(<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; {</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a>:</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QASymmS8Encoder&gt;(</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">static_cast&lt;</span>int8_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; }</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>:</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QASymm8Encoder&gt;(</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">static_cast&lt;</span>uint8_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.HasPerAxisQuantization())</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; std::pair&lt;unsigned int, std::vector&lt;float&gt;&gt; params = <a class="code" href="namespacearmnn_utils.html#a1826e433f7e6817976a8175b4ef8296c">armnnUtils::GetPerAxisParams</a>(info);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm8PerAxisEncoder&gt;(</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">static_cast&lt;</span>int8_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; params.second,</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; params.first);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymmS8Encoder&gt;(</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">static_cast&lt;</span>int8_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a>:</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; {</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.HasPerAxisQuantization())</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; {</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axis = <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationDim().value();</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">auto</span> axisDimensionality = <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetShape()[axis];</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; std::pair&lt;unsigned int, std::vector&lt;float&gt;&gt; params = <a class="code" href="namespacearmnn_utils.html#a1826e433f7e6817976a8175b4ef8296c">armnnUtils::GetPerAxisParams</a>(info);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm16PerAxisEncoder&gt;(</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">static_cast&lt;</span>int16_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; params.second,</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; params.first,</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; axisDimensionality);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm16Encoder&gt;(</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">static_cast&lt;</span>int16_t *<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a>:</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Int32Encoder&gt;(<span class="keyword">static_cast&lt;</span>int32_t*<span class="keyword">&gt;</span>(data));</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>:</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; {</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Float16Encoder&gt;(<span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">Half</a>*<span class="keyword">&gt;</span>(data));</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>:</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Float32Encoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span>*<span class="keyword">&gt;</span>(data));</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported target Data Type!&quot;</span>);</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; }</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_tensor_utils_8cpp_source.html#l00280">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, and <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>.</p>
</div>
</div>
<a id="a56867cc5245724ab56953604b1eec9ee"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a56867cc5245724ab56953604b1eec9ee">&#9670;&nbsp;</a></span>MakeEncoder() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt;T&gt; &gt; armnn::MakeEncoder </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>data</em> = <code>nullptr</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_encoders_8hpp_source.html#l00019">19</a> of file <a class="el" href="_encoders_8hpp_source.html">Encoders.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordflow">switch</span>(<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; {</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a>:</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QASymmS8Encoder&gt;(</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">static_cast&lt;</span>int8_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; }</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>:</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QASymm8Encoder&gt;(</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">static_cast&lt;</span>uint8_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.HasPerAxisQuantization())</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; std::pair&lt;unsigned int, std::vector&lt;float&gt;&gt; params = <a class="code" href="namespacearmnn_utils.html#a1826e433f7e6817976a8175b4ef8296c">armnnUtils::GetPerAxisParams</a>(info);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm8PerAxisEncoder&gt;(</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">static_cast&lt;</span>int8_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; params.second,</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; params.first);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymmS8Encoder&gt;(</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">static_cast&lt;</span>int8_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a>:</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; {</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.HasPerAxisQuantization())</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; {</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axis = <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationDim().value();</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">auto</span> axisDimensionality = <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetShape()[axis];</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; std::pair&lt;unsigned int, std::vector&lt;float&gt;&gt; params = <a class="code" href="namespacearmnn_utils.html#a1826e433f7e6817976a8175b4ef8296c">armnnUtils::GetPerAxisParams</a>(info);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm16PerAxisEncoder&gt;(</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">static_cast&lt;</span>int16_t*<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; params.second,</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; params.first,</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; axisDimensionality);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm16Encoder&gt;(</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">static_cast&lt;</span>int16_t *<span class="keyword">&gt;</span>(data),</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a>:</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Int32Encoder&gt;(<span class="keyword">static_cast&lt;</span>int32_t*<span class="keyword">&gt;</span>(data));</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>:</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; {</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Float16Encoder&gt;(<span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">Half</a>*<span class="keyword">&gt;</span>(data));</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>:</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Float32Encoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span>*<span class="keyword">&gt;</span>(data));</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported target Data Type!&quot;</span>);</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; }</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_tensor_utils_8cpp_source.html#l00280">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, and <a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>.</p>
</div>
</div>
<a id="a35d5394615a3062b629db056d414ae4f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a35d5394615a3062b629db056d414ae4f">&#9670;&nbsp;</a></span>MakeInfo()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::DetectionPostProcessLayerInfo armnn::MakeInfo </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_detection_post_process_descriptor.html">DetectionPostProcessDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_detection_post_process_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_neon_detection_post_process_workload_8cpp_source.html">NeonDetectionPostProcessWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keywordflow">return</span> arm_compute::DetectionPostProcessLayerInfo(descriptor.m_MaxDetections,</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; descriptor.m_MaxClassesPerDetection,</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; descriptor.m_NmsScoreThreshold,</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; descriptor.m_NmsIouThreshold,</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; descriptor.m_NumClasses,</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; { descriptor.m_ScaleX,</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; descriptor.m_ScaleY,</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; descriptor.m_ScaleW,</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; descriptor.m_ScaleH },</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; descriptor.m_UseRegularNms,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; descriptor.m_DetectionsPerClass);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.html#l00749">DetectionPostProcessDescriptor::m_DetectionsPerClass</a>, <a class="el" href="_descriptors_8hpp_source.html#l00747">DetectionPostProcessDescriptor::m_MaxClassesPerDetection</a>, <a class="el" href="_descriptors_8hpp_source.html#l00745">DetectionPostProcessDescriptor::m_MaxDetections</a>, <a class="el" href="_descriptors_8hpp_source.html#l00753">DetectionPostProcessDescriptor::m_NmsIouThreshold</a>, <a class="el" href="_descriptors_8hpp_source.html#l00751">DetectionPostProcessDescriptor::m_NmsScoreThreshold</a>, <a class="el" href="_descriptors_8hpp_source.html#l00755">DetectionPostProcessDescriptor::m_NumClasses</a>, and <a class="el" href="_descriptors_8hpp_source.html#l00757">DetectionPostProcessDescriptor::m_UseRegularNms</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_detection_post_process_workload_8cpp_source.html#l00032">NeonDetectionPostProcessValidate()</a>.</p>
</div>
</div>
<a id="aa7427025a851113a492de0b68b23d22a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa7427025a851113a492de0b68b23d22a">&#9670;&nbsp;</a></span>MakeOptimizations()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_optimizer.html#ad1794808004025d6e06c176507197b24">Optimizer::Optimizations</a> armnn::MakeOptimizations </td>
<td>(</td>
<td class="paramtype">Args &amp;&amp;...&#160;</td>
<td class="paramname"><em>args</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_optimizer_8hpp_source.html#l00043">43</a> of file <a class="el" href="_optimizer_8hpp_source.html">Optimizer.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; Optimizer::Optimizations optimizations;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <a class="code" href="namespacearmnn.html#a0c8a28b71e49c04596289ff281e58f1a">Append</a>(optimizations, std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> optimizations;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_optimizer_8hpp_source.html#l00030">Append()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01320">ApplyBackendOptimizations()</a>, and <a class="el" href="_network_8cpp_source.html#l01906">Optimize()</a>.</p>
</div>
</div>
<a id="a77780137c47f528921f6537447060f05"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a77780137c47f528921f6537447060f05">&#9670;&nbsp;</a></span>MakeOptional()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt;T&gt; armnn::MakeOptional </td>
<td>(</td>
<td class="paramtype">Args &amp;&amp;...&#160;</td>
<td class="paramname"><em>args</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Utility template that constructs an object of type T in-place and wraps it inside an Optional&lt;T&gt; object. </p>
<p class="definition">Definition at line <a class="el" href="_optional_8hpp_source.html#l00305">305</a> of file <a class="el" href="_optional_8hpp_source.html">Optional.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;{</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">return</span> Optional&lt;T&gt;(<a class="code" href="_optional_8hpp.html#acbec11f88a308826fa811f370d363a4a">CONSTRUCT_IN_PLACE</a>, std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_optional_8hpp_source.html#l00041">CONSTRUCT_IN_PLACE</a>.</p>
</div>
</div>
<a id="a2cf1ea7140f419eba6d60d01dd0a795a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2cf1ea7140f419eba6d60d01dd0a795a">&#9670;&nbsp;</a></span>MakeTransformIterator()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="classarmnn_1_1_transform_iterator.html">TransformIterator</a>&lt;Function, Iterator&gt; armnn::MakeTransformIterator </td>
<td>(</td>
<td class="paramtype">Iterator&#160;</td>
<td class="paramname"><em>i</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Function&#160;</td>
<td class="paramname"><em>f</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</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.html#l00090">90</a> of file <a class="el" href="_transform_iterator_8hpp_source.html">TransformIterator.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;{</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">return</span> TransformIterator&lt;Function, Iterator&gt;(i, f);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a4e3efb65a77cf35dc5dc09e4f3646029"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4e3efb65a77cf35dc5dc09e4f3646029">&#9670;&nbsp;</a></span>MirrorPad()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void MirrorPad </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *&#160;</td>
<td class="paramname"><em>inputHandle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *&#160;</td>
<td class="paramname"><em>outputHandle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_pad_queue_descriptor.html">PadQueueDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_mirror_pad_8cpp_source.html#l00059">59</a> of file <a class="el" href="_mirror_pad_8cpp_source.html">MirrorPad.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;{</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">auto</span> padList = data.m_Parameters.m_PadList;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91">PaddingMode</a> paddingMode = data.m_Parameters.m_PaddingMode;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; TensorShape outputShape = outputInfo.GetShape();</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; TensorShape inputShape = inputInfo.GetShape();</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputElements = outputInfo.GetNumElements();</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputDimensions = inputShape.GetNumDimensions();</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; assert(numInputDimensions == outputShape.GetNumDimensions());</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// If padding mode is Reflect then both paddings must be no greater than inputShape(i) - 1.</span></div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="comment">// If padding mode is Symmetric then both paddings must be no greater than inputShape(i).</span></div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> isReflect = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(paddingMode == PaddingMode::Reflect);</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; padList.size(); ++i)</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">if</span>(padList.at(i).first &gt; (inputShape[i] - isReflect) ||</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; padList.at(i).second &gt; (inputShape[i] - isReflect))</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Paddings must be less (Reflect) or &quot;</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="stringliteral">&quot;equal (Symmetric) to the dimension size.&quot;</span>);</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; </div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">auto</span> inputData = MakeDecoder&lt;float&gt;(inputInfo, inputHandle-&gt;Map());</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">auto</span> outData = MakeEncoder&lt;float&gt;(outputInfo, outputHandle-&gt;Map());</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; Decoder&lt;float&gt;&amp; input = *inputData;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; Encoder&lt;float&gt;&amp; output = *outData;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; </div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx &lt; numOutputElements; ++idx)</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// Get the coordinates of the current index in vector form. E.g inx 1 = [0, 0, 0, 1 ]</span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keyword">const</span> std::vector&lt;unsigned int&gt; coord = IndexToCoord(outputShape, idx);</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; </div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; std::vector&lt;unsigned int&gt; dimensions;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; std::vector&lt;unsigned int&gt; coords;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; </div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numInputDimensions; ++i)</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; {</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; dimensions.emplace_back(i);</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; coords.emplace_back(coord[i]);</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; }</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keyword">auto</span> isInPadding = [&amp;](<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i)</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> (coords[i] &lt; padList[i].first || coords[i] &gt; inputShape[i] + padList[i].first - 1);</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; };</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">auto</span> getReflectIndex = [&amp;](<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i) -&gt; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span></div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; {</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">if</span>(isInPadding(i))</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; {</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">if</span>(coords[i] &lt; padList[i].first)</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">return</span> padList[i].first - coords[i];</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; {</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">return</span> 2 * inputShape[i] + padList[i].first - 2 - coords[i];</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; }</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">return</span> coords[i] - padList[i].first;</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; };</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; </div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keyword">auto</span> getSymmetricIndex = [&amp;](<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i) -&gt; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span></div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">if</span>(isInPadding(i))</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; {</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">if</span>(coords[i] &lt; padList[i].first)</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; {</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">return</span> padList[i].first - coords[i] - 1;</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; {</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">return</span> 2 * inputShape[i] + padList[i].first - 1 - coords[i];</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">return</span> coords[i] - padList[i].first;</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; };</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">// Location of the value in the input tensor to use in the output.</span></div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; std::vector&lt;unsigned int&gt; coordOfInput;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="comment">// any_of works as a loop here to check if any of the dimensions are in the padding.</span></div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// If dimensions is in the padding area, then create the coordinates of the location in the</span></div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="comment">// input tensor to use in the output.</span></div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="comment">// E.g.</span></div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// Input tensor = [ 1, 2, 3 ], Rank = 1.</span></div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="comment">// Output tensor = [ 2, 1, 2, 3, 1 ] if Reflect or [ 1, 1, 2, 3, 3 ] if Symmetric with a padding of (1, 1).</span></div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">// So it will either return [ 1 ] or [ 0 ] which is used to set the first value in the output tensor and so on.</span></div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">if</span>(std::any_of(dimensions.begin(), dimensions.end(), isInPadding))</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">switch</span>(paddingMode)</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">case</span> PaddingMode::Reflect:</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; {</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numInputDimensions; ++i)</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; {</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; coordOfInput.emplace_back(getReflectIndex(i));</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; }</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">case</span> PaddingMode::Symmetric:</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; {</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numInputDimensions; ++i)</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; {</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; coordOfInput.emplace_back(getSymmetricIndex(i));</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Padding mode not supported.&quot;</span>);</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numInputDimensions; ++i)</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; coordOfInput.emplace_back(coord[i] - padList[i].first);</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; }</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; </div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="comment">// Set output value using the coordinate of the input value to use.</span></div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexOfInput = CoordToIndex(inputShape, coordOfInput);</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; </div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; input[indexOfInput];</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keyword">auto</span> inputValue = input.Get();</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; </div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; output[idx];</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; output.Set(inputValue);</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8cpp_source.html#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00198">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_descriptors_8hpp_source.html#l01224">PadDescriptor::m_PaddingMode</a>, <a class="el" href="_descriptors_8hpp_source.html#l01218">PadDescriptor::m_PadList</a>, <a class="el" href="_workload_data_8hpp_source.html#l00066">QueueDescriptorWithParameters&lt; LayerDescriptor &gt;::m_Parameters</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle.html#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</a>, <a class="el" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00">Reflect</a>, <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>, and <a class="el" href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626">Symmetric</a>.</p>
</div>
</div>
<a id="a7e3b0eb2d8e1d5849abfab90f2b49145"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7e3b0eb2d8e1d5849abfab90f2b49145">&#9670;&nbsp;</a></span>MockTensorHandleFactoryId()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::MockTensorHandleFactoryId </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</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.html#l00014">14</a> of file <a class="el" href="_mock_tensor_handle_factory_8hpp_source.html">MockTensorHandleFactory.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{</div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Arm/Mock/TensorHandleFactory&quot;</span>;</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_mock_tensor_handle_factory_8cpp_source.html#l00014">MockTensorHandleFactory::GetIdStatic()</a>.</p>
</div>
</div>
<a id="afc773aec6f845adc0cc547ce475dfe3f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afc773aec6f845adc0cc547ce475dfe3f">&#9670;&nbsp;</a></span>NeonAbsWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonAbsWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_abs_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_neon_abs_workload_8cpp_source.html">NeonAbsWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> arm_compute::NEAbsLayer::validate(&amp;aclInput, &amp;aclOutput);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01097">NeonLayerSupport::IsElementwiseUnarySupported()</a>.</p>
</div>
</div>
<a id="a46495807633a01d826851e1cb498f071"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a46495807633a01d826851e1cb498f071">&#9670;&nbsp;</a></span>NeonActivationWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonActivationWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_activation_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_neon_activation_workload_8cpp_source.html">NeonActivationWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(descriptor);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> arm_compute::NEActivationLayer::validate(&amp;aclInput,</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; &amp;aclOutput,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; activationLayerInfo);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00770">NeonLayerSupport::IsActivationSupported()</a>.</p>
</div>
</div>
<a id="a1b03e82a1a53b686aedea3734b2fb957"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1b03e82a1a53b686aedea3734b2fb957">&#9670;&nbsp;</a></span>NeonAdditionWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonAdditionWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_addition_workload_8cpp_source.html#l00020">20</a> of file <a class="el" href="_neon_addition_workload_8cpp_source.html">NeonAdditionWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">return</span> arm_compute::NEArithmeticAddition::validate(&amp;aclInput0,</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; &amp;aclInput1,</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; &amp;aclOutput,</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; arm_compute::ConvertPolicy::SATURATE,</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; activationInfo);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00783">NeonLayerSupport::IsAdditionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00184">IsLayerTypeSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.html#l00144">NeonBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="a61d1f39297fec6e3062e4047dc5f236e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a61d1f39297fec6e3062e4047dc5f236e">&#9670;&nbsp;</a></span>NeonArgMinMaxWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonArgMinMaxWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_arg_min_max_descriptor.html">ArgMinMaxDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_arg_min_max_workload_8cpp_source.html#l00031">31</a> of file <a class="el" href="_neon_arg_min_max_workload_8cpp_source.html">NeonArgMinMaxWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;{</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">auto</span> numDims = input.GetNumDimensions();</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">auto</span> unsignedAxis = <a class="code" href="namespacearmnn_utils.html#ac93cb1365b4bcb67df2a3164606096c5">armnnUtils::GetUnsignedAxis</a>(numDims, descriptor.m_Axis);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">int</span> aclAxis = armnn::numeric_cast&lt;int&gt;(CalcAclAxis(numDims, unsignedAxis));</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">if</span> (descriptor.m_Function == ArgMinMaxFunction::Max)</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> arm_compute::NEArgMinMaxLayer::validate(&amp;aclInput, aclAxis, &amp;aclOutput,</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; arm_compute::ReductionOperation::ARG_IDX_MAX);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> arm_compute::NEArgMinMaxLayer::validate(&amp;aclInput, aclAxis, &amp;aclOutput,</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; arm_compute::ReductionOperation::ARG_IDX_MIN);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00796">NeonLayerSupport::IsArgMinMaxSupported()</a>.</p>
</div>
</div>
<a id="a3a34a305e5187f3a3c67030d3bebbdb0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3a34a305e5187f3a3c67030d3bebbdb0">&#9670;&nbsp;</a></span>NeonBackendId()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::NeonBackendId </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</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.html#l00010">10</a> of file <a class="el" href="_neon_backend_id_8hpp_source.html">NeonBackendId.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;CpuAcc&quot;</span>; }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_backend_8cpp_source.html#l00046">NeonBackend::GetIdStatic()</a>.</p>
</div>
</div>
<a id="a52cdeda888e3ecf0dbebb533ba0856f1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a52cdeda888e3ecf0dbebb533ba0856f1">&#9670;&nbsp;</a></span>NeonBatchMatMulValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonBatchMatMulValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfoX</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfoY</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_batch_mat_mul_descriptor.html">BatchMatMulDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const bool&#160;</td>
<td class="paramname"><em>isFastMathEnabled</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_batch_mat_mul_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_neon_batch_mat_mul_workload_8cpp_source.html">NeonBatchMatMulWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">if</span> (descriptor.m_AdjointX || descriptor.m_AdjointY )</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; {</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">throw</span> Exception(<span class="stringliteral">&quot;Support for adjoint not implemented.&quot;</span>);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; }</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">if</span> (descriptor.m_DataLayoutX != <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a> || descriptor.m_DataLayoutY != <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a> )</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">throw</span> Exception(<span class="stringliteral">&quot;Only supported the MatMul in the last 2 dimensions&quot;</span>);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; }</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; arm_compute::TensorInfo aclInputInfoX = armcomputetensorutils::BuildArmComputeTensorInfo(inputInfoX);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; arm_compute::TensorInfo aclInputInfoY = armcomputetensorutils::BuildArmComputeTensorInfo(inputInfoY);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(outputInfo);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// GeMM dispatches kernel handles dynamic inputs differently to static so this flag needs to be set</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; aclInputInfoX.set_are_values_constant(<span class="keyword">false</span>);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; aclInputInfoY.set_are_values_constant(<span class="keyword">false</span>);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; arm_compute::MatMulInfo matMulInfo;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; matMulInfo.adj_lhs(descriptor.m_TransposeX);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; matMulInfo.adj_rhs(descriptor.m_TransposeY);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; arm_compute::CpuMatMulSettings settings;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; settings.fast_math(isFastMathEnabled);</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> arm_compute::NEMatMul::validate(&amp;aclInputInfoX, &amp;aclInputInfoY, &amp;aclOutputInfo, matMulInfo, settings,</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; activationInfo);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.html#l01617">BatchMatMulDescriptor::m_AdjointX</a>, <a class="el" href="_descriptors_8hpp_source.html#l01618">BatchMatMulDescriptor::m_AdjointY</a>, <a class="el" href="_descriptors_8hpp_source.html#l01621">BatchMatMulDescriptor::m_DataLayoutX</a>, <a class="el" href="_descriptors_8hpp_source.html#l01622">BatchMatMulDescriptor::m_DataLayoutY</a>, and <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00808">NeonLayerSupport::IsBatchMatMulSupported()</a>.</p>
</div>
</div>
<a id="ac1be1c9a317b23b5684c83af59fb2c96"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac1be1c9a317b23b5684c83af59fb2c96">&#9670;&nbsp;</a></span>NeonBatchNormalizationValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonBatchNormalizationValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>mean</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>var</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>beta</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>gamma</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_batch_normalization_descriptor.html">BatchNormalizationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_batch_normalization_workload_8cpp_source.html#l00024">24</a> of file <a class="el" href="_neon_batch_normalization_workload_8cpp_source.html">NeonBatchNormalizationWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo =</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo =</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclMeanInfo =</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(mean, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclVarInfo =</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(var, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclBetaInfo =</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(beta, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclGammaInfo =</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(gamma, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> arm_compute::NEBatchNormalizationLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; &amp;aclMeanInfo,</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; &amp;aclVarInfo,</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; &amp;aclBetaInfo,</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; &amp;aclGammaInfo,</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; descriptor.m_Eps,</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; activationInfo);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00838">NeonLayerSupport::IsBatchNormalizationSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.html#l00144">NeonBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="aad5f7f0fcd2dbb0aad7016ff984e7cc6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aad5f7f0fcd2dbb0aad7016ff984e7cc6">&#9670;&nbsp;</a></span>NeonBatchToSpaceNdWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonBatchToSpaceNdWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_batch_to_space_nd_descriptor.html">BatchToSpaceNdDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_batch_to_space_nd_workload_8cpp_source.html#l00015">15</a> of file <a class="el" href="_neon_batch_to_space_nd_workload_8cpp_source.html">NeonBatchToSpaceNdWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusBatchToSpace = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusReshapeInput = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusReshapeOutput = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; arm_compute::TensorInfo aclReshapeInputInfo = aclInputInfo;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; arm_compute::TensorInfo aclReshapeOutputInfo = aclOutputInfo;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="comment">// When a spacial dimension is missing (rank=3) set W to 1</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rank = input.GetNumDimensions();</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">if</span> (rank == 3)</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; {</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorShape inputShape = aclInputInfo.tensor_shape();</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> arm_compute::TensorShape outputShape = aclOutputInfo.tensor_shape();</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">if</span> (descriptor.m_DataLayout == <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="comment">// In ACL dimensions are right to left: C, W, H, N</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; aclReshapeInputInfo.set_tensor_shape({inputShape.x(), 1, inputShape.y(), inputShape.z()});</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; aclReshapeOutputInfo.set_tensor_shape({outputShape.x(), 1, outputShape.y(), outputShape.z()});</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (descriptor.m_DataLayout == <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>)</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">// In ACL dimensions are right to left: W, H, C, N</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; aclReshapeInputInfo.set_tensor_shape({1, inputShape.x(), inputShape.y(), inputShape.z()});</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; aclReshapeOutputInfo.set_tensor_shape({1, outputShape.x(), outputShape.y(), outputShape.z()});</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported or unknown DataLayout&quot;</span>, <a class="code" href="_exceptions_8hpp.html#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>());</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; statusReshapeInput = arm_compute::NEReshapeLayer::validate(&amp;aclInputInfo, &amp;aclReshapeInputInfo);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; statusReshapeOutput = arm_compute::NEReshapeLayer::validate(&amp;aclReshapeOutputInfo, &amp;aclOutputInfo);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; }</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="comment">// ArmNN blockShape is [H, W] ACl asks for W, H</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; int32_t blockHeight = armnn::numeric_cast&lt;int32_t&gt;(descriptor.m_BlockShape[0]);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; int32_t blockWidth = (rank == 3) ? 1 : armnn::numeric_cast&lt;int32_t&gt;(descriptor.m_BlockShape[1]);</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">const</span> arm_compute::CropInfo cropInfo = BuildArmComputeCropInfo(descriptor, rank);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; statusBatchToSpace = arm_compute::NEBatchToSpaceLayer::validate(rank == 3 ? &amp;aclReshapeInputInfo : &amp;aclInputInfo,</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; blockWidth,</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; blockHeight,</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; rank == 3 ? &amp;aclReshapeOutputInfo : &amp;aclOutputInfo,</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; cropInfo);</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">if</span> (statusReshapeInput.error_code() == arm_compute::ErrorCode::OK &amp;&amp;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; statusReshapeOutput.error_code() == arm_compute::ErrorCode::OK &amp;&amp;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; statusBatchToSpace.error_code() == arm_compute::ErrorCode::OK)</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="stringliteral">&quot;All BatchToSpace layers validate status OK.&quot;</span>);</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="stringliteral">&quot;BatchToSpace layer validate status failed.&quot;</span></div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; + statusBatchToSpace.error_description()</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; + statusReshapeInput.error_description()</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; + statusReshapeOutput.error_description());</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00859">NeonLayerSupport::IsBatchToSpaceNdSupported()</a>.</p>
</div>
</div>
<a id="a3ab69cec1cab301e096a2830f65a36ec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3ab69cec1cab301e096a2830f65a36ec">&#9670;&nbsp;</a></span>NeonCastValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonCastValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_cast_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_neon_cast_workload_8cpp_source.html">NeonCastWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">return</span> arm_compute::NECast::validate(&amp;aclInput, &amp;aclOutput, g_AclConvertPolicy);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00871">NeonLayerSupport::IsCastSupported()</a>.</p>
</div>
</div>
<a id="a2ee21869ffad00d6344afffb0a9baba1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2ee21869ffad00d6344afffb0a9baba1">&#9670;&nbsp;</a></span>NeonChannelShuffleValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonChannelShuffleValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_channel_shuffle_descriptor.html">ChannelShuffleDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_channel_shuffle_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_neon_channel_shuffle_workload_8cpp_source.html">NeonChannelShuffleWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="comment">// In Arm NN and in NNAPI, channel shuffle implementation is datalayout agnostic and it has axis as a parameter.</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="comment">// The channel shuffle Implementation for Neon is dependent on datalayout and does not have axis as a parameter,</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="comment">// it only supports channel shuffle for 4D tensors in dimension C (1 or 3).</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">arm_compute::DataLayout</a> aclDataLayout;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">if</span> (input.GetNumDimensions() == 4)</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; {</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">switch</span> (descriptor.m_Axis)</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">case</span> 1:</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; aclDataLayout = ConvertDataLayout(<a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">case</span> 3:</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; aclDataLayout = ConvertDataLayout(<a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Unsupported axis&quot;</span>};</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; aclInputInfo.set_data_layout(aclDataLayout);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; aclOutputInfo.set_data_layout(aclDataLayout);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> arm_compute::NEChannelShuffleLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, descriptor.m_NumGroups);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Unsupported number of dimensions&quot;</span>};</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00881">NeonLayerSupport::IsChannelShuffleSupported()</a>.</p>
</div>
</div>
<a id="ae412e8e64d6a6dde3ace908b59c29c06"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae412e8e64d6a6dde3ace908b59c29c06">&#9670;&nbsp;</a></span>NeonComparisonWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonComparisonWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_comparison_descriptor.html">ComparisonDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_comparison_workload_8cpp_source.html#l00016">16</a> of file <a class="el" href="_neon_comparison_workload_8cpp_source.html">NeonComparisonWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0 = BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58c">arm_compute::ComparisonOperation</a> comparisonOperation = <a class="code" href="namespacearmnn.html#ac1438a97bbc2aee5cd8470d9d2a3aebc">ConvertComparisonOperationToAcl</a>(descriptor);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NEElementwiseComparison::validate(&amp;aclInput0,</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; &amp;aclInput1,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; &amp;aclOutput,</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; comparisonOperation);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00893">NeonLayerSupport::IsComparisonSupported()</a>.</p>
</div>
</div>
<a id="a3653413d74a951674c88db372d217baa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3653413d74a951674c88db372d217baa">&#9670;&nbsp;</a></span>NeonConcatWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonConcatWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>inputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_origins_descriptor.html">OriginsDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_concat_workload_8cpp_source.html#l00027">27</a> of file <a class="el" href="_neon_concat_workload_8cpp_source.html">NeonConcatWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; aclInputs;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> TensorInfo* input : inputs)</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(*input, <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; aclInputs.emplace_back(aclInputInfo);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; }</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; std::vector&lt;const arm_compute::ITensorInfo*&gt; aclInputPtrs;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">for</span> (arm_compute::ITensorInfo&amp; input : aclInputs)</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; {</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; aclInputPtrs.emplace_back(&amp;input);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">size_t</span> aclAxis = CalcAxis(descriptor);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> arm_compute::NEConcatenateLayer::validate(aclInputPtrs, &amp;aclOutputInfo, aclAxis);</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00908">NeonLayerSupport::IsConcatSupported()</a>.</p>
</div>
</div>
<a id="afb681fd9b8afe0b236d51b6c868ae660"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afb681fd9b8afe0b236d51b6c868ae660">&#9670;&nbsp;</a></span>NeonConstantWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonConstantWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_constant_workload_8cpp_source.html#l00020">20</a> of file <a class="el" href="_neon_constant_workload_8cpp_source.html">NeonConstantWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo neonOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; std::array&lt;arm_compute::DataType,9&gt; supportedTypes = {</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; arm_compute::DataType::BFLOAT16,</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; arm_compute::DataType::F16,</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; arm_compute::DataType::F32,</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; arm_compute::DataType::QASYMM8,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; arm_compute::DataType::QASYMM8_SIGNED,</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; arm_compute::DataType::QSYMM16,</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; arm_compute::DataType::QSYMM8,</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; arm_compute::DataType::QSYMM8_PER_CHANNEL,</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; arm_compute::DataType::S32</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; };</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">auto</span> it = std::find(begin(supportedTypes), end(supportedTypes), neonOutputInfo.data_type());</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">if</span> (it != end(supportedTypes))</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{};</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Unsupported DataType&quot;</span>};</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00947">NeonLayerSupport::IsConstantSupported()</a>.</p>
</div>
</div>
<a id="a3d5735d5be6c2acce502ba572cd47d7e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3d5735d5be6c2acce502ba572cd47d7e">&#9670;&nbsp;</a></span>NeonConvertFp16ToFp32WorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonConvertFp16ToFp32WorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_convert_fp16_to_fp32_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_neon_convert_fp16_to_fp32_workload_8cpp_source.html">NeonConvertFp16ToFp32Workload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="comment">// Fallback to portable software implementation if Compute Library NECast won&#39;t work, so</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="comment">// this method always returns success</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a>(input);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a>(output);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>();</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.html#l00014">IgnoreUnused()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00955">NeonLayerSupport::IsConvertFp16ToFp32Supported()</a>.</p>
</div>
</div>
<a id="a940d1c3e8ff3949cb5f230637fb8656c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a940d1c3e8ff3949cb5f230637fb8656c">&#9670;&nbsp;</a></span>NeonConvertFp32ToFp16WorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonConvertFp32ToFp16WorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_convert_fp32_to_fp16_workload_8cpp_source.html#l00021">21</a> of file <a class="el" href="_neon_convert_fp32_to_fp16_workload_8cpp_source.html">NeonConvertFp32ToFp16Workload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="comment">// Fallback to portable software implementation if Compute Library NECast won&#39;t work, so</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="comment">// this method always returns success</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a>(input);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a>(output);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>();</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.html#l00014">IgnoreUnused()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00965">NeonLayerSupport::IsConvertFp32ToFp16Supported()</a>.</p>
</div>
</div>
<a id="a45691b0c4a46c239b4986cfed95de13b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a45691b0c4a46c239b4986cfed95de13b">&#9670;&nbsp;</a></span>NeonConvolution2dWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonConvolution2dWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_convolution2d_descriptor.html">Convolution2dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>weights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>biases</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>isFastMathEnabled</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_convolution2d_workload_8cpp_source.html#l00024">24</a> of file <a class="el" href="_neon_convolution2d_workload_8cpp_source.html">NeonConvolution2dWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; aclWeightsInfo.set_are_values_constant(weights.IsConstant());</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(descriptor.m_DilationX,</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; descriptor.m_DilationY);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; arm_compute::TensorInfo aclBiasesInfo;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; {</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">if</span> (!biases.has_value())</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="stringliteral">&quot;ArmNN NeonConvolution2dWorkload has empty bias value.&quot;</span>};</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; aclBiasesInfo.set_are_values_constant(biases.value().IsConstant());</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; arm_compute::PadStrideInfo layerInfo = BuildArmComputePadStrideInfo(descriptor);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">return</span> arm_compute::NEConvolutionLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; &amp;aclWeightsInfo,</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; optionalAclBiasesInfo,</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; layerInfo,</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; arm_compute::WeightsInfo(),</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; aclDilationInfo,</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; activationInfo,</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; isFastMathEnabled);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00975">NeonLayerSupport::IsConvolution2dSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.html#l00144">NeonBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="acbb4d7b86eb01bb437230e1586b9aeb4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acbb4d7b86eb01bb437230e1586b9aeb4">&#9670;&nbsp;</a></span>NeonConvolution3dWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonConvolution3dWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_convolution3d_descriptor.html">Convolution3dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>weights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>biases</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>isFastMathEnabled</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_convolution3d_workload_8cpp_source.html#l00024">24</a> of file <a class="el" href="_neon_convolution3d_workload_8cpp_source.html">NeonConvolution3dWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; arm_compute::TensorInfo aclBiasesInfo;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">if</span> (!biases.has_value())</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="stringliteral">&quot;ArmNN NeonConvolution3dWorkload has empty bias value.&quot;</span>};</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> arm_compute::Conv3dInfo aclConv3DInfo = <a class="code" href="namespacearmnn.html#a855760e957668804d33c0691a802496e">ComputeConv3DInfo</a>(descriptor,</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; isFastMathEnabled,</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> arm_compute::NEConv3D::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; &amp;aclWeightsInfo,</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; optionalAclBiasesInfo,</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; aclConv3DInfo);</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01008">NeonLayerSupport::IsConvolution3dSupported()</a>.</p>
</div>
</div>
<a id="a116d88067bf98ce9858ab73e68f605f9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a116d88067bf98ce9858ab73e68f605f9">&#9670;&nbsp;</a></span>NeonDepthToSpaceWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonDepthToSpaceWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_depth_to_space_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_neon_depth_to_space_workload_8cpp_source.html">NeonDepthToSpaceWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = descriptor.m_DataLayout;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input, dataLayout);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output, dataLayout);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; int32_t blockSize = armnn::numeric_cast&lt;int32_t&gt;(descriptor.m_BlockSize);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> arm_compute::NEDepthToSpaceLayer::validate(&amp;aclInput, &amp;aclOutput, blockSize);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.html#l01095">SpaceToDepthDescriptor::m_DataLayout</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01041">NeonLayerSupport::IsDepthToSpaceSupported()</a>.</p>
</div>
</div>
<a id="a63d684b26fb838b22123490d780bce08"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a63d684b26fb838b22123490d780bce08">&#9670;&nbsp;</a></span>NeonDepthwiseConvolutionWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonDepthwiseConvolutionWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html">DepthwiseConvolution2dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>weights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>biases</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_depthwise_convolution_workload_8cpp_source.html#l00029">29</a> of file <a class="el" href="_neon_depthwise_convolution_workload_8cpp_source.html">NeonDepthwiseConvolutionWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;{</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// ArmNN format for weights for depthwise is [1, H, W, C] independently of the input/output layout</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">// ACL format for weights for depthwise is:</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">// - [1, H, W, C] for [N, H, W, C] input/output layout (matches with ArmNN)</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// - [1, C, H, W] for [N, C, H, W] input/output layout</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">// Therefore ArmNN weights have to be permuted when input/output layout is [N, C, H, W] to pass them to ACL.</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="comment">// The PermuteDepthwiseConv2dWeights backend optimization takes care of this, but it has not been performed yet,</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="comment">// so we do the permute here for the TensorInfo weights.</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclDepthMultiplier;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> weightsPermuted;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; std::tie(weightsPermuted, aclDepthMultiplier) = <a class="code" href="namespacearmnn.html#ac4aa9e41515b354234645f115c49de32">Convert1HWOTensorInfoToAcl</a>(weights, input, descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="comment">// Convert the weights into the compute library format</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weightsPermuted, descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; aclWeightsInfo.set_are_values_constant(weights.<a class="code" href="classarmnn_1_1_tensor_info.html#a945263e85c27f3216a8323cfc16d8919">IsConstant</a>());</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; arm_compute::TensorInfo aclBiasesInfo;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; arm_compute::TensorInfo* optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">if</span> (descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a>)</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; {</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">if</span>(!biases.<a class="code" href="classarmnn_1_1_optional_base.html#a86b749ce2c4bc627fa8a1fcfaf0e314f">has_value</a>())</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="stringliteral">&quot;ArmNN NeonDepthwiseConvolutionWorkload has empty bias value.&quot;</span>};</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; aclBiasesInfo = BuildArmComputeTensorInfo(biases.<a class="code" href="classarmnn_1_1_optional_reference_switch.html#a77c7d528ac063d870b8c8426ec81c1c3">value</a>(), descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>);</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; aclBiasesInfo.set_are_values_constant(biases.<a class="code" href="classarmnn_1_1_optional_reference_switch.html#a77c7d528ac063d870b8c8426ec81c1c3">value</a>().<a class="code" href="classarmnn_1_1_tensor_info.html#a945263e85c27f3216a8323cfc16d8919">IsConstant</a>());</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">const</span> arm_compute::PadStrideInfo aclPadStrideInfo = BuildArmComputePadStrideInfo(descriptor);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">const</span> arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html#aa3c6a77a963a98ccb8ea7b8fd008a8c1">m_DilationX</a>,</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.html#a302b688d88dd73cde0fb1faef6679907">m_DilationY</a>);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">return</span> arm_compute::NEDepthwiseConvolutionLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; &amp;aclWeightsInfo,</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; optionalAclBiasesInfo,</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; aclPadStrideInfo,</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; aclDepthMultiplier,</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; activationInfo,</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; aclDilationInfo);</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01053">NeonLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01080">NeonLayerSupport::IsDilatedDepthwiseConvolutionSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.html#l00144">NeonBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="acefede7cc57c71ea4cfe1c888bb413e0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acefede7cc57c71ea4cfe1c888bb413e0">&#9670;&nbsp;</a></span>NeonDequantizeWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonDequantizeWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_dequantize_workload_8cpp_source.html#l00022">22</a> of file <a class="el" href="_neon_dequantize_workload_8cpp_source.html">NeonDequantizeWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> arm_compute::NEDequantizationLayer::validate(&amp;aclInput, &amp;aclOutput);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01070">NeonLayerSupport::IsDequantizeSupported()</a>.</p>
</div>
</div>
<a id="ad734960f7ae60a86b74f6722f6c14332"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad734960f7ae60a86b74f6722f6c14332">&#9670;&nbsp;</a></span>NeonDetected()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool NeonDetected </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_utils_8cpp_source.html#l00039">39</a> of file <a class="el" href="_utils_8cpp_source.html">Utils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;{</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#if !defined(__APPLE__)</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#if !defined(ARMNN_BUILD_BARE_METAL) &amp;&amp; (defined(__arm__) || defined(__aarch64__))</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">auto</span> hwcaps= getauxval(AT_HWCAP);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#if !defined(ARMNN_BUILD_BARE_METAL) &amp;&amp; defined(__aarch64__)</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">if</span> (hwcaps &amp; HWCAP_ASIMD)</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="comment">// On an arm64 device with Neon.</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; {</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="comment">// On an arm64 device without Neon.</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#if !defined(ARMNN_BUILD_BARE_METAL) &amp;&amp; defined(__arm__)</span></div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; </div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span> (hwcaps &amp; HWCAP_NEON)</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="comment">// On an armhf device with Neon.</span></div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// On an armhf device without Neon.</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; }</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="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="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">// we will return true in cases where detection did not run.</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ab816c37fc6a6243badf4f7a3d0c88d46"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab816c37fc6a6243badf4f7a3d0c88d46">&#9670;&nbsp;</a></span>NeonDetectionPostProcessValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonDetectionPostProcessValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>boxEncodings</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>scores</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>anchors</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>detectionBoxes</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>detectionClasses</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>detectionScores</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>numDetections</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_detection_post_process_descriptor.html">DetectionPostProcessDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_detection_post_process_workload_8cpp_source.html#l00032">32</a> of file <a class="el" href="_neon_detection_post_process_workload_8cpp_source.html">NeonDetectionPostProcessWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;{</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; arm_compute::DetectionPostProcessLayerInfo <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a> = <a class="code" href="namespacearmnn.html#a35d5394615a3062b629db056d414ae4f">MakeInfo</a>(descriptor);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclBoxEncodings =</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(boxEncodings);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScores =</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(scores);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclAnchors =</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(anchors);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; arm_compute::TensorInfo aclDetectionBoxes =</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(detectionBoxes);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; arm_compute::TensorInfo aclDetectionClasses =</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(detectionClasses);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; arm_compute::TensorInfo aclDetectionScores =</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(detectionScores);</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; arm_compute::TensorInfo aclNumDetections =</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(numDetections);</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; </div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> arm_compute::NEDetectionPostProcessLayer::validate(</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; &amp;aclBoxEncodings,</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; &amp;aclScores,</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; &amp;aclAnchors,</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; &amp;aclDetectionBoxes,</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; &amp;aclDetectionClasses,</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; &amp;aclDetectionScores,</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; &amp;aclNumDetections,</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; info);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, and <a class="el" href="_neon_detection_post_process_workload_8cpp_source.html#l00017">MakeInfo()</a>.</p>
</div>
</div>
<a id="a65c912bfcf02b3096f36caf21fa175d0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a65c912bfcf02b3096f36caf21fa175d0">&#9670;&nbsp;</a></span>NeonDivisionWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonDivisionWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_division_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_neon_division_workload_8cpp_source.html">NeonDivisionWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">return</span> arm_compute::NEElementwiseDivision::validate(&amp;aclInput0,</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; &amp;aclInput1,</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; &amp;aclOutput,</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; activationInfo);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01364">NeonLayerSupport::IsDivisionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00184">IsLayerTypeSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.html#l00144">NeonBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="aa91b61cfa806ac6c8cd326f02dd993d5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa91b61cfa806ac6c8cd326f02dd993d5">&#9670;&nbsp;</a></span>NeonElementwiseBinaryWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonElementwiseBinaryWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_elementwise_binary_descriptor.html">ElementwiseBinaryDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_elementwise_binary_workload_8cpp_source.html#l00020">20</a> of file <a class="el" href="_neon_elementwise_binary_workload_8cpp_source.html">NeonElementwiseBinaryWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">switch</span> (descriptor.m_Operation)</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047add4fe0cc913f704600b97d1f5dd285de">armnn::BinaryOperation::Power</a>:</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> arm_compute::NEElementwisePower::validate(&amp;aclInput0,</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; &amp;aclInput1,</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; &amp;aclOutput,</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; activationInfo);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a2d17ea57d7f86acde5c60cef8e123a53">armnn::BinaryOperation::SqDiff</a>:</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> arm_compute::NEElementwiseSquaredDiff::validate(&amp;aclInput0,</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; &amp;aclInput1,</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; &amp;aclOutput,</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; activationInfo);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unknown binary operator&quot;</span>, <a class="code" href="_exceptions_8hpp.html#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>());</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00184">IsLayerTypeSupported()</a>.</p>
</div>
</div>
<a id="aec5669eb9285cbca1ee6c7e1dd7bcf6a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aec5669eb9285cbca1ee6c7e1dd7bcf6a">&#9670;&nbsp;</a></span>NeonExpWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonExpWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_exp_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_neon_exp_workload_8cpp_source.html">NeonExpWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> arm_compute::NEExpLayer::validate(&amp;aclInput, &amp;aclOutput);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01097">NeonLayerSupport::IsElementwiseUnarySupported()</a>.</p>
</div>
</div>
<a id="ae455144d3472c502b636697f4775400c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae455144d3472c502b636697f4775400c">&#9670;&nbsp;</a></span>NeonFullyConnectedWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonFullyConnectedWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>weights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>biases</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.html">FullyConnectedDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_fully_connected_workload_8cpp_source.html#l00024">24</a> of file <a class="el" href="_neon_fully_connected_workload_8cpp_source.html">NeonFullyConnectedWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; arm_compute::TensorInfo aclWeights = BuildArmComputeTensorInfo(weights);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; aclWeights.set_are_values_constant(weights.IsConstant());</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; arm_compute::TensorInfo aclBiases;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; arm_compute::TensorInfo* optionalAclBiases = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; biases.has_value(),</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="stringliteral">&quot;NeonFullyConnectedWorkload: Bias was enabled in the descriptor but no value was supplied.&quot;</span>);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; aclBiases = BuildArmComputeTensorInfo(biases.value());</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; aclBiases.set_are_values_constant(biases.value().IsConstant());</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; optionalAclBiases = &amp;aclBiases;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">const</span> arm_compute::FullyConnectedLayerInfo fullyConnectedLayerInfo =</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="namespacearmnn.html#ae2e0c1d8160fadce44d479379790718e">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a>(descriptor, activationDescriptor);</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">return</span> arm_compute::NEFullyConnectedLayer::validate(&amp;aclInput,</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; &amp;aclWeights,</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; optionalAclBiases,</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; &amp;aclOutput,</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; fullyConnectedLayerInfo);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01176">NeonLayerSupport::IsFullyConnectedSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.html#l00144">NeonBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="abfdd58b11ca2986bb45fc25ba4514347"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abfdd58b11ca2986bb45fc25ba4514347">&#9670;&nbsp;</a></span>NeonFusedWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonFusedWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; std::reference_wrapper&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>inputInfos</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; std::reference_wrapper&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>outputInfos</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_fused_descriptor.html">FusedDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>fusedDescriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_fused_workload_8cpp_source.html#l00022">22</a> of file <a class="el" href="_neon_fused_workload_8cpp_source.html">NeonFusedWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;{</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; actInputInfos;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; actInputInfos.reserve(inputInfos.size());</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0u; i &lt; inputInfos.size(); ++i)</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; {</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; actInputInfos.emplace_back(BuildArmComputeTensorInfo(inputInfos[i]));</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; }</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; actOutputInfos;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; actOutputInfos.reserve(outputInfos.size());</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0u; i &lt; outputInfos.size(); ++i)</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; actOutputInfos.emplace_back(BuildArmComputeTensorInfo(outputInfos[i]));</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo =</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(activationDescriptor);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">switch</span> (fusedDescriptor.m_FusedKernelType)</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">case</span> FusedKernelType::AddMulAdd:</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> arm_compute::NEAddMulAdd::validate(</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; &amp;actInputInfos[0],</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; &amp;actInputInfos[1],</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; &amp;actInputInfos[2], <span class="comment">// bn_mul</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; &amp;actInputInfos[3], <span class="comment">// bn_add</span></div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; actOutputInfos.size() == 1 ? <span class="keyword">nullptr</span> : &amp;actOutputInfos[0], <span class="comment">// add_output</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; actOutputInfos.size() == 1 ? &amp;actOutputInfos[0] : &amp;actOutputInfos[1], <span class="comment">// final_output</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; arm_compute::ConvertPolicy::SATURATE,</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; activationInfo);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="stringliteral">&quot;NeonFusedWorkloadValidate: no valid kernel type&quot;</span>};</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01193">NeonLayerSupport::IsFusedSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.html#l00144">NeonBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="aec41b8c86e61ce02a07b8215bf8bc073"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aec41b8c86e61ce02a07b8215bf8bc073">&#9670;&nbsp;</a></span>NeonGatherNdWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonGatherNdWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>paramsInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>indicesInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Validate Mul</p>
<p>Validate ReduceSum</p>
<p>Validate Gather</p>
<p>Validate Reshape</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.html#l00014">14</a> of file <a class="el" href="_neon_gather_nd_workload_8cpp_source.html">NeonGatherNdWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="comment">// Calculate ND, K, W, C.</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; std::map&lt;std::string, unsigned int&gt; keyIndices = <a class="code" href="namespacearmnn.html#ac40d3e4035af5fbe68d9e126a8d6367c">CalculateGatherNdKeyIndices</a>(paramsInfo, indicesInfo);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> /// Validate Mul</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"></span> <span class="comment">// Indices with shape { W, ND }</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> indices_W_ND_Info = indicesInfo;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; indices_W_ND_Info.<a class="code" href="classarmnn_1_1_tensor_info.html#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>], keyIndices[<span class="stringliteral">&quot;ND&quot;</span>] });</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclIndicesInfo = BuildArmComputeTensorInfo(indices_W_ND_Info);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="comment">// Flattened coefficients with shape { ND }</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> flattenedCoeff_Info = indicesInfo;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; flattenedCoeff_Info.<a class="code" href="classarmnn_1_1_tensor_info.html#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;ND&quot;</span>] });</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclFlattenedCoeffInfo = BuildArmComputeTensorInfo(flattenedCoeff_Info);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="comment">// Output of Mul with shape { W, ND }</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputMulInfo = BuildArmComputeTensorInfo(indices_W_ND_Info);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">auto</span> statusMul = arm_compute::NEPixelWiseMultiplication::validate(&amp;aclIndicesInfo,</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; &amp;aclFlattenedCoeffInfo,</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; &amp;aclOutputMulInfo,</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; 1.0f,</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; arm_compute::ConvertPolicy::WRAP,</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; arm_compute::RoundingPolicy::TO_ZERO,</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; arm_compute::ActivationLayerInfo());</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment"> /// Validate ReduceSum</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment"></span> <span class="comment">// Flattened indices with shape { W }</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> flattenedIndices_Info = indicesInfo;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; flattenedIndices_Info.<a class="code" href="classarmnn_1_1_tensor_info.html#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>] });</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclFlattenedIndicesInfo = BuildArmComputeTensorInfo(flattenedIndices_Info);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> std::vector&lt;unsigned int&gt; armnnReduceAxes(1, 1);</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> coords = BuildArmComputeReductionCoordinates(aclOutputMulInfo.num_dimensions(),</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; indices_W_ND_Info.<a class="code" href="classarmnn_1_1_tensor_info.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(),</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; armnnReduceAxes);</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">auto</span> statusReduceSum = arm_compute::NEReductionOperation::validate(&amp;aclOutputMulInfo,</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; &amp;aclFlattenedIndicesInfo,</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(coords[0]),</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; arm_compute::ReductionOperation::SUM,</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">false</span>);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment"> /// Validate Gather</span></div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment"></span> <span class="comment">// Params with shape { K, C }</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> params_K_C_Info = paramsInfo;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; params_K_C_Info.<a class="code" href="classarmnn_1_1_tensor_info.html#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;K&quot;</span>], keyIndices[<span class="stringliteral">&quot;C&quot;</span>] });</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclParamsInfo = BuildArmComputeTensorInfo(params_K_C_Info);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="comment">// Output of gather with shape { W, C }</span></div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> outputGather_Info = outputInfo;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; outputGather_Info.<a class="code" href="classarmnn_1_1_tensor_info.html#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>], keyIndices[<span class="stringliteral">&quot;C&quot;</span>] });</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGatherInfo = BuildArmComputeTensorInfo(outputGather_Info);</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">auto</span> aclAxis = <a class="code" href="namespacearmnn.html#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(0, params_K_C_Info);</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">auto</span> statusGather =</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; arm_compute::NEGather::validate(&amp;aclParamsInfo, &amp;aclFlattenedIndicesInfo, &amp;aclOutputGatherInfo, aclAxis);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment"> /// Validate Reshape</span></div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment"></span> <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(outputInfo);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">auto</span> statusReshape = arm_compute::NEReshapeLayer::validate(&amp;aclOutputGatherInfo, &amp;aclOutputInfo);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"> /// Return OK if all the layers are valid</span></div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span> <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">if</span> (statusMul.error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; statusReduceSum.error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; statusGather.error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; statusReshape.error_code() == okCode)</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="stringliteral">&quot;All GatherND layers validate status OK.&quot;</span>);</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; {</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="stringliteral">&quot;GatherND layer validate status failed.&quot;</span>);</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_workload_utils_8cpp_source.html#l00313">CalculateGatherNdKeyIndices()</a>, and <a class="el" href="_tensor_8hpp_source.html#l00195">TensorInfo::SetShape()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01220">NeonLayerSupport::IsGatherNdSupported()</a>.</p>
</div>
</div>
<a id="a6c354904637149b84767275e6f725741"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6c354904637149b84767275e6f725741">&#9670;&nbsp;</a></span>NeonGatherWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonGatherWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>indices</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_gather_descriptor.html">GatherDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_gather_workload_8cpp_source.html#l00013">13</a> of file <a class="el" href="_neon_gather_workload_8cpp_source.html">NeonGatherWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclIndices = BuildArmComputeTensorInfo(indices);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.html#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(descriptor.m_Axis, input);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">return</span> arm_compute::NEGather::validate(&amp;aclInput, &amp;aclIndices, &amp;aclOutput, aclAxis);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01206">NeonLayerSupport::IsGatherSupported()</a>.</p>
</div>
</div>
<a id="aea722abe239545030f4c6fe4e083816f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aea722abe239545030f4c6fe4e083816f">&#9670;&nbsp;</a></span>NeonInstanceNormalizationWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonInstanceNormalizationWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_instance_normalization_descriptor.html">InstanceNormalizationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_instance_normalization_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_neon_instance_normalization_workload_8cpp_source.html">NeonInstanceNormalizationWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">return</span> arm_compute::NEInstanceNormalizationLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; descriptor.m_Gamma,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; descriptor.m_Beta,</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; descriptor.m_Eps);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01238">NeonLayerSupport::IsInstanceNormalizationSupported()</a>.</p>
</div>
</div>
<a id="ae838df3960d2b5d18d73ed2a07aee917"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae838df3960d2b5d18d73ed2a07aee917">&#9670;&nbsp;</a></span>NeonL2NormalizationWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonL2NormalizationWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_l2_normalization_descriptor.html">L2NormalizationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_l2_normalization_float_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_neon_l2_normalization_float_workload_8cpp_source.html">NeonL2NormalizationFloatWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordtype">int</span> axis = (descriptor.m_DataLayout == DataLayout::NCHW) ? 2 : 0;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> arm_compute::NEL2NormalizeLayer::validate(&amp;aclInput, &amp;aclOutput, axis, descriptor.m_Eps);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01250">NeonLayerSupport::IsL2NormalizationSupported()</a>.</p>
</div>
</div>
<a id="a7832b675e7efeb1315b31067e46ce705"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7832b675e7efeb1315b31067e46ce705">&#9670;&nbsp;</a></span>NeonLogicalAndWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonLogicalAndWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_logical_and_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_neon_logical_and_workload_8cpp_source.html">NeonLogicalAndWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo0 = BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo1 = BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NELogicalAnd::validate(&amp;aclInputInfo0,</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; &amp;aclInputInfo1,</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; &amp;aclOutputInfo);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01258">NeonLayerSupport::IsLogicalBinarySupported()</a>.</p>
</div>
</div>
<a id="af4f8e11ae5715973420a82d841dfa676"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af4f8e11ae5715973420a82d841dfa676">&#9670;&nbsp;</a></span>NeonLogicalNotWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonLogicalNotWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_logical_not_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_neon_logical_not_workload_8cpp_source.html">NeonLogicalNotWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NELogicalNot::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; &amp;aclOutputInfo);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01097">NeonLayerSupport::IsElementwiseUnarySupported()</a>.</p>
</div>
</div>
<a id="a2de04fd10d0a2419e0a05f12741017dc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2de04fd10d0a2419e0a05f12741017dc">&#9670;&nbsp;</a></span>NeonLogicalOrWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonLogicalOrWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_logical_or_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_neon_logical_or_workload_8cpp_source.html">NeonLogicalOrWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo0 = BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo1 = BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NELogicalOr::validate(&amp;aclInputInfo0,</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; &amp;aclInputInfo1,</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; &amp;aclOutputInfo);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> aclStatus;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01258">NeonLayerSupport::IsLogicalBinarySupported()</a>.</p>
</div>
</div>
<a id="ac57d1e00cc24022c21aa7ff95eb618ba"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac57d1e00cc24022c21aa7ff95eb618ba">&#9670;&nbsp;</a></span>NeonLogSoftmaxWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonLogSoftmaxWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#ac14705405cbcdd580df613de6766fe65">LogSoftmaxDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_log_softmax_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_neon_log_softmax_workload_8cpp_source.html">NeonLogSoftmaxWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.html#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(descriptor.m_Axis, input);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> arm_compute::NELogSoftmaxLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; descriptor.m_Beta,</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; aclAxis);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01283">NeonLayerSupport::IsLogSoftmaxSupported()</a>.</p>
</div>
</div>
<a id="ad1991a3499a991b1fdd71d918f793f13"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad1991a3499a991b1fdd71d918f793f13">&#9670;&nbsp;</a></span>NeonLogWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonLogWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_log_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_neon_log_workload_8cpp_source.html">NeonLogWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> arm_compute::NELogLayer::validate(&amp;aclInput, &amp;aclOutput);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01097">NeonLayerSupport::IsElementwiseUnarySupported()</a>.</p>
</div>
</div>
<a id="a9e06cc2a2ac8b88fc72972695a17910f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9e06cc2a2ac8b88fc72972695a17910f">&#9670;&nbsp;</a></span>NeonLstmFloatWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonLstmFloatWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>cellStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>scratchBuffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>cellStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_descriptor.html">LstmDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_input_params_info.html">LstmInputParamsInfo</a> &amp;&#160;</td>
<td class="paramname"><em>paramsInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_lstm_float_workload_8cpp_source.html#l00253">253</a> of file <a class="el" href="_neon_lstm_float_workload_8cpp_source.html">NeonLstmFloatWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;{</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; lstm_params_info;</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; </div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// The inputs and outputs</span></div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; </div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// Basic parameters</span></div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; </div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; </div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; </div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; </div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; {</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; </div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; lstm_params_info.set_cifg_params(&amp;aclInputToInputWeightsInfo, &amp;aclRecurrentToInputWeightsInfo,</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; descriptor.m_PeepholeEnabled ? &amp;aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; &amp;aclInputGateBiasInfo);</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; </div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; {</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; {</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; }</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; </div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; lstm_params_info.set_projection_params(&amp;aclProjectionWeightsInfo,</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ?</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; &amp;aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; }</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; </div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; {</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; </div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; lstm_params_info.set_peephole_params(&amp;aclCellToForgetWeightsInfo, &amp;aclCellToOutputWeightsInfo);</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; }</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; </div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; {</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; }</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; </div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ?</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keyword">nullptr</span> : &amp;aclInputLayerNormWeightsInfo,</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; }</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; </div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; </div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="comment">// for preparing the object for the class ActivationLayerInfo, we need to consider 5 situations</span></div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; arm_compute::ActivationLayerInfo activationLayerInfo =</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <a class="code" href="namespacearmnn.html#aa1e93ef5f9ee3dbb5e7faa9578f180ae">ConvertLstmActivationFuncToAclLayerInfo</a>(descriptor.m_ActivationFunc);</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; </div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">return</span> arm_compute::NELSTMLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; &amp;aclInputToForgetWeightsInfo,</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; &amp;aclInputToCellWeightsInfo,</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; &amp;aclInputToOutputWeightsInfo,</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; &amp;aclForgetGateBiasInfo,</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; &amp;aclCellBiasInfo,</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; &amp;aclOutputGateBiasInfo,</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; &amp;aclOutputStateInInfo,</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; &amp;aclCellStateInInfo,</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; &amp;aclScratchBufferInfo,</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; &amp;aclOutputStateOutInfo,</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; &amp;aclCellStateOutInfo,</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; lstm_params_info,</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; activationLayerInfo,</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; cell_threshold,</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; projection_threshold);</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01291">NeonLayerSupport::IsLstmSupported()</a>.</p>
</div>
</div>
<a id="a8d2ea79addd8ef64be2ca0dad3408f00"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8d2ea79addd8ef64be2ca0dad3408f00">&#9670;&nbsp;</a></span>NeonMaximumWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonMaximumWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_maximum_workload_8cpp_source.html#l00014">14</a> of file <a class="el" href="_neon_maximum_workload_8cpp_source.html">NeonMaximumWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> arm_compute::NEElementwiseMax::validate(&amp;aclInput0,</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; &amp;aclInput1,</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; &amp;aclOutput);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00184">IsLayerTypeSupported()</a>, and <a class="el" href="_neon_layer_support_8cpp_source.html#l01315">NeonLayerSupport::IsMaximumSupported()</a>.</p>
</div>
</div>
<a id="ae74e210a3f716c1f5f32663a8ec66345"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae74e210a3f716c1f5f32663a8ec66345">&#9670;&nbsp;</a></span>NeonMeanWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonMeanWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_mean_descriptor.html">MeanDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_mean_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_neon_mean_workload_8cpp_source.html">NeonMeanWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> coords = BuildArmComputeReductionCoordinates(aclInputInfo.num_dimensions(),</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; input.GetNumDimensions(),</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; descriptor.m_Axis);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> arm_compute::NEReduceMean::validate(&amp;aclInputInfo, coords, descriptor.m_KeepDims, &amp;aclOutputInfo);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01327">NeonLayerSupport::IsMeanSupported()</a>.</p>
</div>
</div>
<a id="ab81159ebfa638af1b91fe1e8c5de1955"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab81159ebfa638af1b91fe1e8c5de1955">&#9670;&nbsp;</a></span>NeonMinimumWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonMinimumWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Validate function for validating the inputs and output. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">input0</td><td>The input0 value to be validated. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">input1</td><td>The input1 value to be validated. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">output</td><td>The output value to be validated. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="_neon_minimum_workload_8cpp_source.html#l00015">15</a> of file <a class="el" href="_neon_minimum_workload_8cpp_source.html">NeonMinimumWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::NEElementwiseMin::validate(&amp;aclInput0,</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; &amp;aclInput1,</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; &amp;aclOutput);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00184">IsLayerTypeSupported()</a>, and <a class="el" href="_neon_layer_support_8cpp_source.html#l01339">NeonLayerSupport::IsMinimumSupported()</a>.</p>
</div>
</div>
<a id="ad512520e809bfed4fbd3db9fbc241263"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad512520e809bfed4fbd3db9fbc241263">&#9670;&nbsp;</a></span>NeonMultiplicationWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonMultiplicationWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_multiplication_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_neon_multiplication_workload_8cpp_source.html">NeonMultiplicationWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput2 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">auto</span> convertPolicy = (<a class="code" href="namespacearmnn.html#ad44c007f21af2d0375e3ef9400a1b275">IsQuantizedType</a>(input0.GetDataType()) || <a class="code" href="namespacearmnn.html#ad44c007f21af2d0375e3ef9400a1b275">IsQuantizedType</a>(input1.GetDataType())) ?</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; arm_compute::ConvertPolicy::SATURATE :</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; arm_compute::ConvertPolicy::WRAP;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="comment">// At the time of writing, configure() will fail if a rounding policy other than TO_ZERO is supplied to it,</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// when providing a scale of 1.0 for F32 tensors, even though the provided rounding policy appears to be</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">// ignored for F32 tensors.</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">return</span> arm_compute::NEPixelWiseMultiplication::validate(&amp;aclInput1,</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; &amp;aclInput2,</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; &amp;aclOutput,</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; 1.0f,</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; convertPolicy,</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; arm_compute::RoundingPolicy::TO_ZERO,</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; activationInfo);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00184">IsLayerTypeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01351">NeonLayerSupport::IsMultiplicationSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.html#l00144">NeonBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="a7f955750d00cdcae6038f07cc73686ea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7f955750d00cdcae6038f07cc73686ea">&#9670;&nbsp;</a></span>NeonNegWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonNegWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_neg_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_neon_neg_workload_8cpp_source.html">NeonNegWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> arm_compute::NENegLayer::validate(&amp;aclInput, &amp;aclOutput);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01097">NeonLayerSupport::IsElementwiseUnarySupported()</a>.</p>
</div>
</div>
<a id="a2ec6297db90d1d4c258c13d2d72b13d9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2ec6297db90d1d4c258c13d2d72b13d9">&#9670;&nbsp;</a></span>NeonNormalizationWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonNormalizationWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_normalization_descriptor.html">NormalizationDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_normalization_float_workload_8cpp_source.html#l00049">49</a> of file <a class="el" href="_neon_normalization_float_workload_8cpp_source.html">NeonNormalizationFloatWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;{</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; arm_compute::NormalizationLayerInfo normalizationInfo = BuildArmComputeNormalizationLayerInfo(descriptor);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">return</span> arm_compute::NENormalizationLayer::validate(&amp;aclInput, &amp;aclOutput, normalizationInfo);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01377">NeonLayerSupport::IsNormalizationSupported()</a>.</p>
</div>
</div>
<a id="a39209c0c078e83227222eb885317c2c5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a39209c0c078e83227222eb885317c2c5">&#9670;&nbsp;</a></span>NeonPadWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonPadWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_pad_descriptor.html">PadDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_pad_workload_8cpp_source.html#l00059">59</a> of file <a class="el" href="_neon_pad_workload_8cpp_source.html">NeonPadWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;{</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; std::vector&lt;std::pair&lt;unsigned int, unsigned int&gt;&gt; reversed_PadList(descriptor.m_PadList.size());</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; std::reverse_copy(std::begin(descriptor.m_PadList),</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; std::end(descriptor.m_PadList),</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; std::begin(reversed_PadList));</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; arm_compute::PaddingList padList = <span class="keyword">static_cast&lt;</span>arm_compute::PaddingList<span class="keyword">&gt;</span>(reversed_PadList);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// PixelValue is currently unused when validating, but it&#39;s required to pass in PaddingMode.</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; arm_compute::PixelValue pixelValue = GetPixelValue(&amp;aclInputInfo, descriptor.m_PadValue);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">return</span> arm_compute::NEPadLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; padList,</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; pixelValue,</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="namespacearmnn.html#adf5a024ace0dbe2af2d5b1a1b9623771">ConvertPaddingModeToAcl</a>(descriptor.m_PaddingMode));</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01395">NeonLayerSupport::IsPadSupported()</a>.</p>
</div>
</div>
<a id="a70650f6b1d3b8511fcdb989ca769cdbb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a70650f6b1d3b8511fcdb989ca769cdbb">&#9670;&nbsp;</a></span>NeonPermuteWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonPermuteWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_permute_descriptor.html">PermuteDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_permute_workload_8cpp_source.html#l00015">15</a> of file <a class="el" href="_neon_permute_workload_8cpp_source.html">NeonPermuteWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.html">armnn::PermutationVector</a>&amp; mappings = descriptor.m_DimMappings;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::NEPermute::validate(&amp;aclInputInfo, &amp;aclOutputInfo,</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; armcomputetensorutils::BuildArmComputePermutationVector(mappings));</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01407">NeonLayerSupport::IsPermuteSupported()</a>.</p>
</div>
</div>
<a id="a1f07655db8ad7f2738bb0d3d9e2316cc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1f07655db8ad7f2738bb0d3d9e2316cc">&#9670;&nbsp;</a></span>NeonPooling2dWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonPooling2dWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.html">Pooling2dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_pooling2d_workload_8cpp_source.html#l00022">22</a> of file <a class="el" href="_neon_pooling2d_workload_8cpp_source.html">NeonPooling2dWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo =</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo =</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; arm_compute::PoolingLayerInfo layerInfo = BuildArmComputePoolingLayerInfo(descriptor);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">return</span> arm_compute::NEPoolingLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, layerInfo);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01415">NeonLayerSupport::IsPooling2dSupported()</a>.</p>
</div>
</div>
<a id="aa2b7034aa064d5ec7a9d07828edc48bc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa2b7034aa064d5ec7a9d07828edc48bc">&#9670;&nbsp;</a></span>NeonPooling3dWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonPooling3dWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_pooling3d_descriptor.html">Pooling3dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_pooling3d_workload_8cpp_source.html#l00015">15</a> of file <a class="el" href="_neon_pooling3d_workload_8cpp_source.html">NeonPooling3dWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; {</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; arm_compute::Pooling3dLayerInfo layerInfo = BuildArmComputePooling3dLayerInfo(descriptor);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> arm_compute::NEPooling3dLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, layerInfo);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01423">NeonLayerSupport::IsPooling3dSupported()</a>.</p>
</div>
</div>
<a id="a188adc104b16db3dc23ed2c5ff06cbb8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a188adc104b16db3dc23ed2c5ff06cbb8">&#9670;&nbsp;</a></span>NeonPreluWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonPreluWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>alpha</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_prelu_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_neon_prelu_workload_8cpp_source.html">NeonPreluWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclAlpha = armcomputetensorutils::BuildArmComputeTensorInfo(alpha);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> arm_compute::NEPReluLayer::validate(&amp;aclInput,</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; &amp;aclAlpha,</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; &amp;aclOutput);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01431">NeonLayerSupport::IsPreluSupported()</a>.</p>
</div>
</div>
<a id="a6e6f731864d33c0acd4140c7dfe17b0a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6e6f731864d33c0acd4140c7dfe17b0a">&#9670;&nbsp;</a></span>NeonQLstmWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonQLstmWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>cellStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>cellStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_q_lstm_descriptor.html">QLstmDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_input_params_info.html">LstmInputParamsInfo</a> &amp;&#160;</td>
<td class="paramname"><em>paramsInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_q_lstm_workload_8cpp_source.html#l00243">243</a> of file <a class="el" href="_neon_q_lstm_workload_8cpp_source.html">NeonQLstmWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;{</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; aclParamsInfo;</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; </div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="comment">// Input/Output tensor info</span></div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; </div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; </div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// Mandatory tensor info</span></div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; </div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="comment">// Optional tensor info</span></div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; </div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; </div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; </div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; </div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; </div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// Create tensor info for optional params if they are enabled</span></div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; {</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; {</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; </div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; </div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="comment">// Set peephole params info</span></div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; aclParamsInfo.set_peephole_params(&amp;aclCellToForgetWeightsInfo,</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; &amp;aclCellToOutputWeightsInfo);</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; </div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; {</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; </div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; {</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; </div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="comment">// Set projection params info</span></div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; aclParamsInfo.set_projection_params(</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; &amp;aclProjectionWeightsInfo,</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ? &amp;aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; </div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; {</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; {</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; }</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; </div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; </div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="comment">// Set layer norm params info</span></div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; aclParamsInfo.set_layer_normalization_params(</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; paramsInfo.m_InputLayerNormWeights != <span class="keyword">nullptr</span> ? &amp;aclInputLayerNormWeightsInfo : <span class="keyword">nullptr</span>,</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; </div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; {</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; </div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="comment">// Set CIFG params info</span></div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; aclParamsInfo.set_cifg_params(</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; &amp;aclInputToInputWeightsInfo,</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; &amp;aclRecurrentToInputWeightsInfo,</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</span> ? &amp;aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; &amp;aclInputGateBiasInfo);</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; }</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; </div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="comment">// Set scalar descriptor params</span></div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; aclParamsInfo.set_cell_clip_params(descriptor.m_CellClip);</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; aclParamsInfo.set_projection_clip_params(descriptor.m_ProjectionClip);</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; aclParamsInfo.set_hidden_state_params(descriptor.m_HiddenStateZeroPoint, descriptor.m_HiddenStateScale);</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; aclParamsInfo.set_matmul_scale_params(descriptor.m_InputIntermediateScale,</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; descriptor.m_ForgetIntermediateScale,</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; descriptor.m_CellIntermediateScale,</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; descriptor.m_OutputIntermediateScale);</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; </div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="comment">// QLSTM NEON validate</span></div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">return</span> arm_compute::NEQLSTMLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; &amp;aclInputToForgetWeightsInfo,</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; &amp;aclInputToCellWeightsInfo,</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; &amp;aclInputToOutputWeightsInfo,</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; &amp;aclForgetGateBiasInfo,</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; &amp;aclCellBiasInfo,</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; &amp;aclOutputGateBiasInfo,</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; &amp;aclCellStateInInfo,</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; &amp;aclOutputStateInInfo,</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; &amp;aclCellStateOutInfo,</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; &amp;aclOutputStateOutInfo,</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; aclParamsInfo);</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01439">NeonLayerSupport::IsQLstmSupported()</a>.</p>
</div>
</div>
<a id="ae83632e641892ad2de78f316376f6bd0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae83632e641892ad2de78f316376f6bd0">&#9670;&nbsp;</a></span>NeonQuantizedLstmWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonQuantizedLstmWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>cellStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>cellStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.html">QuantizedLstmInputParamsInfo</a> &amp;&#160;</td>
<td class="paramname"><em>paramsInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_quantized_lstm_workload_8cpp_source.html#l00131">131</a> of file <a class="el" href="_neon_quantized_lstm_workload_8cpp_source.html">NeonQuantizedLstmWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;{</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="comment">// The inputs and outputs</span></div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">// Basic parameters</span></div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToInputWeightsInfo</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; </div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToInputWeightsInfo</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; </div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputGateBiasInfo</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; </div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> arm_compute::NELSTMLayerQuantized::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; &amp;aclInputToInputWeightsInfo,</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; &amp;aclInputToForgetWeightsInfo,</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; &amp;aclInputToCellWeightsInfo,</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; &amp;aclInputToOutputWeightsInfo,</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; &amp;aclRecurrentToInputWeightsInfo,</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; &amp;aclInputGateBiasInfo,</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; &amp;aclForgetGateBiasInfo,</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; &amp;aclCellBiasInfo,</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; &amp;aclOutputGateBiasInfo,</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; &amp;aclCellStateInInfo,</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; &amp;aclOutputStateInInfo,</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; &amp;aclCellStateOutInfo,</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; &amp;aclOutputStateOutInfo);</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01484">NeonLayerSupport::IsQuantizedLstmSupported()</a>.</p>
</div>
</div>
<a id="a4d1e35c8bbe48e99dd522ac0f75f77d7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4d1e35c8bbe48e99dd522ac0f75f77d7">&#9670;&nbsp;</a></span>NeonQuantizeWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonQuantizeWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_quantize_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_neon_quantize_workload_8cpp_source.html">NeonQuantizeWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo neonInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo neonOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::NEQuantizationLayer::validate(&amp;neonInputInfo, &amp;neonOutputInfo);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01474">NeonLayerSupport::IsQuantizeSupported()</a>.</p>
</div>
</div>
<a id="aceb6d218204c4e0e7b4c968d6266917c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aceb6d218204c4e0e7b4c968d6266917c">&#9670;&nbsp;</a></span>NeonReduceWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonReduceWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_reduce_descriptor.html">ReduceDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_reduce_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_neon_reduce_workload_8cpp_source.html">NeonReduceWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">if</span> ( descriptor.m_vAxis.size()==1 || descriptor.m_vAxis.empty())</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> coords = BuildArmComputeReductionCoordinates(aclInputInfo.num_dimensions(),</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; input.GetNumDimensions(),</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; descriptor.m_vAxis);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">return</span> arm_compute::NEReductionOperation::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(coords[0]),</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="namespacearmnn.html#a03ab984d93d0f240f31274499b72e6b0">ConvertReductionOperationToAcl</a>(descriptor),</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; descriptor.m_KeepDims);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; }</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">// Validate layer if there are multiple axes.</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> status;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="_arm_compute_utils_8hpp.html#a97d67174b2c48969547ba4bac79e5ea2">IS_MULTI_AXES_REDUCE_SUPPORTED</a>(<a class="code" href="namespacearmnn.html#aceb6d218204c4e0e7b4c968d6266917c">NeonReduceWorkloadValidate</a>, input, descriptor, status);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> status;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.html#l01556">ReduceDescriptor::m_vAxis</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01502">NeonLayerSupport::IsReduceSupported()</a>.</p>
</div>
</div>
<a id="a430021076042c8157a926a3bb3a37152"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a430021076042c8157a926a3bb3a37152">&#9670;&nbsp;</a></span>NeonReshapeWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonReshapeWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_reshape_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_neon_reshape_workload_8cpp_source.html">NeonReshapeWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::NEReshapeLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01514">NeonLayerSupport::IsReshapeSupported()</a>.</p>
</div>
</div>
<a id="a552d65f4e0a6c9e7c7796e77590063e9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a552d65f4e0a6c9e7c7796e77590063e9">&#9670;&nbsp;</a></span>NeonResizeWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonResizeWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_resize_descriptor.html">ResizeDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_resize_workload_8cpp_source.html#l00022">22</a> of file <a class="el" href="_neon_resize_workload_8cpp_source.html">NeonResizeWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">arm_compute::DataLayout</a> aclDataLayout = ConvertDataLayout(descriptor.m_DataLayout);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; aclInputInfo.set_data_layout(aclDataLayout);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; aclOutputInfo.set_data_layout(aclDataLayout);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; arm_compute::InterpolationPolicy aclInterpolationPolicy =</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="namespacearmnn.html#ae9bdcb8ac91731109dc423d6ed476204">ConvertResizeMethodToAclInterpolationPolicy</a>(descriptor.m_Method);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; arm_compute::SamplingPolicy samplingPolicy = descriptor.m_HalfPixelCenters ? arm_compute::SamplingPolicy::CENTER :</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; arm_compute::SamplingPolicy::TOP_LEFT;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">bool</span> usePadding = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> arm_compute::NEScale::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; arm_compute::ScaleKernelInfo(aclInterpolationPolicy,</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; arm_compute::BorderMode::REPLICATE,</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; arm_compute::PixelValue(0.f),</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; samplingPolicy,</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; usePadding,</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; descriptor.m_AlignCorners));</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01526">NeonLayerSupport::IsResizeSupported()</a>.</p>
</div>
</div>
<a id="a2d9594d52faca41463535cf67995c64a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2d9594d52faca41463535cf67995c64a">&#9670;&nbsp;</a></span>NeonReverseV2WorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonReverseV2WorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>axis</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_reverse_v2_workload_8cpp_source.html#l00014">14</a> of file <a class="el" href="_neon_reverse_v2_workload_8cpp_source.html">NeonReverseV2Workload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclAxis = BuildArmComputeTensorInfo(axis);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> arm_compute::NEReverse::validate(&amp;aclInput, &amp;aclOutput, &amp;aclAxis, <span class="keyword">true</span>);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01538">NeonLayerSupport::IsReverseV2Supported()</a>.</p>
</div>
</div>
<a id="aa7d1b5e38aa8cb731519ff12e2a73350"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa7d1b5e38aa8cb731519ff12e2a73350">&#9670;&nbsp;</a></span>NeonRsqrtWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonRsqrtWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_rsqrt_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_neon_rsqrt_workload_8cpp_source.html">NeonRsqrtWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::NERsqrtLayer::validate(&amp;aclInput, &amp;aclOutput);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01097">NeonLayerSupport::IsElementwiseUnarySupported()</a>.</p>
</div>
</div>
<a id="af873a38f5251d348f37f0e94a2adc400"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af873a38f5251d348f37f0e94a2adc400">&#9670;&nbsp;</a></span>NeonSinWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonSinWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_sin_workload_8cpp_source.html#l00017">17</a> of file <a class="el" href="_neon_sin_workload_8cpp_source.html">NeonSinWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> arm_compute::NESinLayer::validate(&amp;aclInput, &amp;aclOutput);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01097">NeonLayerSupport::IsElementwiseUnarySupported()</a>.</p>
</div>
</div>
<a id="a0a223c0997e3f7faa373ed55f954252b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0a223c0997e3f7faa373ed55f954252b">&#9670;&nbsp;</a></span>NeonSliceWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonSliceWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_slice_descriptor.html">SliceDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_slice_workload_8cpp_source.html#l00021">21</a> of file <a class="el" href="_neon_slice_workload_8cpp_source.html">NeonSliceWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; std::tie(starts, ends) = <a class="code" href="namespacearmnn.html#ab40e30cea5a328a3c35aa32f9b7db1c1">SetNeonSliceData</a>(descriptor.m_Begin, descriptor.m_Size);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">return</span> arm_compute::NESlice::validate(&amp;aclInputInfo, &amp;aclOutputInfo, starts, ends);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01550">NeonLayerSupport::IsSliceSupported()</a>.</p>
</div>
</div>
<a id="a4077a9771ba9c551f4ce61863f65e798"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4077a9771ba9c551f4ce61863f65e798">&#9670;&nbsp;</a></span>NeonSoftmaxWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonSoftmaxWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_softmax_descriptor.html">SoftmaxDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_softmax_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_neon_softmax_workload_8cpp_source.html">NeonSoftmaxWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.html#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(descriptor.m_Axis, input);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> arm_compute::NESoftmaxLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; descriptor.m_Beta,</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; aclAxis);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01562">NeonLayerSupport::IsSoftmaxSupported()</a>.</p>
</div>
</div>
<a id="ab29257da888af2c4971db1344d8a526c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab29257da888af2c4971db1344d8a526c">&#9670;&nbsp;</a></span>NeonSpaceToBatchNdWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonSpaceToBatchNdWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.html">SpaceToBatchNdDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_space_to_batch_nd_workload_8cpp_source.html#l00015">15</a> of file <a class="el" href="_neon_space_to_batch_nd_workload_8cpp_source.html">NeonSpaceToBatchNdWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusSpaceToBatch = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusReshapeInput = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusReshapeOutput = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; arm_compute::TensorInfo aclReshapeInputInfo = aclInputInfo;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; arm_compute::TensorInfo aclReshapeOutputInfo = aclOutputInfo;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="comment">// When a spacial dimension is missing (rank=3) set W to 1</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rank = input.GetNumDimensions();</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">if</span> (rank == 3)</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; {</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorShape inputShape = aclInputInfo.tensor_shape();</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> arm_compute::TensorShape outputShape = aclOutputInfo.tensor_shape();</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">if</span> (descriptor.m_DataLayout == <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="comment">// In ACL dimensions are right to left: C, W, H, N</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; aclReshapeInputInfo.set_tensor_shape({inputShape.x(), 1, inputShape.y(), inputShape.z()});</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; aclReshapeOutputInfo.set_tensor_shape({outputShape.x(), 1, outputShape.y(), outputShape.z()});</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (descriptor.m_DataLayout == <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>)</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">// In ACL dimensions are right to left: W, H, C, N</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; aclReshapeInputInfo.set_tensor_shape({1, inputShape.x(), inputShape.y(), inputShape.z()});</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; aclReshapeOutputInfo.set_tensor_shape({1, outputShape.x(), outputShape.y(), outputShape.z()});</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported or unknown DataLayout&quot;</span>, <a class="code" href="_exceptions_8hpp.html#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>());</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; statusReshapeInput = arm_compute::NEReshapeLayer::validate(&amp;aclInputInfo, &amp;aclReshapeInputInfo);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; statusReshapeOutput = arm_compute::NEReshapeLayer::validate(&amp;aclReshapeOutputInfo, &amp;aclOutputInfo);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; }</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="comment">// ArmNN blockShape is [H, W] ACl asks for W, H</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; int32_t blockHeight = armnn::numeric_cast&lt;int32_t&gt;(descriptor.m_BlockShape[0]);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; int32_t blockWidth = (rank == 3) ? 1 : armnn::numeric_cast&lt;int32_t&gt;(descriptor.m_BlockShape[1]);</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> padLeft = (rank == 3) ? 0 : descriptor.m_PadList[1].first;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> padRight = (rank == 3) ? 0 : descriptor.m_PadList[1].second;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; arm_compute::Size2D paddingLeftTop = BuildArmComputeSize2D(padLeft,</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; descriptor.m_PadList[0].first);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; arm_compute::Size2D paddingRightBottom = BuildArmComputeSize2D(padRight,</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; descriptor.m_PadList[0].second);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; statusSpaceToBatch = arm_compute::NESpaceToBatchLayer::validate(rank == 3 ? &amp;aclReshapeInputInfo : &amp;aclInputInfo,</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; blockWidth,</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; blockHeight,</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; paddingLeftTop,</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; paddingRightBottom,</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; rank == 3 ? &amp;aclReshapeOutputInfo : &amp;aclOutputInfo);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">if</span> (statusReshapeInput.error_code() == arm_compute::ErrorCode::OK &amp;&amp;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; statusReshapeOutput.error_code() == arm_compute::ErrorCode::OK &amp;&amp;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; statusSpaceToBatch.error_code() == arm_compute::ErrorCode::OK)</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="stringliteral">&quot;All SpaceToBatch layers validate status OK.&quot;</span>);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="stringliteral">&quot;SpaceToBatch layer validate status failed.&quot;</span></div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; + statusSpaceToBatch.error_description()</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; + statusReshapeInput.error_description()</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; + statusReshapeOutput.error_description());</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01570">NeonLayerSupport::IsSpaceToBatchNdSupported()</a>.</p>
</div>
</div>
<a id="af6d2d40482240def4614deb694933d1e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af6d2d40482240def4614deb694933d1e">&#9670;&nbsp;</a></span>NeonSpaceToDepthWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonSpaceToDepthWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.html">SpaceToDepthDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_space_to_depth_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_neon_space_to_depth_workload_8cpp_source.html">NeonSpaceToDepthWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = descriptor.m_DataLayout;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input, dataLayout);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output, dataLayout);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; int32_t blockSize = armnn::numeric_cast&lt;int32_t&gt;(descriptor.m_BlockSize);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> arm_compute::NESpaceToDepthLayer::validate(&amp;aclInput, &amp;aclOutput, blockSize);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.html#l01095">SpaceToDepthDescriptor::m_DataLayout</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01582">NeonLayerSupport::IsSpaceToDepthSupported()</a>.</p>
</div>
</div>
<a id="aab5ea316b3decb05430323d847e3a773"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aab5ea316b3decb05430323d847e3a773">&#9670;&nbsp;</a></span>NeonSplitterWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonSplitterWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; std::reference_wrapper&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>outputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>splitAxis</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_splitter_workload_8cpp_source.html#l00033">33</a> of file <a class="el" href="_neon_splitter_workload_8cpp_source.html">NeonSplitterWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;{</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">size_t</span> numOutputs = outputs.size();</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; aclOutputs;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; aclOutputs.reserve(numOutputs);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; aclOutputPtr;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; aclOutputPtr.reserve(numOutputs);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0u; i &lt; outputs.size(); ++i)</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; aclOutputs.emplace_back(BuildArmComputeTensorInfo(outputs[i]));</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; aclOutputPtr.emplace_back(&amp;aclOutputs.back());</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxis = CalcAclAxis(input.GetNumDimensions(), splitAxis);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">return</span> arm_compute::NESplit::validate(&amp;aclInputInfo, aclOutputPtr, aclAxis);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01594">NeonLayerSupport::IsSplitterSupported()</a>.</p>
</div>
</div>
<a id="a5fadc539a1a3c35c4a6138bf6e970e4c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5fadc539a1a3c35c4a6138bf6e970e4c">&#9670;&nbsp;</a></span>NeonSqrtWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonSqrtWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_sqrt_workload_8cpp_source.html#l00018">18</a> of file <a class="el" href="_neon_sqrt_workload_8cpp_source.html">NeonSqrtWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; ActivationDescriptor descriptor;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; descriptor.m_Function = ActivationFunction::Sqrt;</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(descriptor);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> arm_compute::NEActivationLayer::validate(&amp;aclInput, &amp;aclOutput, activationLayerInfo);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01097">NeonLayerSupport::IsElementwiseUnarySupported()</a>.</p>
</div>
</div>
<a id="add549d4deb11580fc32d17fb38b309b4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#add549d4deb11580fc32d17fb38b309b4">&#9670;&nbsp;</a></span>NeonStackWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonStackWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>inputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_stack_descriptor.html">StackDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_stack_workload_8cpp_source.html#l00027">27</a> of file <a class="el" href="_neon_stack_workload_8cpp_source.html">NeonStackWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; aclInputs;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> TensorInfo* input : inputs)</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; {</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(*input, <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; aclInputs.emplace_back(aclInputInfo);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; aclInputPtrs;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">for</span> (arm_compute::ITensorInfo&amp; input : aclInputs)</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; aclInputPtrs.emplace_back(&amp;input);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">int</span> aclAxis = CalcAxis(descriptor.m_Axis, descriptor.m_InputShape.GetNumDimensions());</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> arm_compute::NEStackLayer::validate(aclInputPtrs, aclAxis, &amp;aclOutputInfo);</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01627">NeonLayerSupport::IsStackSupported()</a>.</p>
</div>
</div>
<a id="ac71d08bf1257807c112b4d019802acc3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac71d08bf1257807c112b4d019802acc3">&#9670;&nbsp;</a></span>NeonStridedSliceWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonStridedSliceWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.html">StridedSliceDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_strided_slice_workload_8cpp_source.html#l00019">19</a> of file <a class="el" href="_neon_strided_slice_workload_8cpp_source.html">NeonStridedSliceWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input,</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; descriptor.m_DataLayout);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output,</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; descriptor.m_DataLayout);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> strides;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; std::tie(starts, ends, strides) = <a class="code" href="namespacearmnn.html#a01d1e745f360ccd0b655214645bcef32">SetNeonStridedSliceData</a>(descriptor.m_Begin,</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; descriptor.m_End,</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; descriptor.m_Stride);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">auto</span> numDimensions = armnn::numeric_cast&lt;int&gt;(input.GetNumDimensions());</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; int32_t begin_mask = <a class="code" href="namespacearmnn.html#ad69ffa576a596b9eb20ab6a41420c541">ConvertMaskToACLFormat</a>(descriptor.m_BeginMask, numDimensions);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; int32_t end_mask = <a class="code" href="namespacearmnn.html#ad69ffa576a596b9eb20ab6a41420c541">ConvertMaskToACLFormat</a>(descriptor.m_EndMask, numDimensions);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; int32_t shrink_axis_mask = <a class="code" href="namespacearmnn.html#ad69ffa576a596b9eb20ab6a41420c541">ConvertMaskToACLFormat</a>(descriptor.m_ShrinkAxisMask, numDimensions);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> arm_compute::NEStridedSlice::validate(&amp;aclInput,</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; &amp;aclOutput,</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; starts,</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; ends,</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; strides,</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; begin_mask,</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; end_mask,</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; shrink_axis_mask);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01639">NeonLayerSupport::IsStridedSliceSupported()</a>.</p>
</div>
</div>
<a id="abc968e1323027f9e42cbc7642800d5ce"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abc968e1323027f9e42cbc7642800d5ce">&#9670;&nbsp;</a></span>NeonSubtractionWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonSubtractionWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.html">ActivationDescriptor</a> *&#160;</td>
<td class="paramname"><em>activationDescriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_subtraction_workload_8cpp_source.html#l00022">22</a> of file <a class="el" href="_neon_subtraction_workload_8cpp_source.html">NeonSubtractionWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;{</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; activationDescriptor);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">return</span> arm_compute::NEArithmeticSubtraction::validate(&amp;aclInput0,</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; &amp;aclInput1,</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; &amp;aclOutput,</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; arm_compute::ConvertPolicy::SATURATE,</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; activationInfo);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l00184">IsLayerTypeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01651">NeonLayerSupport::IsSubtractionSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.html#l00144">NeonBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="aad5d4888304a57fb22c4608dc5d94dc1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aad5d4888304a57fb22c4608dc5d94dc1">&#9670;&nbsp;</a></span>NeonTensorHandleFactoryId()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::NeonTensorHandleFactoryId </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</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.html#l00014">14</a> of file <a class="el" href="_neon_tensor_handle_factory_8hpp_source.html">NeonTensorHandleFactory.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;Arm/Neon/TensorHandleFactory&quot;</span>; }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_tensor_handle_factory_8cpp_source.html#l00089">NeonTensorHandleFactory::GetIdStatic()</a>.</p>
</div>
</div>
<a id="a12d32ef8b1e050744b79caff6252503a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a12d32ef8b1e050744b79caff6252503a">&#9670;&nbsp;</a></span>NeonTileWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonTileWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_tile_descriptor.html">TileDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_tile_workload_8cpp_source.html#l00014">14</a> of file <a class="el" href="_neon_tile_workload_8cpp_source.html">NeonTileWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; std::vector&lt;unsigned int&gt; aclMultiples = descriptor.m_Multiples;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; std::reverse(aclMultiples.begin(),aclMultiples.end());</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">return</span> arm_compute::NETile::validate(&amp;aclInput, &amp;aclOutput, aclMultiples);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01664">NeonLayerSupport::IsTileSupported()</a>.</p>
</div>
</div>
<a id="abc73c3c9a09f91c22c64d7c166e9be4d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abc73c3c9a09f91c22c64d7c166e9be4d">&#9670;&nbsp;</a></span>NeonTransposeConvolution2dWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonTransposeConvolution2dWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.html">TransposeConvolution2dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>weights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>biases</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_transpose_convolution2d_workload_8cpp_source.html#l00025">25</a> of file <a class="el" href="_neon_transpose_convolution2d_workload_8cpp_source.html">NeonTransposeConvolution2dWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; arm_compute::TensorInfo aclBiasesInfo;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; biases.has_value(),</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="stringliteral">&quot;NeonTransposeConvolution2dWorkload: Bias was enabled in the descriptor but no value was supplied.&quot;</span>);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; }</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; arm_compute::PadStrideInfo layerInfo = BuildArmComputePadStrideInfo(descriptor);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> arm_compute::NEDeconvolutionLayer::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; &amp;aclWeightsInfo,</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; optionalAclBiasesInfo,</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; layerInfo);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01676">NeonLayerSupport::IsTransposeConvolution2dSupported()</a>.</p>
</div>
</div>
<a id="a2b8555526752015115fa7fa00d88542b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2b8555526752015115fa7fa00d88542b">&#9670;&nbsp;</a></span>NeonTransposeWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonTransposeWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_transpose_descriptor.html">TransposeDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_transpose_workload_8cpp_source.html#l00015">15</a> of file <a class="el" href="_neon_transpose_workload_8cpp_source.html">NeonTransposeWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.html">armnn::PermutationVector</a>&amp; mappings = descriptor.m_DimMappings;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::NEPermute::validate(&amp;aclInputInfo, &amp;aclOutputInfo,</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; armcomputetensorutils::BuildArmComputeTransposeVector(mappings));</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01692">NeonLayerSupport::IsTransposeSupported()</a>.</p>
</div>
</div>
<a id="a963622d85527f420f0b922ef27de4f6b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a963622d85527f420f0b922ef27de4f6b">&#9670;&nbsp;</a></span>NeonUnidirectionalSequenceLstmFloatWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonUnidirectionalSequenceLstmFloatWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>cellStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>cellStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#ae6c5f1b51bd32133c4dcc632045d6b58">UnidirectionalSequenceLstmDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_input_params_info.html">LstmInputParamsInfo</a> &amp;&#160;</td>
<td class="paramname"><em>paramsInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_unidirectional_sequence_lstm_float_workload_8cpp_source.html#l00510">510</a> of file <a class="el" href="_neon_unidirectional_sequence_lstm_float_workload_8cpp_source.html">NeonUnidirectionalSequenceLstmFloatWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;{</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; TensorShape inputLayerShape = input.GetShape();</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; TensorShape outputLayerShape = output.GetShape();</div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; </div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">if</span> (inputLayerShape.GetNumDimensions() != 3)</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; {</div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="stringliteral">&quot;Unidirectional Sequence LSTM layer validate status failed.&quot;</span>);</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; }</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; </div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxTime = descriptor.m_TimeMajor ? inputLayerShape[0] : inputLayerShape[1];</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchSize = descriptor.m_TimeMajor ? inputLayerShape[1] : inputLayerShape[0];</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputSize = inputLayerShape[2];</div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputSize = outputLayerShape[2];</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; </div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeInput({maxTime, batchSize, inputSize});</div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeOutput({maxTime, batchSize, outputSize});</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; </div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute1 = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="stringliteral">&quot;Permute1 status&quot;</span>);</div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusSplit = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="stringliteral">&quot;Split status&quot;</span>);</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusLSTM = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="stringliteral">&quot;LSTM status&quot;</span>);</div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusConcat = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="stringliteral">&quot;Concat status&quot;</span>);</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute2 = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="stringliteral">&quot;Permute2 status&quot;</span>);</div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; </div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; </div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="comment">// Permute validate</span></div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; TensorInfo permuteOutInfo = <a class="code" href="namespacearmnn_utils.html#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(input, { 1U, 0U, 2U });</div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; arm_compute::TensorInfo aclPermuteOutInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permuteOutInfo);</div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; {</div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; statusPermute1 = arm_compute::NEPermute::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; &amp;aclPermuteOutInfo,</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; }</div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; </div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="comment">// Split and Concat Tensors validate</span></div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; splitterOutputsTensorInfos;</div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; concatInputsTensorInfos;</div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; splitterOutputsTensorInfosPtr;</div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; std::vector&lt;const arm_compute::ITensorInfo*&gt; concatInputsTensorInfosPtr;</div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; splitterOutputsTensorInfos.reserve(maxTime);</div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; concatInputsTensorInfos.reserve(maxTime);</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; {</div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; arm_compute::TensorInfo splitter_out;</div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; arm_compute::TensorInfo concat_in;</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; </div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keyword">auto</span> splitterTensorInfo = TensorInfo(input);</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keyword">auto</span> concatTensorInfo = TensorInfo(output);</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; splitterTensorInfo.SetShape({batchSize, inputSize});</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; concatTensorInfo.SetShape({batchSize, outputSize});</div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; </div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; arm_compute::TensorInfo aclSplitterTensorInfo</div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(splitterTensorInfo);</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; arm_compute::TensorInfo aclConcatTensorInfo</div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(concatTensorInfo);</div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; </div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; splitterOutputsTensorInfos.emplace_back(aclSplitterTensorInfo);</div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; concatInputsTensorInfos.emplace_back(aclConcatTensorInfo);</div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; splitterOutputsTensorInfosPtr.emplace_back(&amp;splitterOutputsTensorInfos[i]);</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; concatInputsTensorInfosPtr.emplace_back(&amp;concatInputsTensorInfos[i]);</div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; }</div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; </div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="comment">// Split validate</span></div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numberDimensions = 3;</div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimension = 0; <span class="comment">// splitting on 0-dimension (i.e. maxTime dimension)</span></div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisSplit = CalcAclAxis(numberDimensions, dimension);</div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; </div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">if</span> (maxTime != 1) <span class="comment">// ACL split does not work with only one element to split.</span></div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; {</div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; {</div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; statusSplit = arm_compute::NESplit::validate(&amp;aclPermuteOutInfo,</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; splitterOutputsTensorInfosPtr,</div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; aclAxisSplit);</div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; }</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; {</div>
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; statusSplit = arm_compute::NESplit::validate(&amp;aclInputInfo, splitterOutputsTensorInfosPtr, aclAxisSplit);</div>
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; }</div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; }</div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; </div>
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="comment">// LSTM validate</span></div>
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; </div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; lstm_params_info;</div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; </div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numUnits = cellStateIn.GetShape()[1];</div>
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> scratchBufferFactor = 4;</div>
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; </div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordflow">if</span> (descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; {</div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="comment">// scratchBuffer = { batchSize, numUnits * 3 } with CIFG</span></div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; scratchBufferFactor = 3;</div>
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; }</div>
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; </div>
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keyword">const</span> TensorInfo&amp; scratchBuffer = TensorInfo({ batchSize, numUnits * scratchBufferFactor }, input.GetDataType());</div>
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; </div>
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="comment">// The inputs and outputs</span></div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div>
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; </div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="comment">// Basic parameters</span></div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div>
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div>
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div>
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div>
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; </div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div>
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div>
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div>
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; </div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div>
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div>
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div>
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; </div>
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; </div>
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; {</div>
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div>
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; {</div>
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; }</div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; </div>
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; lstm_params_info.set_cifg_params(&amp;aclInputToInputWeightsInfo,</div>
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; &amp;aclRecurrentToInputWeightsInfo,</div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; descriptor.m_PeepholeEnabled ? &amp;aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; &amp;aclInputGateBiasInfo);</div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; }</div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; </div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div>
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; {</div>
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; {</div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; }</div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; </div>
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; lstm_params_info.set_projection_params(&amp;aclProjectionWeightsInfo,</div>
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; paramsInfo.m_ProjectionBias ? &amp;aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; }</div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; </div>
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div>
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; {</div>
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div>
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; </div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; lstm_params_info.set_peephole_params(&amp;aclCellToForgetWeightsInfo, &amp;aclCellToOutputWeightsInfo);</div>
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; }</div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; </div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div>
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; {</div>
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; {</div>
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div>
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; }</div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div>
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div>
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div>
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; </div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ? <span class="keyword">nullptr</span> :</div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; &amp;aclInputLayerNormWeightsInfo,</div>
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div>
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</div>
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; }</div>
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; </div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="comment">// Need to be set at negative threshold to be compatible for ACL</span></div>
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div>
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</div>
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; </div>
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; arm_compute::ActivationLayerInfo activationLayerInfo =</div>
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <a class="code" href="namespacearmnn.html#aa1e93ef5f9ee3dbb5e7faa9578f180ae">ConvertLstmActivationFuncToAclLayerInfo</a>(descriptor.m_ActivationFunc);</div>
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; </div>
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <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="l00733"></a><span class="lineno"> 733</span>&#160; {</div>
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; </div>
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="comment">// Set LSTM input and output ITensors depending on:</span></div>
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="comment">// input format (timeMajor) &amp; number of LSTM batches (maxTime).</span></div>
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; arm_compute::ITensorInfo* outputLSTM;</div>
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; arm_compute::ITensorInfo* inputLSTM;</div>
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; </div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="comment">// If there is only one LSTM time major batch, we will not concat OR permute.</span></div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="comment">// Set input of LSTM to be first input ITensor.</span></div>
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="comment">// Set output of LSTM to be final output ITensor.</span></div>
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="comment">// LSTM input/output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div>
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; {</div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.html#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclInputInfo.tensor_shape(), 1U);</div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; TensorShape outputShape = <a class="code" href="namespacearmnn_utils.html#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclOutputInfo.tensor_shape(), 1U);</div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; </div>
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div>
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; TensorShape outputShapeShrink({outputShape[1], outputShape[2]});</div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; </div>
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div>
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="keyword">auto</span> acl_output_shape_shrink = BuildArmComputeTensorShape(outputShapeShrink);</div>
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; </div>
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(acl_input_shape_shrink);</div>
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; inputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo);</div>
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; </div>
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo)-&gt;set_tensor_shape(acl_output_shape_shrink);</div>
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo);</div>
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; }</div>
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="comment">// If there is only one LSTM batch major batch, we will not concat, only permute.</span></div>
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="comment">// Set input of LSTM to be output of initial permute.</span></div>
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="comment">// Set output of LSTM to be first element of m_ConcatInputs &amp; use that value later in permute.</span></div>
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <span class="comment">// LSTM output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div>
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; !descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; {</div>
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.html#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclPermuteOutInfo.tensor_shape(), 1U);</div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; aclPermuteOutInfo.set_tensor_shape(acl_input_shape_shrink);</div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; inputLSTM = &amp;aclPermuteOutInfo;</div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; </div>
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</div>
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; }</div>
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="comment">// Batch major AND/OR 2+ LSTM batches so will use concat AND/OR permute later on.</span></div>
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; {</div>
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; inputLSTM = splitterOutputsTensorInfosPtr[i];</div>
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</div>
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; }</div>
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; </div>
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; statusLSTM = arm_compute::NELSTMLayer::validate(inputLSTM,</div>
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; &amp;aclInputToForgetWeightsInfo,</div>
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; &amp;aclInputToCellWeightsInfo,</div>
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; &amp;aclInputToOutputWeightsInfo,</div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div>
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div>
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; &amp;aclForgetGateBiasInfo,</div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; &amp;aclCellBiasInfo,</div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; &amp;aclOutputGateBiasInfo,</div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; &amp;aclOutputStateInInfo,</div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; &amp;aclCellStateInInfo,</div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; &amp;aclScratchBufferInfo,</div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; &amp;aclOutputStateOutInfo,</div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; &amp;aclCellStateOutInfo,</div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; outputLSTM,</div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; lstm_params_info,</div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; activationLayerInfo,</div>
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; cell_threshold,</div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; projection_threshold);</div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; </div>
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">if</span> (statusLSTM.error_code() != arm_compute::ErrorCode::OK)</div>
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; {</div>
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; }</div>
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; }</div>
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; </div>
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="comment">// Concat validate</span></div>
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; </div>
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="comment">// Expand dimensions of LSTM outputs adding one empty dimension to fit concatenate inputs.</span></div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; TensorShape shape = <a class="code" href="namespacearmnn_utils.html#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(concatInputsTensorInfosPtr[0]-&gt;tensor_shape(), 1U);</div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; TensorShape shapeExpandTimeMajor({1, shape[0], shape[1]});</div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; TensorShape shapeExpandBatchMajor({shape[0], 1, shape[1]});</div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; </div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; TensorInfo concatOutputTensorInfo = TensorInfo(output);</div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; concatOutputTensorInfo.SetShape(timeMajorShapeOutput);</div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; arm_compute::TensorInfo aclConcatOutputTensorInfo= BuildArmComputeTensorInfo(concatOutputTensorInfo);</div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; </div>
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="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="l00823"></a><span class="lineno"> 823</span>&#160; {</div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; {</div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="keyword">auto</span> acl_shape_expand = BuildArmComputeTensorShape(shapeExpandTimeMajor);</div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; concatInputsTensorInfos[i].set_tensor_shape(acl_shape_expand);</div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; }</div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; </div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisConcat = CalcAclAxis(numberDimensions, dimension);</div>
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; {</div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; &amp;aclConcatOutputTensorInfo,</div>
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; aclAxisConcat);</div>
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; }</div>
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; {</div>
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div>
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; aclAxisConcat);</div>
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; }</div>
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; }</div>
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="comment">// If only one LSTM batch, we do not concat and/or permute.</span></div>
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="comment">// Must ensure final output info is expanded to correct batch major dimensions.</span></div>
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; {</div>
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; {</div>
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div>
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; BuildArmComputeTensorShape(shapeExpandBatchMajor));</div>
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; }</div>
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; {</div>
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div>
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; BuildArmComputeTensorShape(shapeExpandTimeMajor));</div>
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; }</div>
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; }</div>
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; </div>
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="comment">// Permute validate</span></div>
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; {</div>
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; <span class="comment">// Output now time major. Permute output back to batch major.</span></div>
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; <span class="keywordflow">if</span> (maxTime != 1)</div>
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; {</div>
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; statusPermute2 = arm_compute::NEPermute::validate(&amp;aclConcatOutputTensorInfo,</div>
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div>
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; }</div>
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; {</div>
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; statusPermute2 = arm_compute::NEPermute::validate(concatInputsTensorInfosPtr[0],</div>
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div>
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; }</div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; }</div>
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; </div>
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="keywordflow">if</span> (statusPermute1.error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; statusSplit.error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; statusLSTM .error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; statusConcat.error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; statusPermute2.error_code() == okCode)</div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; {</div>
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <span class="stringliteral">&quot;All Unidirectional Sequence LSTM layer validate status OK.&quot;</span>);</div>
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; }</div>
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; {</div>
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <span class="stringliteral">&quot;Unidirectional Sequence LSTM layer validate status failed.&quot;</span>);</div>
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; }</div>
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8cpp_source.html#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, and <a class="el" href="_descriptors_8hpp_source.html#l01154">LstmDescriptor::m_TimeMajor</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01700">NeonLayerSupport::IsUnidirectionalSequenceLstmSupported()</a>.</p>
</div>
</div>
<a id="a42561b8004ee341ac089d5f1657120db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a42561b8004ee341ac089d5f1657120db">&#9670;&nbsp;</a></span>NeonUnidirectionalSequenceLstmWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">arm_compute::Status NeonUnidirectionalSequenceLstmWorkloadValidate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>cellStateIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>cellStateOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#ae6c5f1b51bd32133c4dcc632045d6b58">UnidirectionalSequenceLstmDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_input_params_info.html">LstmInputParamsInfo</a> &amp;&#160;</td>
<td class="paramname"><em>paramsInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_unidirectional_sequence_lstm_workload_8cpp_source.html#l00491">491</a> of file <a class="el" href="_neon_unidirectional_sequence_lstm_workload_8cpp_source.html">NeonUnidirectionalSequenceLstmWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;{</div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; TensorShape inputLayerShape = input.GetShape();</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; TensorShape outputLayerShape = output.GetShape();</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; </div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">if</span> (inputLayerShape.GetNumDimensions() != 3)</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; {</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="stringliteral">&quot;Unidirectional Sequence LSTM layer validate status failed.&quot;</span>);</div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; }</div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; </div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxTime = descriptor.m_TimeMajor ? inputLayerShape[0] : inputLayerShape[1];</div>
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchSize = descriptor.m_TimeMajor ? inputLayerShape[1] : inputLayerShape[0];</div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputSize = inputLayerShape[2];</div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputSize = outputLayerShape[2];</div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; </div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeInput({maxTime, batchSize, inputSize});</div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeOutput({maxTime, batchSize, outputSize});</div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; </div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute1 = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="stringliteral">&quot;Permute1 status&quot;</span>);</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusSplit = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="stringliteral">&quot;Split status&quot;</span>);</div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusLSTM = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="stringliteral">&quot;LSTM status&quot;</span>);</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusConcat = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="stringliteral">&quot;Concat status&quot;</span>);</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute2 = <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="stringliteral">&quot;Permute2 status&quot;</span>);</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; </div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; </div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="comment">// Permute validate</span></div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; TensorInfo permuteOutInfo = <a class="code" href="namespacearmnn_utils.html#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(input, { 1U, 0U, 2U });</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; arm_compute::TensorInfo aclPermuteOutInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permuteOutInfo);</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; {</div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; statusPermute1 = arm_compute::NEPermute::validate(&amp;aclInputInfo,</div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; &amp;aclPermuteOutInfo,</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; }</div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; </div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="comment">// Split and Concat Tensors validate</span></div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; splitterOutputsTensorInfos;</div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; concatInputsTensorInfos;</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; splitterOutputsTensorInfosPtr;</div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; std::vector&lt;const arm_compute::ITensorInfo*&gt; concatInputsTensorInfosPtr;</div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; splitterOutputsTensorInfos.reserve(maxTime);</div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; concatInputsTensorInfos.reserve(maxTime);</div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; {</div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; arm_compute::TensorInfo splitter_out;</div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; arm_compute::TensorInfo concat_in;</div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; </div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keyword">auto</span> splitterTensorInfo = TensorInfo(input);</div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keyword">auto</span> concatTensorInfo = TensorInfo(output);</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; splitterTensorInfo.SetShape({batchSize, inputSize});</div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; concatTensorInfo.SetShape({batchSize, outputSize});</div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; </div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; arm_compute::TensorInfo aclSplitterTensorInfo</div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(splitterTensorInfo);</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; arm_compute::TensorInfo aclConcatTensorInfo</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(concatTensorInfo);</div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; </div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; splitterOutputsTensorInfos.emplace_back(aclSplitterTensorInfo);</div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; concatInputsTensorInfos.emplace_back(aclConcatTensorInfo);</div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; splitterOutputsTensorInfosPtr.emplace_back(&amp;splitterOutputsTensorInfos[i]);</div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; concatInputsTensorInfosPtr.emplace_back(&amp;concatInputsTensorInfos[i]);</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; }</div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; </div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="comment">// Split validate</span></div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numberDimensions = 3;</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimension = 0; <span class="comment">// splitting on 0-dimension (i.e. maxTime dimension)</span></div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisSplit = CalcAclAxis(numberDimensions, dimension);</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; </div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordflow">if</span> (maxTime != 1) <span class="comment">// ACL split does not work with only one element to split.</span></div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; {</div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; {</div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; statusSplit = arm_compute::NESplit::validate(&amp;aclPermuteOutInfo,</div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; splitterOutputsTensorInfosPtr,</div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; aclAxisSplit);</div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; } <span class="keywordflow">else</span></div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; {</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; statusSplit = arm_compute::NESplit::validate(&amp;aclInputInfo, splitterOutputsTensorInfosPtr, aclAxisSplit);</div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; }</div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; }</div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; </div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="comment">// LSTM validate</span></div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; </div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; lstm_params_info;</div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; </div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numUnits = cellStateIn.GetShape()[1];</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> scratchBufferFactor = 4;</div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; </div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keywordflow">if</span> (descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; {</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="comment">// scratchBuffer = { batchSize, numUnits * 3 } with CIFG</span></div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; scratchBufferFactor = 3;</div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; }</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; </div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="keyword">const</span> TensorInfo&amp; scratchBuffer = TensorInfo({ batchSize, numUnits * scratchBufferFactor }, input.GetDataType());</div>
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; </div>
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; </div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; lstm_params_info.set_cell_clip_params(descriptor.m_ClippingThresCell);</div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; lstm_params_info.set_projection_clip_params(descriptor.m_ClippingThresProj);</div>
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="comment">// The inputs and outputs</span></div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div>
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; </div>
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="comment">// Basic parameters</span></div>
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div>
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div>
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div>
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div>
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div>
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div>
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; </div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div>
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div>
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div>
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div>
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; </div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; </div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; {</div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; {</div>
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div>
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; }</div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; </div>
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; lstm_params_info.set_cifg_params(&amp;aclInputToInputWeightsInfo,</div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; &amp;aclRecurrentToInputWeightsInfo,</div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; descriptor.m_PeepholeEnabled ? &amp;aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; &amp;aclInputGateBiasInfo);</div>
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; }</div>
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; </div>
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div>
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; {</div>
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; {</div>
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div>
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; }</div>
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; </div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; lstm_params_info.set_projection_params(&amp;aclProjectionWeightsInfo,</div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; paramsInfo.m_ProjectionBias ? &amp;aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; }</div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; </div>
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div>
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; {</div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; </div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; lstm_params_info.set_peephole_params(&amp;aclCellToForgetWeightsInfo, &amp;aclCellToOutputWeightsInfo);</div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; }</div>
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; </div>
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; {</div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; {</div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; }</div>
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div>
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; </div>
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ? <span class="keyword">nullptr</span> :</div>
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; &amp;aclInputLayerNormWeightsInfo,</div>
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div>
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; }</div>
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; </div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; lstm_params_info.set_matmul_scale_params(descriptor.m_InputIntermediateScale,</div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; descriptor.m_ForgetIntermediateScale,</div>
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; descriptor.m_CellIntermediateScale,</div>
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; descriptor.m_OutputIntermediateScale);</div>
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; </div>
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; lstm_params_info.set_hidden_state_params(descriptor.m_HiddenStateZeroPoint, descriptor.m_HiddenStateScale);</div>
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; </div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <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="l00715"></a><span class="lineno"> 715</span>&#160; {</div>
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; </div>
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="comment">// Set LSTM input and output ITensors depending on:</span></div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="comment">// input format (timeMajor) &amp; number of LSTM batches (maxTime).</span></div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; arm_compute::ITensorInfo* outputLSTM;</div>
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; arm_compute::ITensorInfo* inputLSTM;</div>
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; </div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="comment">// If there is only one LSTM time major batch, we will not concat OR permute.</span></div>
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="comment">// Set input of LSTM to be first input ITensor.</span></div>
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="comment">// Set output of LSTM to be final output ITensor.</span></div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="comment">// LSTM input/output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div>
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; {</div>
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.html#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclInputInfo.tensor_shape(), 1U);</div>
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; TensorShape outputShape = <a class="code" href="namespacearmnn_utils.html#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclOutputInfo.tensor_shape(), 1U);</div>
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; </div>
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div>
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; TensorShape outputShapeShrink({outputShape[1], outputShape[2]});</div>
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; </div>
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div>
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keyword">auto</span> acl_output_shape_shrink = BuildArmComputeTensorShape(outputShapeShrink);</div>
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; </div>
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(acl_input_shape_shrink);</div>
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; inputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo);</div>
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; </div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo)-&gt;set_tensor_shape(acl_output_shape_shrink);</div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo);</div>
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; }</div>
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="comment">// If there is only one LSTM batch major batch, we will not concat, only permute.</span></div>
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="comment">// Set input of LSTM to be output of initial permute.</span></div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="comment">// Set output of LSTM to be first element of m_ConcatInputs &amp; use that value later in permute.</span></div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="comment">// LSTM output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; !descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; {</div>
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.html#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclPermuteOutInfo.tensor_shape(), 1U);</div>
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div>
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; aclPermuteOutInfo.set_tensor_shape(acl_input_shape_shrink);</div>
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; inputLSTM = &amp;aclPermuteOutInfo;</div>
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; </div>
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</div>
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; }</div>
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="comment">// Batch major AND/OR 2+ LSTM batches so will use concat AND/OR permute later on.</span></div>
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; {</div>
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; inputLSTM = splitterOutputsTensorInfosPtr[i];</div>
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</div>
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; }</div>
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; </div>
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; statusLSTM = arm_compute::NEQLSTMLayer::validate(inputLSTM,</div>
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; &amp;aclInputToForgetWeightsInfo,</div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; &amp;aclInputToCellWeightsInfo,</div>
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; &amp;aclInputToOutputWeightsInfo,</div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; &amp;aclForgetGateBiasInfo,</div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; &amp;aclCellBiasInfo,</div>
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; &amp;aclOutputGateBiasInfo,</div>
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; &amp;aclCellStateInInfo,</div>
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; &amp;aclOutputStateInInfo,</div>
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; &amp;aclCellStateOutInfo,</div>
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; &amp;aclOutputStateOutInfo,</div>
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; outputLSTM,</div>
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; lstm_params_info);</div>
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; }</div>
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; </div>
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="comment">// Concat validate</span></div>
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; </div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <span class="comment">// Expand dimensions of LSTM outputs adding one empty dimension to fit concatenate inputs.</span></div>
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; TensorShape shape = <a class="code" href="namespacearmnn_utils.html#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(concatInputsTensorInfosPtr[0]-&gt;tensor_shape(), 1U);</div>
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; TensorShape shapeExpandTimeMajor({1, shape[0], shape[1]});</div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; TensorShape shapeExpandBatchMajor({shape[0], 1, shape[1]});</div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; </div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; TensorInfo concatOutputTensorInfo = TensorInfo(output);</div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; concatOutputTensorInfo.SetShape(timeMajorShapeOutput);</div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; arm_compute::TensorInfo aclConcatOutputTensorInfo= BuildArmComputeTensorInfo(concatOutputTensorInfo);</div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; </div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">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="l00796"></a><span class="lineno"> 796</span>&#160; {</div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; {</div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keyword">auto</span> acl_shape_expand = BuildArmComputeTensorShape(shapeExpandTimeMajor);</div>
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; concatInputsTensorInfos[i].set_tensor_shape(acl_shape_expand);</div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; }</div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; </div>
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisConcat = CalcAclAxis(numberDimensions, dimension);</div>
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; {</div>
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div>
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; &amp;aclConcatOutputTensorInfo,</div>
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; aclAxisConcat);</div>
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; }</div>
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; {</div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div>
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; aclAxisConcat);</div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; }</div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; }</div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="comment">// If only one LSTM batch, we do not concat and/or permute.</span></div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="comment">// Must ensure final output info is expanded to correct batch major dimensions.</span></div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; {</div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; {</div>
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; BuildArmComputeTensorShape(shapeExpandBatchMajor));</div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; }</div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; {</div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; BuildArmComputeTensorShape(shapeExpandTimeMajor));</div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; }</div>
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; }</div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; </div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="comment">// Permute validate</span></div>
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; {</div>
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="comment">// Output now time major. Permute output back to batch major.</span></div>
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <span class="keywordflow">if</span> (maxTime != 1)</div>
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; {</div>
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; statusPermute2 = arm_compute::NEPermute::validate(&amp;aclConcatOutputTensorInfo,</div>
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div>
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; }</div>
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; {</div>
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; statusPermute2 = arm_compute::NEPermute::validate(concatInputsTensorInfosPtr[0],</div>
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; &amp;aclOutputInfo,</div>
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div>
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; }</div>
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; }</div>
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; </div>
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div>
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <span class="keywordflow">if</span> (statusPermute1.error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; statusSplit.error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; statusLSTM .error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; statusConcat.error_code() == okCode &amp;&amp;</div>
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; statusPermute2.error_code() == okCode)</div>
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; {</div>
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="stringliteral">&quot;All Unidirectional Sequence LSTM layer validate status OK.&quot;</span>);</div>
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; }</div>
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; {</div>
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; <span class="stringliteral">&quot;Unidirectional Sequence LSTM layer validate status failed.&quot;</span>);</div>
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; }</div>
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8cpp_source.html#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, and <a class="el" href="_descriptors_8hpp_source.html#l01154">LstmDescriptor::m_TimeMajor</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.html#l01700">NeonLayerSupport::IsUnidirectionalSequenceLstmSupported()</a>.</p>
</div>
</div>
<a id="a869f740e9c2fcb8642350c6e3d0b3742"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a869f740e9c2fcb8642350c6e3d0b3742">&#9670;&nbsp;</a></span>NextIndex()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::NextIndex </td>
<td>(</td>
<td class="paramtype">const unsigned int&#160;</td>
<td class="paramname"><em>numDims</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">armnn::TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>dims</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; unsigned int &gt; &amp;&#160;</td>
<td class="paramname"><em>current</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_reduce_8cpp_source.html#l00019">19</a> of file <a class="el" href="_reduce_8cpp_source.html">Reduce.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> carry = 1;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = numDims; idx-- &gt; 0; )</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> current_val = current[idx] + carry;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">if</span> (dims[idx] == current_val)</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; {</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; current[idx] = 0;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; }</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; current[idx] = current_val;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; carry = 0;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; }</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">return</span> (carry == 0);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_reduce_8cpp_source.html#l00070">Reduce()</a>.</p>
</div>
</div>
<a id="ac8c641d4a69c9a85c487cfbc7ea4d73c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac8c641d4a69c9a85c487cfbc7ea4d73c">&#9670;&nbsp;</a></span>NonMaxSuppression()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; unsigned int &gt; NonMaxSuppression </td>
<td>(</td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>numBoxes</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>boxCorners</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>scores</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>nmsScoreThreshold</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>maxDetection</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>nmsIouThreshold</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_detection_post_process_8cpp_source.html#l00048">48</a> of file <a class="el" href="_detection_post_process_8cpp_source.html">DetectionPostProcess.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;{</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="comment">// Select boxes that have scores above a given threshold.</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; std::vector&lt;float&gt; scoresAboveThreshold;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; std::vector&lt;unsigned int&gt; indicesAboveThreshold;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numBoxes; ++i)</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; {</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">if</span> (scores[i] &gt;= nmsScoreThreshold)</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; scoresAboveThreshold.push_back(scores[i]);</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; indicesAboveThreshold.push_back(i);</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="comment">// Sort the indices based on scores.</span></div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numAboveThreshold = armnn::numeric_cast&lt;unsigned int&gt;(scoresAboveThreshold.size());</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; std::vector&lt;unsigned int&gt; sortedIndices = <a class="code" href="namespacearmnn.html#ae8ed5c640761fb6744aec0ee16388417">GenerateRangeK</a>(numAboveThreshold);</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="namespacearmnn.html#a2748f45e58b1c612d473043f711d1434">TopKSort</a>(numAboveThreshold, sortedIndices.data(), scoresAboveThreshold.data(), numAboveThreshold);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">// Number of output cannot be more than max detections specified in the option.</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutput = std::min(maxDetection, numAboveThreshold);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; std::vector&lt;unsigned int&gt; outputIndices;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; std::vector&lt;bool&gt; visited(numAboveThreshold, <span class="keyword">false</span>);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">// Prune out the boxes with high intersection over union by keeping the box with higher score.</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numAboveThreshold; ++i)</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">if</span> (outputIndices.size() &gt;= numOutput)</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; {</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (!visited[sortedIndices[i]])</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; outputIndices.push_back(indicesAboveThreshold[sortedIndices[i]]);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = i + 1; j &lt; numAboveThreshold; ++j)</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iIndex = indicesAboveThreshold[sortedIndices[i]] * 4;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> jIndex = indicesAboveThreshold[sortedIndices[j]] * 4;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#abf6aad7bc221f8ad22b4d99cd020373b">IntersectionOverUnion</a>(&amp;boxCorners[iIndex], &amp;boxCorners[jIndex]) &gt; nmsIouThreshold)</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; visited[sortedIndices[j]] = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> outputIndices;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_detection_post_process_8cpp_source.html#l00016">GenerateRangeK()</a>, <a class="el" href="_detection_post_process_8cpp_source.html#l00029">IntersectionOverUnion()</a>, and <a class="el" href="_detection_post_process_8cpp_source.html#l00023">TopKSort()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_detection_post_process_8cpp_source.html#l00139">DetectionPostProcess()</a>.</p>
</div>
</div>
<a id="a375ca3cff9f1b005d1412dc5f3cf5b6e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a375ca3cff9f1b005d1412dc5f3cf5b6e">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[1/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::enable_if_t&lt; std::is_unsigned&lt;Source&gt;::value &amp;&amp; std::is_unsigned&lt;Dest&gt;::value, Dest&gt; armnn::numeric_cast </td>
<td>(</td>
<td class="paramtype">Source&#160;</td>
<td class="paramname"><em>source</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.html#l00035">35</a> of file <a class="el" href="_numeric_cast_8hpp_source.html">NumericCast.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;{</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">if</span> (source &gt; std::numeric_limits&lt;Dest&gt;::max())</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="_numeric_cast_8hpp.html#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting unsigned type to &quot;</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="stringliteral">&quot;narrower unsigned type. Overflow detected.&quot;</span>);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(source);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.html#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
</div>
</div>
<a id="a40a708e0ade241da31597eefab4ad8a9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a40a708e0ade241da31597eefab4ad8a9">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[2/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::enable_if_t&lt; std::is_signed&lt;Source&gt;::value &amp;&amp; std::is_integral&lt;Source&gt;::value &amp;&amp; std::is_signed&lt;Dest&gt;::value &amp;&amp; std::is_integral&lt;Dest&gt;::value, Dest&gt; armnn::numeric_cast </td>
<td>(</td>
<td class="paramtype">Source&#160;</td>
<td class="paramname"><em>source</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.html#l00058">58</a> of file <a class="el" href="_numeric_cast_8hpp_source.html">NumericCast.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;{</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">if</span> (source &gt; std::numeric_limits&lt;Dest&gt;::max())</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="_numeric_cast_8hpp.html#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting signed integral type to narrower signed type. &quot;</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="stringliteral">&quot;Overflow detected.&quot;</span>);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">if</span> (source &lt; std::numeric_limits&lt;Dest&gt;::lowest())</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="_numeric_cast_8hpp.html#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting signed integral type to narrower signed type. &quot;</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="stringliteral">&quot;Underflow detected.&quot;</span>);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; }</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(source);</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.html#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
</div>
</div>
<a id="aec2a3221ba307e3f9f8d6b8cc69774fa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aec2a3221ba307e3f9f8d6b8cc69774fa">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[3/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::enable_if_t&lt; std::is_floating_point&lt;Source&gt;::value &amp;&amp; std::is_floating_point&lt;Dest&gt;::value, Dest&gt; armnn::numeric_cast </td>
<td>(</td>
<td class="paramtype">Source&#160;</td>
<td class="paramname"><em>source</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.html#l00083">83</a> of file <a class="el" href="_numeric_cast_8hpp_source.html">NumericCast.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;{</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">if</span> (source &gt; std::numeric_limits&lt;Dest&gt;::max())</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; {</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="_numeric_cast_8hpp.html#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting floating point type to narrower signed type. &quot;</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="stringliteral">&quot;Overflow detected.&quot;</span>);</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">if</span> (source &lt; std::numeric_limits&lt;Dest&gt;::lowest())</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="_numeric_cast_8hpp.html#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting floating point type to narrower signed type. &quot;</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="stringliteral">&quot;Underflow detected.&quot;</span>);</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; </div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(source);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.html#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
</div>
</div>
<a id="a320f9416a8c5eda0210f1d0ec71dbe53"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a320f9416a8c5eda0210f1d0ec71dbe53">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[4/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::enable_if_t&lt; std::is_floating_point&lt;Source&gt;::value &amp;&amp; std::is_signed&lt;Dest&gt;::value &amp;&amp; std::is_integral&lt;Dest&gt;::value, Dest&gt; armnn::numeric_cast </td>
<td>(</td>
<td class="paramtype">Source&#160;</td>
<td class="paramname"><em>source</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.html#l00109">109</a> of file <a class="el" href="_numeric_cast_8hpp_source.html">NumericCast.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;{</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">if</span> (source &gt; <span class="keyword">static_cast&lt;</span>Source<span class="keyword">&gt;</span>(std::numeric_limits&lt;Dest&gt;::max()))</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; {</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="_numeric_cast_8hpp.html#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting floating point type to narrower signed type. &quot;</span></div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="stringliteral">&quot;Overflow detected.&quot;</span>);</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; </div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">if</span> (source &lt; <span class="keyword">static_cast&lt;</span>Source<span class="keyword">&gt;</span>(std::numeric_limits&lt;Dest&gt;::lowest()))</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; {</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="_numeric_cast_8hpp.html#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting floating point type to narrower signed type. &quot;</span></div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="stringliteral">&quot;Underflow detected.&quot;</span>);</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; </div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(source);</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.html#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
</div>
</div>
<a id="a3afc74a78c7a7590fd1c35b0d5eb69db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3afc74a78c7a7590fd1c35b0d5eb69db">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[5/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::enable_if_t&lt; std::is_signed&lt;Source&gt;::value &amp;&amp; std::is_integral&lt;Source&gt;::value &amp;&amp; std::is_floating_point&lt;Dest&gt;::value, Dest&gt; armnn::numeric_cast </td>
<td>(</td>
<td class="paramtype">Source&#160;</td>
<td class="paramname"><em>source</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.html#l00135">135</a> of file <a class="el" href="_numeric_cast_8hpp_source.html">NumericCast.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;{</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; Dest sourceConverted = <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(source);</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; </div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">if</span> (sourceConverted &gt; std::numeric_limits&lt;Dest&gt;::max())</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; {</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="_numeric_cast_8hpp.html#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting signed type to narrower floating point type. &quot;</span></div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="stringliteral">&quot;Overflow detected.&quot;</span>);</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; </div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">if</span> (sourceConverted &lt; std::numeric_limits&lt;Dest&gt;::lowest())</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; {</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="_numeric_cast_8hpp.html#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting signed type to narrower floating point type. &quot;</span></div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="stringliteral">&quot;Underflow detected.&quot;</span>);</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; }</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; </div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(source);</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.html#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
</div>
</div>
<a id="aa4039ab8f10849c09d08485cf6f113de"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa4039ab8f10849c09d08485cf6f113de">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[6/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::enable_if_t&lt; std::is_signed&lt;Dest&gt;::value &amp;&amp; std::is_integral&lt;Dest&gt;::value &amp;&amp; std::is_unsigned&lt;Source&gt;::value, Dest&gt; armnn::numeric_cast </td>
<td>(</td>
<td class="paramtype">Source&#160;</td>
<td class="paramname"><em>sValue</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.html#l00165">165</a> of file <a class="el" href="_numeric_cast_8hpp_source.html">NumericCast.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;{</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">if</span> (sValue &gt; <span class="keyword">static_cast&lt;</span> typename std::make_unsigned&lt;Dest&gt;::type <span class="keyword">&gt;</span>(std::numeric_limits&lt;Dest&gt;::max()))</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; {</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="_numeric_cast_8hpp.html#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting unsigned type to signed type. &quot;</span></div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="stringliteral">&quot;Overflow detected.&quot;</span>);</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; </div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(sValue);</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.html#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
</div>
</div>
<a id="aab0d3e691c3a26cc5c4aa5c6f12eaea0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aab0d3e691c3a26cc5c4aa5c6f12eaea0">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[7/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::enable_if_t&lt; std::is_floating_point&lt;Dest&gt;::value &amp;&amp; std::is_unsigned&lt;Source&gt;::value, Dest&gt; armnn::numeric_cast </td>
<td>(</td>
<td class="paramtype">Source&#160;</td>
<td class="paramname"><em>sValue</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.html#l00184">184</a> of file <a class="el" href="_numeric_cast_8hpp_source.html">NumericCast.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;{</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(sValue) &gt; std::numeric_limits&lt;Dest&gt;::max())</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <a class="code" href="_numeric_cast_8hpp.html#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting unsigned type to floating point type. &quot;</span></div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="stringliteral">&quot;Overflow detected.&quot;</span>);</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; </div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(sValue);</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.html#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
</div>
</div>
<a id="a4348c6348d681f6d0c7cc6d229435396"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4348c6348d681f6d0c7cc6d229435396">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[8/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::enable_if_t&lt; std::is_unsigned&lt;Dest&gt;::value &amp;&amp; std::is_signed&lt;Source&gt;::value &amp;&amp; std::is_integral&lt;Source&gt;::value, Dest&gt; armnn::numeric_cast </td>
<td>(</td>
<td class="paramtype">Source&#160;</td>
<td class="paramname"><em>sValue</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.html#l00206">206</a> of file <a class="el" href="_numeric_cast_8hpp_source.html">NumericCast.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;{</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">if</span> (sValue &lt; 0)</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="_numeric_cast_8hpp.html#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting negative value to unsigned type. &quot;</span></div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="stringliteral">&quot;Underflow detected.&quot;</span>);</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; </div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">static_cast&lt;</span> typename std::make_unsigned&lt;Source&gt;::type <span class="keyword">&gt;</span>(sValue) &gt; std::numeric_limits&lt;Dest&gt;::max())</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; {</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="_numeric_cast_8hpp.html#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting signed type to unsigned type. &quot;</span></div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="stringliteral">&quot;Overflow detected.&quot;</span>);</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; }</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(sValue);</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.html#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
</div>
</div>
<a id="a1b5cfb3269fecb1dda8d0aee3c8212e6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1b5cfb3269fecb1dda8d0aee3c8212e6">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[9/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::enable_if_t&lt; std::is_unsigned&lt;Dest&gt;::value &amp;&amp; std::is_floating_point&lt;Source&gt;::value, Dest&gt; armnn::numeric_cast </td>
<td>(</td>
<td class="paramtype">Source&#160;</td>
<td class="paramname"><em>sValue</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.html#l00230">230</a> of file <a class="el" href="_numeric_cast_8hpp_source.html">NumericCast.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;{</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">if</span> (sValue &lt; 0)</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; {</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="_numeric_cast_8hpp.html#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting negative value to unsigned type. &quot;</span></div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="stringliteral">&quot;Underflow detected.&quot;</span>);</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; </div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">if</span> (sValue &gt; <span class="keyword">static_cast&lt;</span>Source<span class="keyword">&gt;</span>(std::numeric_limits&lt;Dest&gt;::max()))</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; {</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <a class="code" href="_numeric_cast_8hpp.html#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting floating point type to unsigned type. &quot;</span></div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="stringliteral">&quot;Overflow detected.&quot;</span>);</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; }</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(sValue);</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.html#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
</div>
</div>
<a id="ac70a495c61526a0500b33b23db86ca27"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac70a495c61526a0500b33b23db86ca27">&#9670;&nbsp;</a></span>Offset()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned int armnn::Offset </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>shape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>batch</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>height</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>width</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>channels</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_utils_1_1_data_layout_indexed.html">DataLayoutIndexed</a> &amp;&#160;</td>
<td class="paramname"><em>dataLayout</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_batch_to_space_nd_8cpp_source.html#l00015">15</a> of file <a class="el" href="_batch_to_space_nd_8cpp_source.html">BatchToSpaceNd.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="comment">// 3D Tensors</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelDimension3D = dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a7d8b3d755b6ca8f5533657969efb06c4">GetDataLayout</a>() == DataLayout::NCHW ? 1 : 2;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">if</span> (shape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() == 3)</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; {</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">return</span> (batch * shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()] + height) * shape[channelDimension3D] + channels;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; }</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="comment">// 4D Tensors</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (shape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() == 4)</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; {</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">if</span> (dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a7d8b3d755b6ca8f5533657969efb06c4">GetDataLayout</a>() == DataLayout::NHWC)</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; {</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">return</span> ((batch * shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()] + height) *</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()] + width) *</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()] + channels;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> ((batch * shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()] + channels) *</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()] + height) *</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()] + width;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(<span class="stringliteral">&quot;Tensor rank must be either 3 or 4&quot;</span>, <a class="code" href="_exceptions_8hpp.html#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>());</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00203">CHECK_LOCATION</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00022">DataLayoutIndexed::GetDataLayout()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_tensor_8cpp_source.html#l00174">TensorShape::GetNumDimensions()</a>, and <a class="el" href="_data_layout_indexed_8hpp_source.html#l00025">DataLayoutIndexed::GetWidthIndex()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_batch_to_space_nd_8cpp_source.html#l00050">BatchToSpaceNd()</a>.</p>
</div>
</div>
<a id="aa6d7532e14af97577c054f96d0cf23b3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa6d7532e14af97577c054f96d0cf23b3">&#9670;&nbsp;</a></span>operator&lt;&lt;() <span class="overload">[1/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
<td>(</td>
<td class="paramtype">std::ostream &amp;&#160;</td>
<td class="paramname"><em>os</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">armnn::TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>shape</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.html#l00335">335</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;{</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;[&quot;</span>;</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">if</span> (shape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a5a212540c00931bd2a4b4041beda33ae">GetDimensionality</a>() != Dimensionality::NotSpecified)</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; {</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; shape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(); ++i)</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; {</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">if</span> (i != 0)</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; {</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;,&quot;</span>;</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; }</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">if</span> (shape.<a class="code" href="classarmnn_1_1_tensor_shape.html#a3919600d4aa8d5cd801a0e0740f62308">GetDimensionSpecificity</a>(i))</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; {</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; os &lt;&lt; shape[i];</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; {</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;?&quot;</span>;</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; }</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; }</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; }</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; {</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;Dimensionality Not Specified&quot;</span>;</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; }</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">return</span> os;</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.html#l00092">TensorShape::GetDimensionality()</a>, <a class="el" href="_tensor_8cpp_source.html#l00211">TensorShape::GetDimensionSpecificity()</a>, <a class="el" href="_tensor_8cpp_source.html#l00174">TensorShape::GetNumDimensions()</a>, and <a class="el" href="namespacearmnn.html#a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc">NotSpecified</a>.</p>
</div>
</div>
<a id="afc46634e26857d037ee80bb5a74ef28a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afc46634e26857d037ee80bb5a74ef28a">&#9670;&nbsp;</a></span>operator&lt;&lt;() <span class="overload">[2/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
<td>(</td>
<td class="paramtype">std::ostream &amp;&#160;</td>
<td class="paramname"><em>os</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &amp;&#160;</td>
<td class="paramname"><em>id</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_backend_id_8hpp_source.html#l00176">176</a> of file <a class="el" href="_backend_id_8hpp_source.html">BackendId.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;{</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; os &lt;&lt; <span class="keywordtype">id</span>.Get();</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">return</span> os;</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a14de37f4c695ac066f999aa75b7cb136"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a14de37f4c695ac066f999aa75b7cb136">&#9670;&nbsp;</a></span>operator&lt;&lt;() <span class="overload">[3/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
<td>(</td>
<td class="paramtype">std::ostream &amp;&#160;</td>
<td class="paramname"><em>os</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_backend_version.html">BackendVersion</a> &amp;&#160;</td>
<td class="paramname"><em>backendVersion</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_i_backend_internal_8hpp_source.html#l00070">70</a> of file <a class="el" href="_i_backend_internal_8hpp_source.html">IBackendInternal.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;{</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;[&quot;</span> &lt;&lt; backendVersion.m_Major &lt;&lt; <span class="stringliteral">&quot;.&quot;</span> &lt;&lt; backendVersion.m_Minor &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">return</span> os;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_i_backend_internal_8hpp_source.html#l00036">BackendVersion::m_Major</a>, and <a class="el" href="_i_backend_internal_8hpp_source.html#l00037">BackendVersion::m_Minor</a>.</p>
</div>
</div>
<a id="aa1166f0056ce60553e825ae3cee4d5f7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa1166f0056ce60553e825ae3cee4d5f7">&#9670;&nbsp;</a></span>operator&lt;&lt;() <span class="overload">[4/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
<td>(</td>
<td class="paramtype">std::ostream &amp;&#160;</td>
<td class="paramname"><em>os</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_b_float16.html">BFloat16</a> &amp;&#160;</td>
<td class="paramname"><em>b</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_b_float16_8hpp_source.html#l00122">122</a> of file <a class="el" href="_b_float16_8hpp_source.html">BFloat16.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;{</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; os &lt;&lt; b.ToFloat32() &lt;&lt; <span class="stringliteral">&quot;(0x&quot;</span> &lt;&lt; std::hex &lt;&lt; b.Val() &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> os;</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_b_float16_8hpp_source.html#l00086">BFloat16::ToFloat32()</a>, and <a class="el" href="_b_float16_8hpp_source.html#l00095">BFloat16::Val()</a>.</p>
</div>
</div>
<a id="a345acf4e0dc087eee3f9688029ee6328"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a345acf4e0dc087eee3f9688029ee6328">&#9670;&nbsp;</a></span>operator&lt;&lt;() <span class="overload">[5/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
<td>(</td>
<td class="paramtype">std::ostream &amp;&#160;</td>
<td class="paramname"><em>os</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456ae">Compute</a> &amp;&#160;</td>
<td class="paramname"><em>compute</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Deprecated function that will be removed together with the Compute enum. </p>
<p class="definition">Definition at line <a class="el" href="_backend_id_8hpp_source.html#l00069">69</a> of file <a class="el" href="_backend_id_8hpp_source.html">BackendId.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;{</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; os &lt;&lt; <a class="code" href="namespacearmnn.html#a6bab17bfd45c2fa4592c431bc25ad10e">GetComputeDeviceAsCString</a>(compute);</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">return</span> os;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_id_8hpp_source.html#l00034">GetComputeDeviceAsCString()</a>.</p>
</div>
</div>
<a id="a127a59fdf5e6d2fa74f87f9265de958b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a127a59fdf5e6d2fa74f87f9265de958b">&#9670;&nbsp;</a></span>operator&lt;&lt;() <span class="overload">[6/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
<td>(</td>
<td class="paramtype">std::ostream &amp;&#160;</td>
<td class="paramname"><em>os</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::set&lt; <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456ae">Compute</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>compute</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Deprecated function that will be removed together with the Compute enum. </p>
<p class="definition">Definition at line <a class="el" href="_backend_id_8hpp_source.html#l00058">58</a> of file <a class="el" href="_backend_id_8hpp_source.html">BackendId.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;{</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456ae">Compute</a>&amp; comp : compute)</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; os &lt;&lt; <a class="code" href="namespacearmnn.html#a6bab17bfd45c2fa4592c431bc25ad10e">GetComputeDeviceAsCString</a>(comp) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> os;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_id_8hpp_source.html#l00034">GetComputeDeviceAsCString()</a>.</p>
</div>
</div>
<a id="a5b0313cb554380d6e4dfb24c31f9e605"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5b0313cb554380d6e4dfb24c31f9e605">&#9670;&nbsp;</a></span>operator&lt;&lt;() <span class="overload">[7/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
<td>(</td>
<td class="paramtype">std::ostream &amp;&#160;</td>
<td class="paramname"><em>os</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456ae">Compute</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>compute</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Deprecated function that will be removed together with the Compute enum. </p>
<p class="definition">Definition at line <a class="el" href="_backend_id_8hpp_source.html#l00047">47</a> of file <a class="el" href="_backend_id_8hpp_source.html">BackendId.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456ae">Compute</a>&amp; comp : compute)</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; os &lt;&lt; <a class="code" href="namespacearmnn.html#a6bab17bfd45c2fa4592c431bc25ad10e">GetComputeDeviceAsCString</a>(comp) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> os;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_id_8hpp_source.html#l00034">GetComputeDeviceAsCString()</a>.</p>
</div>
</div>
<a id="a62a9e8c87b9b9f504726746ba4a000a6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a62a9e8c87b9b9f504726746ba4a000a6">&#9670;&nbsp;</a></span>operator&lt;&lt;() <span class="overload">[8/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
<td>(</td>
<td class="paramtype">std::ostream &amp;&#160;</td>
<td class="paramname"><em>os</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn_utils.html#ac7bd4ea667375c07718086368507ed44">TContainer</a>&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a>, TContainerTemplateArgs... &gt; &amp;&#160;</td>
<td class="paramname"><em>ids</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_backend_id_8hpp_source.html#l00183">183</a> of file <a class="el" href="_backend_id_8hpp_source.html">BackendId.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;{</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; os &lt;&lt; <span class="charliteral">&#39;[&#39;</span>;</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <span class="keywordtype">id</span> : ids) { os &lt;&lt; <span class="keywordtype">id</span> &lt;&lt; <span class="stringliteral">&quot; &quot;</span>; }</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; os &lt;&lt; <span class="charliteral">&#39;]&#39;</span>;</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">return</span> os;</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="aaa5b68f3f5bb73b1d3c85d895547a372"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaa5b68f3f5bb73b1d3c85d895547a372">&#9670;&nbsp;</a></span>operator&lt;&lt;() <span class="overload">[9/9]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
<td>(</td>
<td class="paramtype">std::ostream &amp;&#160;</td>
<td class="paramname"><em>os</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a>&#160;</td>
<td class="paramname"><em>stat</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.html#l00328">328</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;{</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; os &lt;&lt; <a class="code" href="namespacearmnn.html#a19a90c41ca2f46ab29918fef1a6ad72e">GetStatusAsCString</a>(stat);</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">return</span> os;</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_types_utils_8hpp_source.html#l00021">GetStatusAsCString()</a>.</p>
</div>
</div>
<a id="a4c79e02d43c1fac7d2f073663ef9ca5d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4c79e02d43c1fac7d2f073663ef9ca5d">&#9670;&nbsp;</a></span>Optimize() <span class="overload">[1/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> Optimize </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&#160;</td>
<td class="paramname"><em>inGraph</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>backendPreferences</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_i_device_spec.html">IDeviceSpec</a> &amp;&#160;</td>
<td class="paramname"><em>deviceSpec</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_optimizer_options.html">OptimizerOptions</a> &amp;&#160;</td>
<td class="paramname"><em>options</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt;&#160;</td>
<td class="paramname"><em>messages</em> = <code><a class="el" href="structarmnn_1_1_empty_optional.html">EmptyOptional</a>()</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Accept legacy <a class="el" href="structarmnn_1_1_optimizer_options.html">OptimizerOptions</a>. </p>
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01893">1893</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160;{</div>
<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#aa42e128b41f4e966fc901f9bf42c5a1c">Optimize</a>(inGraph,</div>
<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160; backendPreferences,</div>
<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160; deviceSpec,</div>
<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160; OptimizerOptionsOpaque(options),</div>
<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160; messages);</div>
<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_network_8cpp_source.html#l02145">Optimize()</a>.</p>
</div>
</div>
<a id="a31b06d0ee0a2eb5879f9af482913a0fe"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a31b06d0ee0a2eb5879f9af482913a0fe">&#9670;&nbsp;</a></span>Optimize() <span class="overload">[2/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> Optimize </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&#160;</td>
<td class="paramname"><em>inGraph</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>backendPreferences</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_i_device_spec.html">IDeviceSpec</a> &amp;&#160;</td>
<td class="paramname"><em>deviceSpec</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optimizer_options_opaque.html">OptimizerOptionsOpaque</a> &amp;&#160;</td>
<td class="paramname"><em>options</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt;&#160;</td>
<td class="paramname"><em>messages</em> = <code><a class="el" href="structarmnn_1_1_empty_optional.html">EmptyOptional</a>()</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Create an optimized version of the network. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">inGraph</td><td><a class="el" href="classarmnn_1_1_graph.html">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.html">DeviceSpec</a> object as queried from the runtime. See <a class="el" href="classarmnn_1_1_i_runtime.html#a25db7b8e6fc90f8418439ccd33aaf184">IRuntime::GetDeviceSpec()</a> </td></tr>
<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.html">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.html" title="Base class for all ArmNN exceptions so that users can filter to just those.">armnn::Exception</a> if process fails. </dd></dl>
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01906">1906</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160;{</div>
<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(debug) &lt;&lt; options.ToString();</div>
<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160; </div>
<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; <span class="comment">// Enable profiling</span></div>
<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160; <span class="keyword">auto</span> profiler = inGraph.GetProfiler();</div>
<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160; ProfilerManager::GetInstance().RegisterProfiler(profiler.get());</div>
<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; profiler-&gt;EnableProfiling(options.GetProfilingEnabled());</div>
<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160; </div>
<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160; <span class="comment">// Some backends don&#39;t play well together. Check here before continuing.</span></div>
<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160; {</div>
<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160; std::set&lt;BackendId&gt; backendSet(backendPreferences.begin(), backendPreferences.end());</div>
<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160; <span class="comment">// GpuFsa cannot co-exist with GpuAcc.</span></div>
<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160; <span class="keywordflow">if</span> (backendSet.find(<span class="stringliteral">&quot;GpuFsa&quot;</span>) != backendSet.end() &amp;&amp;</div>
<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160; backendSet.find(<span class="stringliteral">&quot;GpuAcc&quot;</span>) != backendSet.end())</div>
<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160; {</div>
<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;The backends \&quot;GpuAcc\&quot; and \&quot;GpuFsa\&quot; cannot be specified &quot;</span></div>
<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160; <span class="stringliteral">&quot;for the same optimized network.&quot;</span>);</div>
<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160; }</div>
<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160; }</div>
<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160; </div>
<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160; <a class="code" href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Optimizer&quot;</span>);</div>
<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160; <span class="keywordflow">if</span> (backendPreferences.empty())</div>
<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160; {</div>
<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invoked Optimize with no backends specified&quot;</span>);</div>
<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160; }</div>
<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160; </div>
<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160; <span class="keywordflow">if</span> (options.GetReduceFp32ToBf16())</div>
<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160; {</div>
<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;BFloat16 optimization is currently ignored. In order to use Bf16 optimization &quot;</span></div>
<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160; <span class="stringliteral">&quot;Please use the FastMathEnabled backend option for CpuAcc or GpuAcc.&quot;</span>);</div>
<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160; }</div>
<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160; </div>
<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160; <span class="keywordflow">if</span> (options.GetReduceFp32ToFp16() &amp;&amp; options.GetReduceFp32ToBf16())</div>
<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160; {</div>
<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;BFloat16 and Float16 optimization cannot be enabled at the same time.&quot;</span>);</div>
<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160; }</div>
<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160; </div>
<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160; <span class="comment">// Ensure TensorInfo is set on all output slots of ConstantLayers in the graph</span></div>
<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160; inGraph.VerifyConstantLayerSetTensorInfo();</div>
<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160; </div>
<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160; std::unique_ptr&lt;Graph&gt; graph = std::make_unique&lt;Graph&gt;(inGraph);</div>
<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160; </div>
<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160; <span class="comment">// We need to pass on the information about whether import and export is enabled to the LoadNetwork phase.</span></div>
<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160; <span class="comment">// The mechanism to do that is to add model options to the optimized network.</span></div>
<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160; <a class="code" href="structarmnn_1_1_backend_options.html">armnn::BackendOptions</a> importExport(<span class="stringliteral">&quot;Global&quot;</span>,</div>
<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160; {{<span class="stringliteral">&quot;ImportEnabled&quot;</span>, options.GetImportEnabled()},</div>
<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160; {<span class="stringliteral">&quot;ExportEnabled&quot;</span>, options.GetExportEnabled()}});</div>
<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160; <a class="code" href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> optimizedOptions(options.GetModelOptions());</div>
<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160; optimizedOptions.push_back(importExport);</div>
<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160; </div>
<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160; <span class="keyword">auto</span> optNet = <a class="code" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a>(<span class="keyword">new</span> IOptimizedNetwork(std::move(graph), optimizedOptions),</div>
<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160; &amp;IOptimizedNetwork::Destroy);</div>
<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160; </div>
<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160; IOptimizedNetwork* optNetObjPtr = optNet.get();</div>
<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160; </div>
<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160; <span class="comment">// Get the optimized graph</span></div>
<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160; Graph&amp; optGraph = optNetObjPtr-&gt;pOptimizedNetworkImpl-&gt;GetGraph();</div>
<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160; </div>
<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160; <span class="keywordflow">if</span>(options.GetShapeInferenceMethod() == ShapeInferenceMethod::InferAndValidate)</div>
<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160; {</div>
<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160; <span class="comment">// Infer the tensor infos for all output slots. Throws an exception on failure</span></div>
<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160; optGraph.InferTensorInfos();</div>
<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160; }</div>
<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160; </div>
<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160; <span class="keyword">using namespace </span>optimizations;</div>
<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160; <span class="comment">// Substitute Max + Min with Bounded Relu before AddBroadcastReshapeLayer optimisation,</span></div>
<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160; <span class="comment">// as Bounded ReLu needs the constants to be 1D size 1</span></div>
<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#abc1cdfdd0c890de85bfd7eaac1292ffe">MaxMinIntoBoundedRelu</a>()));</div>
<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160; </div>
<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160; <span class="comment">// Perform BroadcastToOptimizationLayer before AddBroadcastReshapeLayer optimisation</span></div>
<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#abe2f78445ce58bc35eff698bf77f42d0">BroadcastToOptimizationLayer</a>()));</div>
<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160; </div>
<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>()));</div>
<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160; </div>
<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160; <span class="keywordflow">if</span>(options.GetShapeInferenceMethod() == ShapeInferenceMethod::ValidateOnly)</div>
<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160; {</div>
<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160; <span class="comment">// Validate the tensor infos for all output slots. Throws an exception on failure</span></div>
<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160; optGraph.InferTensorInfos();</div>
<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160; }</div>
<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; </div>
<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160; <span class="comment">// Group Constant Layer optimizations together where possible.</span></div>
<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160; <span class="comment">// This is important as:</span></div>
<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160; <span class="comment">// FusePermuteIntoConstantLayer must happen before FoldPadIntoDepthwiseConvolution2d and</span></div>
<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160; <span class="comment">// FuseBatchNormIntoDepthwiseConvolution2D.</span></div>
<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160; <span class="comment">// ConvertConstDequantisationLayersToConstLayers must happen before FoldPadIntoConvolution2d</span></div>
<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#ad668074369437a111649f51296ff8959">FusePermuteIntoConstLayer</a>(),</div>
<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a4dfbdc8cc90b67e74eccd146d977ff66">ConvertConstDequantisationLayersToConstLayers</a>()));</div>
<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160; <span class="comment">// Perform optimisation passes</span></div>
<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#a64ddffb38fbe5b78ec92b753cd4bd0ba">SquashEqualPermuteSiblings</a>(),</div>
<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#aba7b0ca6192b8b58ecd517a82b4f378e">SquashEqualTransposeSiblings</a>(),</div>
<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a29f8d97b2d74f99c88298881cd1d825b">SquashEqualReshapeSiblings</a>(),</div>
<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#aa31127c77d2117f78d43ca2958dcae19">OptimizeInversePermutes</a>(),</div>
<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a2f9d1a13be2ac1c4213729a0ef181fc0">OptimizeInverseTransposes</a>(),</div>
<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#aafc70d5af99400ff5ea7991825658b2f">MovePermuteUp</a>(),</div>
<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a5918588fa316cf4c23f1cf02c81ee706">MoveTransposeUp</a>(),</div>
<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#ae0b1382e3af141896a46531c50e8863f">PermuteAsReshape</a>(),</div>
<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#ad1aaeee71293f34d9f65d2dd2792830d">TransposeAsReshape</a>(),</div>
<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a8341ca3512ebafb19d60eba44d40d9e4">OptimizeConsecutiveReshapes</a>(),</div>
<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a8b394ff60ed829a91f07deac476f3db2">FoldPadIntoConvolution2d</a>(),</div>
<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a227e9ab5e488aa90ba462790ba0e5aec">FoldPadIntoDepthwiseConvolution2d</a>(),</div>
<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a279d0a7c56966cea334303d48a874964">FoldPadIntoPooling2d</a>(),</div>
<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#abe2f78445ce58bc35eff698bf77f42d0">BroadcastToOptimizationLayer</a>(),</div>
<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a17d1279f5f8e3b92c328b1ed3b6fd549">PermuteAndBatchToSpaceAsDepthToSpace</a>(),</div>
<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a98f54d4391347d517c7a7869e7707203">TransposeAndBatchToSpaceAsDepthToSpace</a>(),</div>
<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#aa52c06792e18dc13030e82476f706f9e">FuseBatchNormIntoConvolution2DFloat32</a>(),</div>
<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a8a81178ddcebb93ec0c35b6e6284273c">FuseBatchNormIntoConvolution2DFloat16</a>(),</div>
<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a56e54a818166a2f4b2c1a7f76a3629ff">FuseBatchNormIntoDepthwiseConvolution2DFloat32</a>(),</div>
<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#ab40bb51feca46649eb9d00522bfe51f6">FuseBatchNormIntoDepthwiseConvolution2DFloat16</a>()));</div>
<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160; </div>
<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160; <span class="comment">// Initialize backend settings</span></div>
<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160; BackendSettings backendSettings(backendPreferences, deviceSpec);</div>
<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160; <span class="keyword">auto</span> availablePreferredBackends = backendSettings.GetAvailablePreferredBackends();</div>
<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160; <span class="keywordflow">if</span> (availablePreferredBackends.empty())</div>
<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160; {</div>
<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160; std::stringstream failureMsg;</div>
<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160; failureMsg &lt;&lt; <span class="stringliteral">&quot;None of the preferred backends &quot;</span> &lt;&lt; backendPreferences</div>
<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160; &lt;&lt; <span class="stringliteral">&quot; are supported. Current platform provides &quot;</span> &lt;&lt; backendSettings.m_SupportedBackends;</div>
<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160; <a class="code" href="namespacearmnn.html#a3cf1cee98e0ed8b54263ec7279f6ec69">ReportError</a>(failureMsg.str(), messages);</div>
<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(failureMsg.str());</div>
<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160; }</div>
<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160; </div>
<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160; <span class="comment">// Create a map to temporarily hold initialized backend objects</span></div>
<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160; TensorHandleFactoryRegistry tensorHandleFactoryRegistry;</div>
<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160; <a class="code" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> backends = <a class="code" href="namespacearmnn.html#a1ec6b4c20ed294a96cf94c33c24caaf5">CreateSupportedBackends</a>(tensorHandleFactoryRegistry, backendSettings);</div>
<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160; </div>
<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160; <span class="keywordflow">if</span> (options.GetReduceFp32ToFp16())</div>
<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160; {</div>
<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160; <span class="keywordtype">bool</span> hasFp16 = <a class="code" href="namespacearmnn.html#aa52ce4f1fab044ad0c73f9613e2ef6ce">CheckFp16Support</a>(backends, availablePreferredBackends);</div>
<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160; <span class="keywordflow">if</span> (hasFp16)</div>
<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160; {</div>
<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160; <a class="code" href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Optimizer_ReduceFp32ToFp16&quot;</span>);</div>
<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#a86d19da62b6cfed3928f6fe7026f22fa">Fp32NetworkToFp16Converter</a>()));</div>
<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#a226cef3d775179e25ee35d231f4e8fae">ConvertConstantsFloatToHalf</a>()));</div>
<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160; }</div>
<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160; }</div>
<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160; </div>
<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160; <span class="comment">// Assign an available backend to each layer</span></div>
<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160; Graph::Iterator firstLayer = optGraph.begin();</div>
<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160; Graph::Iterator lastLayer = optGraph.end();</div>
<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160; OptimizationResult assignBackendsResult = <a class="code" href="namespacearmnn.html#a0ea4ff80d0075ff847e96dc12e734368">AssignBackends</a>(optNetObjPtr-&gt;pOptimizedNetworkImpl.get(),</div>
<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160; backendSettings,</div>
<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160; firstLayer,</div>
<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160; lastLayer,</div>
<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160; messages);</div>
<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160; <span class="keywordflow">if</span> (assignBackendsResult.m_Error)</div>
<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160; {</div>
<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160; <span class="comment">// Failed to assign a backend to each layer</span></div>
<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Failed to assign a backend to each layer&quot;</span>);</div>
<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160; }</div>
<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160; </div>
<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#a1a9d718b48612b5817a3c369f9fd71ee">OptimizeInverseConversionsFp16</a>(),</div>
<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#ae1509d340bc981b11101c3316ee8afd6">OptimizeInverseConversionsFp32</a>()));</div>
<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160; </div>
<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160; <span class="comment">// Apply the backend-specific optimizations</span></div>
<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; OptimizationResult backendOptimizationResult = <a class="code" href="namespacearmnn.html#ac39f2b15d34d3e2fc74d586fc3e26231">ApplyBackendOptimizations</a>(optNetObjPtr-&gt;pOptimizedNetworkImpl.get(),</div>
<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160; backendSettings,</div>
<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160; backends,</div>
<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160; options.GetModelOptions(),</div>
<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; messages);</div>
<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160; <span class="keywordflow">if</span> (backendOptimizationResult.m_Error)</div>
<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160; {</div>
<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; <span class="comment">// Failed to apply the backend-specific optimizations</span></div>
<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Failed to apply the backend-specific optimizations&quot;</span>);</div>
<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; }</div>
<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; </div>
<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160; <span class="comment">// Convert constants</span></div>
<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160; {</div>
<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; <a class="code" href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Optimizer_ConvertConstants&quot;</span>);</div>
<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#a226cef3d775179e25ee35d231f4e8fae">ConvertConstantsFloatToHalf</a>()));</div>
<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#a06cac66872538895dd6b59cdf39173d2">ConvertConstantsHalfToFloat</a>()));</div>
<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; }</div>
<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160; </div>
<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160; <span class="comment">// This must occur after all topological changes to the graph and any redirection of variables</span></div>
<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160; <span class="comment">// If the debug flag is set, then insert a DebugLayer after each layer</span></div>
<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160; <span class="comment">// Doing this after applying the backend optimizations as they might have changed some layers</span></div>
<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160; <span class="keywordflow">if</span> (options.GetDebugEnabled() &amp;&amp; !options.GetDebugToFileEnabled())</div>
<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; {</div>
<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#aa76c76565125ad77092403176d74fd85">InsertDebugLayer</a>()));</div>
<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160; }</div>
<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (options.GetDebugToFileEnabled())</div>
<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160; {</div>
<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160; <span class="comment">// Setup the output file path</span></div>
<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; {</div>
<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;<span class="preprocessor">#if !defined(ARMNN_DISABLE_FILESYSTEM)</span></div>
<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160; <span class="keyword">auto</span> result = <a class="code" href="namespacearmnn_utils_1_1_filesystem.html#a0477efb2c6f5b41fbfe937fef6db312d">armnnUtils::Filesystem::CreateDirectory</a>(<span class="stringliteral">&quot;/ArmNNIntermediateLayerOutputs&quot;</span>);</div>
<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;Intermediate tensors will be written to: &quot;</span> &lt;&lt; result;</div>
<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#a9c0a3a9a388a01bc21e20a16e70055f0">InsertDebugToFileLayer</a>()));</div>
<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160; }</div>
<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160; <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_runtime_exception.html">armnn::RuntimeException</a>&amp; e)</div>
<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160; {</div>
<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; <span class="comment">// If we cannot create the output directory then we&#39;ll issue a warning and continue.</span></div>
<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; <span class="stringliteral">&quot;Unable to print intermediate layer outputs : &quot;</span> &lt;&lt; e.<a class="code" href="classarmnn_1_1_exception.html#abf843cbb29dec939d0731e491bab6f70">what</a>();</div>
<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160; }</div>
<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160; }</div>
<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160; </div>
<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160; <span class="comment">// Calculate the compatibility strategies for tensor handles</span></div>
<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160; OptimizationResult strategyResult = <a class="code" href="namespacearmnn.html#acbf7c9a630f03ece800f807d946239ab">SelectTensorHandleStrategy</a>(optGraph,</div>
<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160; backends,</div>
<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160; tensorHandleFactoryRegistry,</div>
<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160; options.GetImportEnabled(),</div>
<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160; options.GetExportEnabled(),</div>
<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160; messages);</div>
<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160; </div>
<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160; <span class="keywordflow">if</span> (strategyResult.m_Error)</div>
<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160; {</div>
<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160; <span class="comment">// Failed to apply the backend-specific optimizations</span></div>
<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a>(<span class="keyword">nullptr</span>, &amp;IOptimizedNetwork::Destroy);</div>
<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160; }</div>
<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160; </div>
<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160; <span class="comment">// Based on the tensor handle strategy determined above, insert copy layers where required.</span></div>
<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160; {</div>
<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160; <a class="code" href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Optimizer_AddCompatibilityLayers&quot;</span>);</div>
<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160; optGraph.AddCompatibilityLayers(backends, tensorHandleFactoryRegistry);</div>
<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160; }</div>
<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160; </div>
<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160; <span class="keywordflow">return</span> optNet;</div>
<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_graph_8cpp_source.html#l00330">Graph::AddCompatibilityLayers()</a>, <a class="el" href="_network_8cpp_source.html#l01320">ApplyBackendOptimizations()</a>, <a class="el" href="_logging_8hpp_source.html#l00212">ARMNN_LOG</a>, <a class="el" href="_profiling_8hpp_source.html#l00220">ARMNN_SCOPED_PROFILING_EVENT</a>, <a class="el" href="_network_8cpp_source.html#l01288">AssignBackends()</a>, <a class="el" href="_graph_8hpp_source.html#l00176">Graph::begin()</a>, <a class="el" href="_network_8cpp_source.html#l01026">CheckFp16Support()</a>, <a class="el" href="_filesystem_8cpp_source.html#l00047">armnnUtils::Filesystem::CreateDirectory()</a>, <a class="el" href="_network_8cpp_source.html#l01302">CreateSupportedBackends()</a>, <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d">debug</a>, <a class="el" href="_graph_8hpp_source.html#l00178">Graph::end()</a>, <a class="el" href="_backend_settings_8hpp_source.html#l00067">BackendSettings::GetAvailablePreferredBackends()</a>, <a class="el" href="_network_8cpp_source.html#l00181">OptimizerOptionsOpaque::GetDebugEnabled()</a>, <a class="el" href="_network_8cpp_source.html#l00186">OptimizerOptionsOpaque::GetDebugToFileEnabled()</a>, <a class="el" href="_network_8cpp_source.html#l00166">OptimizerOptionsOpaque::GetExportEnabled()</a>, <a class="el" href="_network_8cpp_source.html#l00161">OptimizerOptionsOpaque::GetImportEnabled()</a>, <a class="el" href="_network_8cpp_source.html#l00196">OptimizerOptionsOpaque::GetModelOptions()</a>, <a class="el" href="_graph_8cpp_source.html#l00733">Graph::GetProfiler()</a>, <a class="el" href="_network_8cpp_source.html#l00156">OptimizerOptionsOpaque::GetProfilingEnabled()</a>, <a class="el" href="_network_8cpp_source.html#l00176">OptimizerOptionsOpaque::GetReduceFp32ToBf16()</a>, <a class="el" href="_network_8cpp_source.html#l00171">OptimizerOptionsOpaque::GetReduceFp32ToFp16()</a>, <a class="el" href="_network_8cpp_source.html#l00201">OptimizerOptionsOpaque::GetShapeInferenceMethod()</a>, <a class="el" href="_graph_8cpp_source.html#l00645">Graph::InferTensorInfos()</a>, <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="el" href="_network_8hpp_source.html#l00266">OptimizationResult::m_Error</a>, <a class="el" href="_backend_settings_8hpp_source.html#l00021">BackendSettings::m_SupportedBackends</a>, <a class="el" href="_optimizer_8hpp_source.html#l00043">MakeOptimizations()</a>, <a class="el" href="_i_network_8hpp_source.html#l00953">IOptimizedNetwork::pOptimizedNetworkImpl</a>, <a class="el" href="_network_8cpp_source.html#l00762">ReportError()</a>, <a class="el" href="_network_8cpp_source.html#l01821">SelectTensorHandleStrategy()</a>, <a class="el" href="_network_8cpp_source.html#l00206">OptimizerOptionsOpaque::ToString()</a>, <a class="el" href="_graph_8cpp_source.html#l00622">Graph::VerifyConstantLayerSetTensorInfo()</a>, <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>, and <a class="el" href="_exceptions_8cpp_source.html#l00032">Exception::what()</a>.</p>
</div>
</div>
<a id="ab7116c24a003e722c09c86a2f5cf1a37"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab7116c24a003e722c09c86a2f5cf1a37">&#9670;&nbsp;</a></span>Optimize() <span class="overload">[3/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> Optimize </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_i_network.html">INetwork</a> &amp;&#160;</td>
<td class="paramname"><em>network</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>backendPreferences</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_i_device_spec.html">IDeviceSpec</a> &amp;&#160;</td>
<td class="paramname"><em>deviceSpec</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_optimizer_options.html">OptimizerOptions</a> &amp;&#160;</td>
<td class="paramname"><em>options</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt;&#160;</td>
<td class="paramname"><em>messages</em> = <code><a class="el" href="structarmnn_1_1_empty_optional.html">EmptyOptional</a>()</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Accept legacy <a class="el" href="structarmnn_1_1_optimizer_options.html">OptimizerOptions</a>. </p>
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l02132">2132</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;{</div>
<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#aa42e128b41f4e966fc901f9bf42c5a1c">Optimize</a>(inNetwork,</div>
<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160; backendPreferences,</div>
<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160; deviceSpec,</div>
<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160; OptimizerOptionsOpaque(options),</div>
<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160; messages);</div>
<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_network_8cpp_source.html#l02145">Optimize()</a>.</p>
</div>
</div>
<a id="aa42e128b41f4e966fc901f9bf42c5a1c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa42e128b41f4e966fc901f9bf42c5a1c">&#9670;&nbsp;</a></span>Optimize() <span class="overload">[4/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> Optimize </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_i_network.html">INetwork</a> &amp;&#160;</td>
<td class="paramname"><em>network</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>backendPreferences</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_i_device_spec.html">IDeviceSpec</a> &amp;&#160;</td>
<td class="paramname"><em>deviceSpec</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_optimizer_options_opaque.html">OptimizerOptionsOpaque</a> &amp;&#160;</td>
<td class="paramname"><em>options</em> = <code><a class="el" href="classarmnn_1_1_optimizer_options_opaque.html">OptimizerOptionsOpaque</a>()</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt;&#160;</td>
<td class="paramname"><em>messages</em> = <code><a class="el" href="structarmnn_1_1_empty_optional.html">EmptyOptional</a>()</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Create an optimized version of the network. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">network</td><td><a class="el" href="classarmnn_1_1_i_network.html" title="Main network class which provides the interface for building up a neural network.">INetwork</a> description of the network to be optimized. </td></tr>
<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.html">DeviceSpec</a> object as queried from the runtime. See <a class="el" href="classarmnn_1_1_i_runtime.html#a25db7b8e6fc90f8418439ccd33aaf184">IRuntime::GetDeviceSpec()</a> </td></tr>
<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.html">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.html" 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.html#a23">AsyncExecutionSample.cpp</a>, <a class="el" href="_custom_memory_allocator_sample_8cpp-example.html#a25">CustomMemoryAllocatorSample.cpp</a>, <a class="el" href="_dynamic_sample_8cpp-example.html#a13">DynamicSample.cpp</a>, and <a class="el" href="_simple_sample_8cpp-example.html#a23">SimpleSample.cpp</a>.</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l02145">2145</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;{</div>
<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#aa42e128b41f4e966fc901f9bf42c5a1c">Optimize</a>(inNetwork.pNetworkImpl-&gt;GetGraph(),</div>
<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160; backendPreferences,</div>
<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160; deviceSpec,</div>
<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160; options,</div>
<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160; messages);</div>
<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00895">INetwork::pNetworkImpl</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01893">Optimize()</a>, <a class="el" href="_armnn_driver_impl_8cpp_source.html#l00099">ArmnnDriverImpl::PrepareArmnnModel()</a>, <a class="el" href="_armnn_driver_impl_8cpp_source.html#l00338">ArmnnDriverImpl::PrepareArmnnModelFromCache()</a>, <a class="el" href="_parser_prototxt_fixture_8hpp_source.html#l00124">ParserPrototxtFixture&lt; TParser &gt;::Setup()</a>, and <a class="el" href="_parser_prototxt_fixture_8hpp_source.html#l00178">ParserPrototxtFixture&lt; TParser &gt;::SetupOptimizedNetwork()</a>.</p>
</div>
</div>
<a id="a3c62b52d21e28088f040a4b6c2a06022"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3c62b52d21e28088f040a4b6c2a06022">&#9670;&nbsp;</a></span>Pad()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Pad </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *&#160;</td>
<td class="paramname"><em>inputHandle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> *&#160;</td>
<td class="paramname"><em>outputHandle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_pad_queue_descriptor.html">PadQueueDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_pad_8cpp_source.html#l00039">39</a> of file <a class="el" href="_pad_8cpp_source.html">Pad.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">auto</span> padList = data.m_Parameters.m_PadList;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">auto</span> padValue = data.m_Parameters.m_PadValue;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputElements = outputInfo.GetNumElements();</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; TensorShape outputShape = outputInfo.GetShape();</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; TensorShape inputShape = inputInfo.GetShape();</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputDimensions = inputShape.GetNumDimensions();</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#ifndef NDEBUG</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputDimensions = outputShape.GetNumDimensions();</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; assert(numInputDimensions == numOutputDimensions);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; </div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputBatches = 0;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels = 0;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = 0;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = 0;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannels = 0;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = 0;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = 0;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">auto</span> inputData = MakeDecoder&lt;float&gt;(inputInfo, inputHandle-&gt;Map());</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">auto</span> outData = MakeEncoder&lt;float&gt;(outputInfo, outputHandle-&gt;Map());</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// Fill the output tensor with Pad value first</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">if</span> (outputInfo.IsQuantized())</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">// For Quantized types Pad Value should not be quantized with scale and offset of the tensor info</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">auto</span> temporaryInfo = TensorInfo(outputInfo.GetShape(), outputInfo.GetDataType(), 1.0f, 0);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">auto</span> outputData = MakeEncoder&lt;float&gt;(temporaryInfo, outputHandle-&gt;Map());</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; FillOutputWithPadValue(*outputData, padValue, numOutputElements);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; FillOutputWithPadValue(*outData, padValue, numOutputElements);</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; Decoder&lt;float&gt;&amp; input = *inputData;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; Encoder&lt;float&gt;&amp; output = *outData;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; </div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">switch</span>(numInputDimensions) {</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">case</span> 1:</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; inputWidth = inputShape[0];</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; inputWidth ; w++)</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; input[w];</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keyword">auto</span> inputValue = input.Get();</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">auto</span> outputIndex = w + std::get&lt;0&gt;(padList[0]);</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; output[outputIndex];</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; output.Set(inputValue);</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; </div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">case</span> 2 :</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; inputHeight = inputShape[0];</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; inputWidth = inputShape[1];</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; outputWidth = outputShape[1];</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h &lt; inputHeight; h++)</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; inputWidth ; w++)</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; {</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; input[h * inputWidth + w];</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">auto</span> inputValue = input.Get();</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">auto</span> outputIndex = (h + std::get&lt;0&gt;(padList[0])) * outputWidth + (w + std::get&lt;0&gt;(padList[1]));</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; output[outputIndex];</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; output.Set(inputValue);</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; }</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">case</span> 3 :</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; inputChannels = inputShape[0];</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; inputHeight = inputShape[1];</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; inputWidth = inputShape[2];</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; outputHeight = outputShape[1];</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; outputWidth = outputShape[2];</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; </div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; inputChannels; c++)</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h &lt; inputHeight; h++)</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; {</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; inputWidth ; w++)</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; {</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; input[c * inputHeight * inputWidth + h * inputWidth + w];</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keyword">auto</span> inputValue = input.Get();</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keyword">auto</span> outputIndex = (c + std::get&lt;0&gt;(padList[0])) * outputHeight * outputWidth</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; + (h + std::get&lt;0&gt;(padList[1])) * outputWidth</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; + (w + std::get&lt;0&gt;(padList[2]));</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; output[outputIndex];</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; output.Set(inputValue);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; </div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">case</span> 4 :</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; inputBatches = inputShape[0];</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; inputChannels = inputShape[1];</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; inputHeight = inputShape[2];</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; inputWidth = inputShape[3];</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; outputChannels = outputShape[1];</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; outputHeight = outputShape[2];</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; outputWidth = outputShape[3];</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; </div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> b = 0; b &lt; inputBatches; b++)</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; {</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; inputChannels; c++)</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h &lt; inputHeight; h++)</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; {</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; inputWidth ; w++)</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; {</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; input[b * inputChannels * inputHeight * inputWidth</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; + c * inputHeight * inputWidth</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; + h * inputWidth</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; + w];</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keyword">auto</span> inputValue = input.Get();</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keyword">auto</span> outputIndex = (b + std::get&lt;0&gt;(padList[0]))</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; * outputChannels * outputHeight * outputWidth</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; + (c + std::get&lt;0&gt;(padList[1])) * outputHeight * outputWidth</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; + (h + std::get&lt;0&gt;(padList[2])) * outputWidth</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; + (w + std::get&lt;0&gt;(padList[3]));</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; output[outputIndex];</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; output.Set(inputValue);</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; }</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; </div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; default :</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; }</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.html#l00200">TensorInfo::GetDataType()</a>, <a class="el" href="_tensor_8cpp_source.html#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00198">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_tensor_8cpp_source.html#l00508">TensorInfo::IsQuantized()</a>, <a class="el" href="_descriptors_8hpp_source.html#l01218">PadDescriptor::m_PadList</a>, <a class="el" href="_descriptors_8hpp_source.html#l01221">PadDescriptor::m_PadValue</a>, <a class="el" href="_workload_data_8hpp_source.html#l00066">QueueDescriptorWithParameters&lt; LayerDescriptor &gt;::m_Parameters</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle.html#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="abe4073b0af144421b53828ef752e4ee3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abe4073b0af144421b53828ef752e4ee3">&#9670;&nbsp;</a></span>ParseBooleanBackendOption()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool armnn::ParseBooleanBackendOption </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.html">armnn::BackendOptions::Var</a> &amp;&#160;</td>
<td class="paramname"><em>value</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>defaultValue</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_backend_options_8hpp_source.html#l00312">312</a> of file <a class="el" href="_backend_options_8hpp_source.html">BackendOptions.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;{</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">if</span> (value.<a class="code" href="classarmnn_1_1_backend_options_1_1_var.html#aec3bdef27fa2d4de29db82d2334ad2d8">IsBool</a>())</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; {</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">return</span> value.<a class="code" href="classarmnn_1_1_backend_options_1_1_var.html#ac488187ef67bf8905cbe686daab95183">AsBool</a>();</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; }</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">return</span> defaultValue;</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_options_8hpp_source.html#l00119">BackendOptions::Var::AsBool()</a>, and <a class="el" href="_backend_options_8hpp_source.html#l00112">BackendOptions::Var::IsBool()</a>.</p>
</div>
</div>
<a id="a65645fa03bf8cddfb9d8a9f83beeb6e8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a65645fa03bf8cddfb9d8a9f83beeb6e8">&#9670;&nbsp;</a></span>ParseComputeDevice()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456ae">armnn::Compute</a> armnn::ParseComputeDevice </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>str</em></td><td>)</td>
<td></td>
</tr>
</table>
</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.html#l00213">213</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;{</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a637fea04314a9870c1dc4355c1bed429">armnn::StrEqual</a>(str, <span class="stringliteral">&quot;CpuAcc&quot;</span>))</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; {</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a>;</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a637fea04314a9870c1dc4355c1bed429">armnn::StrEqual</a>(str, <span class="stringliteral">&quot;CpuRef&quot;</span>))</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a>;</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a637fea04314a9870c1dc4355c1bed429">armnn::StrEqual</a>(str, <span class="stringliteral">&quot;GpuAcc&quot;</span>))</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; {</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</a>;</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; }</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; {</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a>;</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">CpuAcc</a>, <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">CpuRef</a>, <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">GpuAcc</a>, <a class="el" href="_types_utils_8hpp_source.html#l00201">StrEqual()</a>, and <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
</div>
</div>
<a id="a884361aad1fe11d630c8588cba16c6f1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a884361aad1fe11d630c8588cba16c6f1">&#9670;&nbsp;</a></span>ParseIntBackendOption()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int armnn::ParseIntBackendOption </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.html">armnn::BackendOptions::Var</a> &amp;&#160;</td>
<td class="paramname"><em>value</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>defaultValue</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_backend_options_8hpp_source.html#l00330">330</a> of file <a class="el" href="_backend_options_8hpp_source.html">BackendOptions.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;{</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">if</span> (value.<a class="code" href="classarmnn_1_1_backend_options_1_1_var.html#aba7f9d096eda6d34bc0c668ee44dd665">IsInt</a>())</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; {</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">return</span> value.<a class="code" href="classarmnn_1_1_backend_options_1_1_var.html#ad0c302a166dc669426251446bca2748a">AsInt</a>();</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; }</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">return</span> defaultValue;</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_options_8hpp_source.html#l00120">BackendOptions::Var::AsInt()</a>, and <a class="el" href="_backend_options_8hpp_source.html#l00113">BackendOptions::Var::IsInt()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_backend_model_context_8cpp_source.html#l00034">ClBackendModelContext::ClBackendModelContext()</a>.</p>
</div>
</div>
<a id="af457790132251cde6545072d879c7684"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af457790132251cde6545072d879c7684">&#9670;&nbsp;</a></span>ParseOptions()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::ParseOptions </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; <a class="el" href="structarmnn_1_1_backend_options.html">BackendOptions</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>options</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a>&#160;</td>
<td class="paramname"><em>backend</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">F&#160;</td>
<td class="paramname"><em>f</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_backend_options_8hpp_source.html#l00297">297</a> of file <a class="el" href="_backend_options_8hpp_source.html">BackendOptions.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;{</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> optionsGroup : options)</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">if</span> (optionsGroup.GetBackendId() == backend)</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; {</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i &lt; optionsGroup.GetOptionCount(); i++)</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">const</span> BackendOptions::BackendOption option = optionsGroup.GetOption(i);</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; f(option.GetName(), option.GetValue());</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; }</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_options_8hpp_source.html#l00251">BackendOptions::BackendOption::GetName()</a>, and <a class="el" href="_backend_options_8hpp_source.html#l00252">BackendOptions::BackendOption::GetValue()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_backend_context_8cpp_source.html#l00061">ClBackendContext::ClBackendContext()</a>, <a class="el" href="_cl_backend_model_context_8cpp_source.html#l00034">ClBackendModelContext::ClBackendModelContext()</a>, <a class="el" href="_gpu_fsa_backend_context_8cpp_source.html#l00061">GpuFsaBackendContext::GpuFsaBackendContext()</a>, <a class="el" href="_neon_backend_model_context_8cpp_source.html#l00034">NeonBackendModelContext::NeonBackendModelContext()</a>, and <a class="el" href="_runtime_8cpp_source.html#l00323">RuntimeImpl::RuntimeImpl()</a>.</p>
</div>
</div>
<a id="a79a7e943477406c7211f8800e24e5074"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a79a7e943477406c7211f8800e24e5074">&#9670;&nbsp;</a></span>ParseStringBackendOption()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::string armnn::ParseStringBackendOption </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.html">armnn::BackendOptions::Var</a> &amp;&#160;</td>
<td class="paramname"><em>value</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::string&#160;</td>
<td class="paramname"><em>defaultValue</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_backend_options_8hpp_source.html#l00321">321</a> of file <a class="el" href="_backend_options_8hpp_source.html">BackendOptions.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;{</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">if</span> (value.<a class="code" href="classarmnn_1_1_backend_options_1_1_var.html#a7c412f98489e7d252ef40ed053a3908c">IsString</a>())</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; {</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">return</span> value.<a class="code" href="classarmnn_1_1_backend_options_1_1_var.html#a5e3562cda960da001597e7dd5679b140">AsString</a>();</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; }</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">return</span> defaultValue;</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_options_8hpp_source.html#l00123">BackendOptions::Var::AsString()</a>, and <a class="el" href="_backend_options_8hpp_source.html#l00116">BackendOptions::Var::IsString()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_backend_context_8cpp_source.html#l00061">ClBackendContext::ClBackendContext()</a>, and <a class="el" href="_gpu_fsa_backend_context_8cpp_source.html#l00061">GpuFsaBackendContext::GpuFsaBackendContext()</a>.</p>
</div>
</div>
<a id="a3ca05ac77af0a0444ff34c1319094f6d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3ca05ac77af0a0444ff34c1319094f6d">&#9670;&nbsp;</a></span>ParseTuningLevel()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a> armnn::ParseTuningLevel </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.html">BackendOptions::Var</a> &amp;&#160;</td>
<td class="paramname"><em>value</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a>&#160;</td>
<td class="paramname"><em>defaultValue</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_tuning_utils_8hpp_source.html#l00026">26</a> of file <a class="el" href="_arm_compute_tuning_utils_8hpp_source.html">ArmComputeTuningUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">if</span> (value.IsInt())</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; {</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordtype">int</span> v = value.AsInt();</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">if</span> (v &gt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(TuningLevel::Exhaustive) ||</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; v &lt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(TuningLevel::None))</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; {</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; <span class="stringliteral">&quot;Invalid GpuAcc tuning level (&quot;</span>&lt;&lt; v &lt;&lt; <span class="stringliteral">&quot;) selected. &quot;</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="stringliteral">&quot;Using default(&quot;</span> &lt;&lt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(defaultValue) &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; } <span class="keywordflow">else</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a><span class="keyword">&gt;</span>(v);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> defaultValue;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_logging_8hpp_source.html#l00212">ARMNN_LOG</a>, <a class="el" href="_backend_options_8hpp_source.html#l00120">BackendOptions::Var::AsInt()</a>, <a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f">Exhaustive</a>, <a class="el" href="_backend_options_8hpp_source.html#l00113">BackendOptions::Var::IsInt()</a>, <a class="el" href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754">None</a>, and <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_backend_context_8cpp_source.html#l00061">ClBackendContext::ClBackendContext()</a>, and <a class="el" href="_gpu_fsa_backend_context_8cpp_source.html#l00061">GpuFsaBackendContext::GpuFsaBackendContext()</a>.</p>
</div>
</div>
<a id="aafe6180ef80d9f334f3a3ba9cc0db35d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aafe6180ef80d9f334f3a3ba9cc0db35d">&#9670;&nbsp;</a></span>PermuteTensor()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_const_tensor.html">armnn::ConstTensor</a> PermuteTensor </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_const_tensor_handle.html">ConstTensorHandle</a> *&#160;</td>
<td class="paramname"><em>tensor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_permutation_vector.html">PermutationVector</a> &amp;&#160;</td>
<td class="paramname"><em>permutationVector</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>permuteBuffer</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.html#l00019">19</a> of file <a class="el" href="_workload_utils_8cpp_source.html">WorkloadUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">if</span> (tensor == <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; {</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;WorkloadUtils: PermuteTensor: Null input tensor pointer&quot;</span>);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; }</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">if</span> (permuteBuffer == <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; {</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;WorkloadUtils: PermuteTensor: Null permute buffer pointer&quot;</span>);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; }</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; TensorInfo tensorInfo = tensor-&gt;GetTensorInfo();</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">if</span> (permutationVector.GetSize() &gt; 0)</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; tensorInfo = <a class="code" href="namespacearmnn_utils.html#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(tensorInfo, permutationVector);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="namespacearmnn_utils.html#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(tensorInfo.GetShape(), permutationVector,</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; tensor-&gt;GetConstTensor&lt;<span class="keywordtype">void</span>&gt;(), permuteBuffer,</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <a class="code" href="namespacearmnn.html#aa02b9e06fb20fa3c13da0427e6ee5ab2">GetDataTypeSize</a>(tensorInfo.GetDataType()));</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; {</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; ::memcpy(permuteBuffer, tensor-&gt;GetConstTensor&lt;<span class="keywordtype">void</span>&gt;(), tensorInfo.GetNumBytes());</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; tensorInfo.SetConstant(<span class="keyword">true</span>);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> ConstTensor(tensorInfo, permuteBuffer);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_handle_8hpp_source.html#l00028">ConstTensorHandle::GetConstTensor()</a>, <a class="el" href="_tensor_8hpp_source.html#l00200">TensorInfo::GetDataType()</a>, <a class="el" href="_types_utils_8hpp_source.html#l00182">GetDataTypeSize()</a>, <a class="el" href="_tensor_8cpp_source.html#l00427">TensorInfo::GetNumBytes()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_types_8hpp_source.html#l00357">PermutationVector::GetSize()</a>, <a class="el" href="_tensor_handle_8hpp_source.html#l00040">ConstTensorHandle::GetTensorInfo()</a>, <a class="el" href="_permute_8cpp_source.html#l00164">armnnUtils::Permute()</a>, <a class="el" href="_permute_8cpp_source.html#l00125">armnnUtils::Permuted()</a>, and <a class="el" href="_tensor_8cpp_source.html#l00518">TensorInfo::SetConstant()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_workload_utils_8cpp_source.html#l00146">Convert1HWOTensorToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.html#l00208">Convert1HWOtoMIHW()</a>, and <a class="el" href="_workload_utils_8cpp_source.html#l00237">ConvertWeightTensorFromArmnnToAcl()</a>.</p>
</div>
</div>
<a id="aa4e89c644c511e255f6a7ecbd5d14686"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa4e89c644c511e255f6a7ecbd5d14686">&#9670;&nbsp;</a></span>PolymorphicDowncast()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">DestType armnn::PolymorphicDowncast </td>
<td>(</td>
<td class="paramtype">SourceType *&#160;</td>
<td class="paramname"><em>value</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Polymorphic downcast for build in pointers only. </p>
<p>Usage: Child* pChild = PolymorphicDowncast&lt;Child*&gt;(pBase);</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">DestType</td><td>Pointer type to the target object (Child pointer type) </td></tr>
<tr><td class="paramname">SourceType</td><td>Pointer type to the source object (Base pointer type) </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">value</td><td>Pointer to the source object </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Pointer of type DestType (Pointer of type child) </dd></dl>
<p class="definition">Definition at line <a class="el" href="_polymorphic_downcast_8hpp_source.html#l00074">74</a> of file <a class="el" href="_polymorphic_downcast_8hpp_source.html">PolymorphicDowncast.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;{</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; static_assert(std::is_pointer&lt;DestType&gt;::value,</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="stringliteral">&quot;PolymorphicDowncast only works with pointer types.&quot;</span>);</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="_polymorphic_downcast_8hpp.html#a816fdb1ce84860c918a1915b3ea23459">ARMNN_POLYMORPHIC_CAST_CHECK</a>(<span class="keyword">dynamic_cast&lt;</span>DestType<span class="keyword">&gt;</span>(value) == value);</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>DestType<span class="keyword">&gt;</span>(value);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_polymorphic_downcast_8hpp_source.html#l00027">ARMNN_POLYMORPHIC_CAST_CHECK</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.html#l00189">ClLayerSupport::IsLayerSupported()</a>, and <a class="el" href="_neon_layer_support_8cpp_source.html#l00184">IsLayerTypeSupported()</a>.</p>
</div>
</div>
<a id="a6baab222db3195a0bd77f488a81fd316"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6baab222db3195a0bd77f488a81fd316">&#9670;&nbsp;</a></span>PolymorphicPointerDowncast()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">auto armnn::PolymorphicPointerDowncast </td>
<td>(</td>
<td class="paramtype">const SourceType &amp;&#160;</td>
<td class="paramname"><em>value</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Polymorphic downcast for shared pointers and build in pointers. </p>
<p>Usage: auto pChild = PolymorphicPointerDowncast&lt;Child&gt;(pBase)</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">DestType</td><td>Type of the target object (Child type) </td></tr>
<tr><td class="paramname">SourceType</td><td>Pointer type to the source object (Base (shared) pointer type) </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">value</td><td>Pointer to the source object </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Pointer of type DestType ((Shared) pointer of type child) </dd></dl>
<p class="definition">Definition at line <a class="el" href="_polymorphic_downcast_8hpp_source.html#l00093">93</a> of file <a class="el" href="_polymorphic_downcast_8hpp_source.html">PolymorphicDowncast.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;{</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="_polymorphic_downcast_8hpp.html#a816fdb1ce84860c918a1915b3ea23459">ARMNN_POLYMORPHIC_CAST_CHECK</a>(utility::DynamicPointerCast&lt;DestType&gt;(value)</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; == value);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> utility::StaticPointerCast&lt;DestType&gt;(value);</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_polymorphic_downcast_8hpp_source.html#l00027">ARMNN_POLYMORPHIC_CAST_CHECK</a>.</p>
</div>
</div>
<a id="ae2e93e304cf516841c521e3eaee025cd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae2e93e304cf516841c521e3eaee025cd">&#9670;&nbsp;</a></span>Pooling2d()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Pooling2d </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>rInputDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>rOutputEncoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.html">Pooling2dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>params</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Computes the Pooling2d operation. </p>
<p class="definition">Definition at line <a class="el" href="_pooling2d_8cpp_source.html#l00142">142</a> of file <a class="el" href="_pooling2d_8cpp_source.html">Pooling2d.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;{</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html">DataLayoutIndexed</a> dataLayout(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.html#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>);</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keyword">auto</span> channelsIndex = dataLayout.GetChannelsIndex();</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">auto</span> heightIndex = dataLayout.GetHeightIndex();</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keyword">auto</span> widthIndex = dataLayout.GetWidthIndex();</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; </div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> batchSize = armnn::numeric_cast&lt;int&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0]);</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> channels = armnn::numeric_cast&lt;int&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[channelsIndex]);</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> heightOutput = armnn::numeric_cast&lt;int&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[heightIndex]);</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> widthOutput = armnn::numeric_cast&lt;int&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[widthIndex]);</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> heightInput = armnn::numeric_cast&lt;int&gt;(inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[heightIndex]);</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> widthInput = armnn::numeric_cast&lt;int&gt;(inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[widthIndex]);</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padLeft = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.html#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>);</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padRight = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.html#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>);</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padTop = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.html#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>);</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padBottom = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.html#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>);</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> strideX = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.html#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>);</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> strideY = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.html#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>);</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> poolHeight = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.html#a5699e8606c37d18c03910b242cd1b010">m_PoolHeight</a>);</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> poolWidth = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.html#a6d8fb685cc1ff224f25aa127fcf62c86">m_PoolWidth</a>);</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; </div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordtype">float</span> defaultInitializer = DefaultInitializer(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.html#a0031997bf43bd2747656c31e4977793a">m_PoolType</a>);</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; </div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; Accumulator accumulate = GetAccumulator(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.html#a0031997bf43bd2747656c31e4977793a">m_PoolType</a>);</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; Executor execute = GetExecutor(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.html#a0031997bf43bd2747656c31e4977793a">m_PoolType</a>);</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; </div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="comment">// Check supported padding methods outside the loop to simplify</span></div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="comment">// the inner loop.</span></div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">if</span> (params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.html#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> != PaddingMethod::Exclude &amp;&amp;</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.html#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> != PaddingMethod::IgnoreValue)</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; {</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Unsupported padding type&quot;</span>);</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; </div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; decodedInputVec = rInputDecoder.<a class="code" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>());</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; </div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> n = 0; n &lt; batchSize; n++)</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> c = 0; c &lt; channels; c++)</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> yOutput = 0; yOutput &lt; heightOutput; yOutput++)</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="comment">// Calculate values independent of the x axis</span></div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordtype">int</span> hstart = (yOutput * strideY) - padTop;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordtype">int</span> hend = hstart + poolHeight;</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">// Clamp the pooling region inside the valid input area (which includes the padding).</span></div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// This is necessary because the final pooling in a row may overlap beyond the padding.</span></div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; hend = std::min(hend, heightInput + padBottom);</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; </div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordtype">int</span> height = hend - hstart;</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordtype">bool</span> hclamped = ClampRange(hstart, hend, heightInput);</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; </div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> xOutput = 0; xOutput &lt; widthOutput; xOutput++)</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; {</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordtype">int</span> wstart = (xOutput * strideX) - padLeft;</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordtype">int</span> wend = wstart + poolWidth;</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; </div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="comment">// Clamp the pooling region inside the valid input area (which includes the padding).</span></div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="comment">// This is necessary because the final pooling in a row may overlap beyond the padding.</span></div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; wend = std::min(wend, widthInput + padRight);</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; </div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordtype">float</span> result = defaultInitializer;</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordtype">float</span> poolAreaSize = armnn::numeric_cast&lt;float&gt;(height * (wend - wstart));</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; </div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="comment">// Special case: when the pooling kernel is over a padding region and the padding</span></div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="comment">// size is larger or equal to the kernel and the kernel only covers</span></div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="comment">// padding and no real values, then we initialize the result as zero</span></div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="comment">// by convention. This is because we need to choose a value here and</span></div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="comment">// all values we have are padding, which we ignore.</span></div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">if</span> (OnPaddingOnly(hstart, hend, heightInput) ||</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; OnPaddingOnly(wstart, wend, widthInput))</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; {</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; result = 0.0f;</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; </div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordtype">int</span> outputIndex;</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; </div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">if</span>(dataLayout.GetDataLayout() == DataLayout::NHWC)</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; {</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; outputIndex = n * heightOutput * widthOutput * channels +</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; yOutput * widthOutput * channels +</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; xOutput * channels +</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; c;</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; {</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; outputIndex = n * heightOutput * widthOutput * channels +</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; c * heightOutput * widthOutput +</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; yOutput * widthOutput +</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; xOutput;</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; }</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; </div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; rOutputEncoder[<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(outputIndex)];</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; rOutputEncoder.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(result);</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; </div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordtype">bool</span> clamped = hclamped |= ClampRange(wstart, wend, widthInput);</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; </div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">if</span> (clamped &amp;&amp; params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.html#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> == PaddingMethod::Exclude)</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; {</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// When we exclude the padding, it means we calculate with a smaller</span></div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// kernel size, so I changed the divisor here.</span></div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; poolAreaSize = armnn::numeric_cast&lt;float&gt;((hend - hstart) * (wend - wstart));</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; </div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> yInput = hstart; yInput &lt; hend; yInput++)</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; {</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> xInput = wstart; xInput &lt; wend; xInput++)</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; {</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; </div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordtype">int</span> inputIndex;</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">if</span>(dataLayout.GetDataLayout() == DataLayout::NHWC)</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; inputIndex = n * heightInput * widthInput * channels +</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; yInput * widthInput * channels +</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; xInput * channels +</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; c;</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; </div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; {</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; inputIndex = n * heightInput * widthInput * channels +</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; c * heightInput * widthInput +</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; yInput * widthInput +</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; xInput;</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; </div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; accumulate(result, decodedInputVec[<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(inputIndex)]);</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; </div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; execute(result, poolAreaSize);</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; </div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordtype">int</span> outputIndex;</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; </div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">if</span>(dataLayout.GetDataLayout() == DataLayout::NHWC)</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; {</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; outputIndex = n * heightOutput * widthOutput * channels +</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; yOutput * widthOutput * channels +</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; xOutput * channels +</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; c;</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; }</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; {</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; outputIndex = n * heightOutput * widthOutput * channels +</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; c * heightOutput * widthOutput +</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; yOutput * widthOutput +</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; xOutput;</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; }</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; </div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; rOutputEncoder[<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(outputIndex)];</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; rOutputEncoder.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(result);</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; }</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; }</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; }</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder&lt; IType &gt;::DecodeTensor()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00022">DataLayoutIndexed::GetDataLayout()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.html#l00427">Pooling2dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.html#l00413">Pooling2dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.html#l00425">Pooling2dDescriptor::m_PaddingMethod</a>, <a class="el" href="_descriptors_8hpp_source.html#l00407">Pooling2dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.html#l00409">Pooling2dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.html#l00411">Pooling2dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.html#l00417">Pooling2dDescriptor::m_PoolHeight</a>, <a class="el" href="_descriptors_8hpp_source.html#l00405">Pooling2dDescriptor::m_PoolType</a>, <a class="el" href="_descriptors_8hpp_source.html#l00415">Pooling2dDescriptor::m_PoolWidth</a>, <a class="el" href="_descriptors_8hpp_source.html#l00419">Pooling2dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.html#l00421">Pooling2dDescriptor::m_StrideY</a>, <a class="el" href="_pooling2d_8cpp_source.html#l00142">Pooling2d()</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_pooling2d_8cpp_source.html#l00142">Pooling2d()</a>, and <a class="el" href="_pooling2d_layer_8cpp_source.html#l00022">Pooling2dLayer::Pooling2dLayer()</a>.</p>
</div>
</div>
<a id="a69acbef24cd1cc572b93fc3e1e6ac030"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a69acbef24cd1cc572b93fc3e1e6ac030">&#9670;&nbsp;</a></span>Pooling3d()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Pooling3d </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>rInputDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>rOutputEncoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_pooling3d_descriptor.html">Pooling3dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>params</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Computes the Pooling3d operation. </p>
<p class="definition">Definition at line <a class="el" href="_pooling3d_8cpp_source.html#l00172">172</a> of file <a class="el" href="_pooling3d_8cpp_source.html">Pooling3d.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;{</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html">DataLayoutIndexed</a> dataLayout(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>);</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; </div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keyword">auto</span> channelsIndex = dataLayout.GetChannelsIndex();</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; </div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keyword">auto</span> depthIndex = dataLayout.GetDepthIndex();</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keyword">auto</span> heightIndex = dataLayout.GetHeightIndex();</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keyword">auto</span> widthIndex = dataLayout.GetWidthIndex();</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; </div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> batchSize = armnn::numeric_cast&lt;int&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0]);</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> channels = armnn::numeric_cast&lt;int&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[channelsIndex]);</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; </div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> depthOutput = armnn::numeric_cast&lt;int&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[depthIndex]);</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> heightOutput = armnn::numeric_cast&lt;int&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[heightIndex]);</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> widthOutput = armnn::numeric_cast&lt;int&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[widthIndex]);</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; </div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> depthInput = armnn::numeric_cast&lt;int&gt;(inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[depthIndex]);</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> heightInput = armnn::numeric_cast&lt;int&gt;(inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[heightIndex]);</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> widthInput = armnn::numeric_cast&lt;int&gt;(inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[widthIndex]);</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; </div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padLeft = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>);</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padRight = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>);</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padTop = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>);</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padBottom = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>);</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padFront = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#a83ca447892f460dabaa2f87d3dc3db61">m_PadFront</a>);</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padBack = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#a11d5c25face9b54e90f79ee8bdc1d0fb">m_PadBack</a>);</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; </div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> strideX = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>);</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> strideY = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>);</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> strideZ = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#a5164336f6a1b15be0d434a6bbf7289da">m_StrideZ</a>);</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; </div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> poolHeight = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#a5699e8606c37d18c03910b242cd1b010">m_PoolHeight</a>);</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> poolWidth = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#a6d8fb685cc1ff224f25aa127fcf62c86">m_PoolWidth</a>);</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> poolDepth = armnn::numeric_cast&lt;int&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#acc978b36fd5d949bc781d7638e6e08b9">m_PoolDepth</a>);</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; </div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordtype">float</span> defaultInitializer = DefaultInitializer(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#a0031997bf43bd2747656c31e4977793a">m_PoolType</a>);</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; Accumulator accumulate = GetAccumulator(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#a0031997bf43bd2747656c31e4977793a">m_PoolType</a>);</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; Executor execute = GetExecutor(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#a0031997bf43bd2747656c31e4977793a">m_PoolType</a>);</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; </div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="comment">// Check supported padding methods outside the loop to simplify</span></div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="comment">// the inner loop.</span></div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">if</span> (params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> != PaddingMethod::Exclude &amp;&amp;</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> != PaddingMethod::IgnoreValue)</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Unsupported padding type&quot;</span>);</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; </div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; decodedInputVec = rInputDecoder.<a class="code" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>());</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; </div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> n = 0; n &lt; batchSize; n++)</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; {</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> c = 0; c &lt; channels; c++)</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; {</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> zOutput = 0; zOutput &lt; depthOutput; zOutput++)</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; {</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="comment">// Calculate values independent of the x and y axis</span></div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordtype">int</span> dstart = (zOutput * strideZ) - padFront;</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordtype">int</span> dend = dstart + poolDepth;</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// Clamp the pooling region inside the valid input area (which includes the padding).</span></div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">// This is necessary because the final pooling in a row may overlap beyond the padding.</span></div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; dend = std::min(dend, depthInput + padBack);</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; </div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordtype">int</span> depth = dend - dstart;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordtype">bool</span> dclamped = ClampRange(dstart, dend, depthInput);</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordtype">int</span> depthClamped = dend - dstart;</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; </div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> yOutput = 0; yOutput &lt; heightOutput; yOutput++)</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; {</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordtype">int</span> hstart = (yOutput * strideY) - padTop;</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordtype">int</span> hend = hstart + poolHeight;</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// Clamp the pooling region inside the valid input area (which includes the padding).</span></div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// This is necessary because the final pooling in a row may overlap beyond the padding.</span></div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; hend = std::min(hend, heightInput + padBottom);</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; </div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordtype">int</span> height = hend - hstart;</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordtype">bool</span> hclamped = ClampRange(hstart, hend, heightInput);</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordtype">int</span> heightClamped = hend - hstart;</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; </div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> xOutput = 0; xOutput &lt; widthOutput; xOutput++)</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; {</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordtype">int</span> wstart = (xOutput * strideX) - padLeft;</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordtype">int</span> wend = wstart + poolWidth;</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="comment">// Clamp the pooling region inside the valid input area (which includes the padding).</span></div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="comment">// This is necessary because the final pooling in a row may overlap beyond the padding.</span></div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; wend = std::min(wend, widthInput + padRight);</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; </div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordtype">int</span> width = wend - wstart;</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordtype">bool</span> wclamped = ClampRange(wstart, wend, widthInput);</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordtype">int</span> widthClamped = wend - wstart;</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; </div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordtype">float</span> result = defaultInitializer;</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordtype">float</span> poolAreaSize = armnn::numeric_cast&lt;float&gt;(depth * height * width);</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; </div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="comment">// Special case: when the pooling kernel is over a padding region and the padding</span></div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="comment">// size is larger or equal to the kernel and the kernel only covers</span></div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="comment">// padding and no real values, then we initialize the result as zero</span></div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="comment">// by convention. This is because we need to choose a value here and</span></div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// all values we have are padding, which we ignore.</span></div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">if</span> (OnPaddingOnly(dstart, dend, depthInput) ||</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; OnPaddingOnly(hstart, hend, heightInput) ||</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; OnPaddingOnly(wstart, wend, widthInput))</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; result = 0.0f;</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; </div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordtype">int</span> outputIndex = CalculateIndex(channels, depthOutput, heightOutput, widthOutput,</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; n, c, zOutput, yOutput, xOutput, dataLayout);</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; </div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; rOutputEncoder[<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(outputIndex)];</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; rOutputEncoder.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(result);</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; </div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; }</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; </div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordtype">bool</span> clamped = (dclamped | hclamped | wclamped);</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; </div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">if</span> (clamped &amp;&amp; params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.html#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> == PaddingMethod::Exclude)</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; {</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="comment">// When we exclude the padding, it means we calculate with a smaller</span></div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// kernel size, so I changed the divisor here.</span></div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; poolAreaSize = armnn::numeric_cast&lt;float&gt;(depthClamped * heightClamped * widthClamped);</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; }</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; </div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> zInput = dstart; zInput &lt; dend; zInput++)</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> yInput = hstart; yInput &lt; hend; yInput++)</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; {</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> xInput = wstart; xInput &lt; wend; xInput++)</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; </div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordtype">int</span> inputIndex = CalculateIndex(channels, depthInput, heightInput, widthInput,</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; n, c, zInput, yInput, xInput, dataLayout);</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; </div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; accumulate(result, decodedInputVec[<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(inputIndex)]);</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; }</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; </div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; execute(result, poolAreaSize);</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; </div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordtype">int</span> outputIndex = CalculateIndex(channels, depthOutput, heightOutput, widthOutput,</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; n, c, zOutput, yOutput, xOutput, dataLayout);</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; </div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; rOutputEncoder[<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(outputIndex)];</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; rOutputEncoder.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(result);</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; }</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; }</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; }</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder&lt; IType &gt;::DecodeTensor()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00026">DataLayoutIndexed::GetDepthIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.html#l00503">Pooling3dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.html#l00485">Pooling3dDescriptor::m_PadBack</a>, <a class="el" href="_descriptors_8hpp_source.html#l00481">Pooling3dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.html#l00501">Pooling3dDescriptor::m_PaddingMethod</a>, <a class="el" href="_descriptors_8hpp_source.html#l00483">Pooling3dDescriptor::m_PadFront</a>, <a class="el" href="_descriptors_8hpp_source.html#l00475">Pooling3dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.html#l00477">Pooling3dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.html#l00479">Pooling3dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.html#l00491">Pooling3dDescriptor::m_PoolDepth</a>, <a class="el" href="_descriptors_8hpp_source.html#l00489">Pooling3dDescriptor::m_PoolHeight</a>, <a class="el" href="_descriptors_8hpp_source.html#l00473">Pooling3dDescriptor::m_PoolType</a>, <a class="el" href="_descriptors_8hpp_source.html#l00487">Pooling3dDescriptor::m_PoolWidth</a>, <a class="el" href="_descriptors_8hpp_source.html#l00493">Pooling3dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.html#l00495">Pooling3dDescriptor::m_StrideY</a>, <a class="el" href="_descriptors_8hpp_source.html#l00497">Pooling3dDescriptor::m_StrideZ</a>, <a class="el" href="_pooling3d_8cpp_source.html#l00172">Pooling3d()</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_pooling3d_8cpp_source.html#l00172">Pooling3d()</a>, and <a class="el" href="_pooling3d_layer_8cpp_source.html#l00022">Pooling3dLayer::Pooling3dLayer()</a>.</p>
</div>
</div>
<a id="a3be2f69aaf56e58a64ce62054c497fbc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3be2f69aaf56e58a64ce62054c497fbc">&#9670;&nbsp;</a></span>PreluImpl()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void PreluImpl </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>alphaInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>alphaData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>outputData</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_prelu_impl_8cpp_source.html#l00013">13</a> of file <a class="el" href="_prelu_impl_8cpp_source.html">PreluImpl.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> TensorShape&amp; inputShape = inputInfo.GetShape();</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> TensorShape&amp; alphaShape = alphaInfo.GetShape();</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> TensorShape&amp; outputShape = outputInfo.GetShape();</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="comment">// PReLU activation: f(x) = alpha * x for x &lt; 0, f(x) = x for x &gt;= 0</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">auto</span> prelu = [](<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> alpha)</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; {</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> x &lt; 0 ? alpha * x : x;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; };</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; BroadcastLoop(inputShape, alphaShape, outputShape).Unroll(prelu, 0, inputData, alphaData, outputData);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, and <a class="el" href="_broadcast_8hpp_source.html#l00026">BroadcastLoop::Unroll()</a>.</p>
</div>
</div>
<a id="a2b942b6b36b2f6df709b544e01bbdbb0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2b942b6b36b2f6df709b544e01bbdbb0">&#9670;&nbsp;</a></span>PrintOutput()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::PrintOutput </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const T *&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>&#160;</td>
<td class="paramname"><em>guid</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>layerName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>slotIndex</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::ostream &amp;&#160;</td>
<td class="paramname"><em>os</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_debug_8cpp_source.html#l00023">23</a> of file <a class="el" href="_debug_8cpp_source.html">Debug.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDims = inputInfo.GetNumDimensions();</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numElements = inputInfo.GetNumElements();</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> TensorShape&amp; inputShape = inputInfo.GetShape();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; std::vector&lt;unsigned int&gt; strides(numDims, 0);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; strides[numDims - 1] = inputShape[numDims - 1];</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 2; i &lt;= numDims; i++)</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; strides[numDims - i] = strides[numDims - i + 1] * inputShape[numDims - i];</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;{ &quot;</span>;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;\&quot;layerGuid\&quot;: &quot;</span> &lt;&lt; guid &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;\&quot;layerName\&quot;: \&quot;&quot;</span> &lt;&lt; layerName &lt;&lt; <span class="stringliteral">&quot;\&quot;, &quot;</span>;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;\&quot;outputSlot\&quot;: &quot;</span> &lt;&lt; slotIndex &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;\&quot;shape\&quot;: &quot;</span>;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;[&quot;</span>;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numDims; i++)</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; os &lt;&lt; inputShape[i];</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">if</span> (i != numDims - 1)</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; {</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; }</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;], &quot;</span>;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;\&quot;min\&quot;: &quot;</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; &lt;&lt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(*std::min_element(inputData, inputData + numElements)) &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; </div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;\&quot;max\&quot;: &quot;</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; &lt;&lt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(*std::max_element(inputData, inputData + numElements)) &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;\&quot;data\&quot;: &quot;</span>;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numElements; i++)</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; numDims; j++)</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">if</span> (i % strides[j] == 0)</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;[&quot;</span>;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; os &lt;&lt; static_cast&lt;float&gt;(inputData[i]);</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; numDims; j++)</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; {</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">if</span> ((i + 1) % strides[j] == 0)</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span> (i != numElements - 1)</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; os &lt;&lt; <span class="stringliteral">&quot; }&quot;</span> &lt;&lt; std::endl;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00198">TensorInfo::GetNumElements()</a>, and <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>.</p>
</div>
</div>
<a id="a2386397752b62040e3b0647e8bc4dc70"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2386397752b62040e3b0647e8bc4dc70">&#9670;&nbsp;</a></span>ProfilingUpdateDescriptions()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void armnn::ProfilingUpdateDescriptions </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>name</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const DescriptorType &amp;&#160;</td>
<td class="paramname"><em>desc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.html">WorkloadInfo</a> &amp;&#160;</td>
<td class="paramname"><em>infos</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const arm::pipe::ProfilingGuid&#160;</td>
<td class="paramname"><em>guid</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>&lt; Profiler used</p>
<p class="definition">Definition at line <a class="el" href="_profiling_8hpp_source.html#l00180">180</a> of file <a class="el" href="_profiling_8hpp_source.html">Profiling.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;{</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; IProfiler* profiler(ProfilerManager::GetInstance().GetProfiler()); <span class="comment">///&lt; Profiler used</span></div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="comment"></span> <span class="keywordflow">if</span> (profiler &amp;&amp; profiler-&gt;IsProfilingEnabled())</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; profiler-&gt;AddLayerDetails(name, desc, infos, guid);</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_profiling_8cpp_source.html#l00602">ProfilerManager::GetInstance()</a>, and <a class="el" href="_profiling_8cpp_source.html#l00629">IProfiler::IsProfilingEnabled()</a>.</p>
</div>
</div>
<a id="ad773a034fb9983e15f3094b4c5c7c30c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad773a034fb9983e15f3094b4c5c7c30c">&#9670;&nbsp;</a></span>Quantize() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">template int32_t Quantize&lt; int32_t &gt; </td>
<td>(</td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>value</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>scale</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int32_t&#160;</td>
<td class="paramname"><em>offset</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Quantize a floating point data type into an 8-bit data type. </p>
<p>Explicit specialization of Quantize for int32_t.</p>
<p>Explicit specialization of Quantize for int16_t.</p>
<p>Explicit specialization of Quantize for uint8_t.</p>
<p>Explicit specialization of Quantize for int8_t.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">value</td><td>- The value to quantize. </td></tr>
<tr><td class="paramname">scale</td><td>- The scale (must be non-zero). </td></tr>
<tr><td class="paramname">offset</td><td>- The offset. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>- The quantized value calculated as round(value/scale)+offset. </dd></dl>
<p class="definition">Definition at line <a class="el" href="_types_utils_8cpp_source.html#l00030">30</a> of file <a class="el" href="_types_utils_8cpp_source.html">TypesUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; static_assert(IsQuantizedType&lt;QuantizedType&gt;(), <span class="stringliteral">&quot;Not an integer type.&quot;</span>);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; constexpr QuantizedType max = std::numeric_limits&lt;QuantizedType&gt;::max();</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; constexpr QuantizedType min = std::numeric_limits&lt;QuantizedType&gt;::lowest();</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">if</span> (std::isnan(value))</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; {</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Quantize: Value is NaN&quot;</span>);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; }</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">float</span> clampedValue = std::min(std::max((<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(offset) + <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(round(value/scale))),</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(min)), <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(max));</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">auto</span> quantizedBits = <span class="keyword">static_cast&lt;</span>QuantizedType<span class="keyword">&gt;</span>(clampedValue);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> quantizedBits;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="abbbe4a59b72fba606f21e7c24dcbd8c0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abbbe4a59b72fba606f21e7c24dcbd8c0">&#9670;&nbsp;</a></span>Quantize() <span class="overload">[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">void armnn::Quantize </td>
<td>(</td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>quant</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const float *&#160;</td>
<td class="paramname"><em>dequant</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.html#l00121">121</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.html">RefWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;{</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements(); i++)</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; {</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; quant[i] = armnn::Quantize&lt;uint8_t&gt;(dequant[i], <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(), <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
</div>
</div>
<a id="ad64b7a275169ba1b1ba2d15679f7e8b1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad64b7a275169ba1b1ba2d15679f7e8b1">&#9670;&nbsp;</a></span>Reduce()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Reduce </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; uint32_t &gt;&#160;</td>
<td class="paramname"><em>axis</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0">ReduceOperation</a>&#160;</td>
<td class="paramname"><em>reduceOperation</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_reduce_8cpp_source.html#l00070">70</a> of file <a class="el" href="_reduce_8cpp_source.html">Reduce.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;{</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.html">armnn::TensorShape</a> inputDims = inputInfo.GetShape();</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputNumDims = inputInfo.<a class="code" href="classarmnn_1_1_tensor_shape.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputs = outputInfo.GetNumElements();</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; </div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="comment">// Initialise temp output</span></div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; std::vector&lt;float&gt; tempOut(numOutputs);</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">switch</span>(reduceOperation)</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; {</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Mean:</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Sum:</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; std::fill(tempOut.begin(), tempOut.end(), 0.0f);</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Prod:</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; std::fill(tempOut.begin(), tempOut.end(), 1.0f);</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Max:</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; std::fill(tempOut.begin(), tempOut.end(), -1 * std::numeric_limits&lt;float&gt;::max());</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Min:</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; std::fill(tempOut.begin(), tempOut.end(), std::numeric_limits&lt;float&gt;::max());</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Unknown reduce method: &quot;</span> +</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; std::to_string(<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(reduceOperation)));</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; </div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="comment">// Initialise temp index</span></div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; std::vector&lt;unsigned int&gt; tempIndex(inputNumDims, 0);</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; </div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; std::vector&lt;unsigned int&gt; resolvedAxis = axis;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">if</span> (resolvedAxis.empty())</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; {</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx &lt; inputNumDims; ++idx)</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; resolvedAxis.push_back(idx);</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">auto</span> numResolvedAxis = armnn::numeric_cast&lt;unsigned int&gt;(resolvedAxis.size());</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; </div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="comment">// Iterates through input_data and operates over the reduced axis</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">bool</span> hasNext = <span class="keyword">true</span>; hasNext; hasNext = <a class="code" href="namespacearmnn.html#a869f740e9c2fcb8642350c6e3d0b3742">NextIndex</a>(inputNumDims, inputDims, tempIndex))</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputOffset = <a class="code" href="namespacearmnn.html#ae86f1ca23eaa764da9e589cc8e39a969">ReducedOutputOffset</a>(inputNumDims, inputDims, tempIndex, 0, {});</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputOffset = <a class="code" href="namespacearmnn.html#ae86f1ca23eaa764da9e589cc8e39a969">ReducedOutputOffset</a>(inputNumDims, inputDims, tempIndex,</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; numResolvedAxis, resolvedAxis);</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; input[inputOffset];</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keyword">auto</span> inputValue = input.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">switch</span>(reduceOperation)</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; {</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Mean:</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Sum:</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; tempOut[outputOffset] += inputValue;</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Prod:</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; tempOut[outputOffset] *= inputValue;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Max:</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">if</span> (inputValue &gt; tempOut[outputOffset])</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; {</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; tempOut[outputOffset] = inputValue;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Min:</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">if</span> (inputValue &lt; tempOut[outputOffset])</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; {</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; tempOut[outputOffset] = inputValue;</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Unknown reduce method: &quot;</span> +</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; std::to_string(<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(reduceOperation)));</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; </div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="comment">// Takes average by num of elements added to get MEAN</span></div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordtype">size_t</span> numElementsInAxis = 1;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx &lt; numResolvedAxis; ++idx)</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> current = inputDims[resolvedAxis[idx]];</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; numElementsInAxis *= current;</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; </div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx &lt; numOutputs; ++idx)</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; {</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; output[idx];</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">if</span> (reduceOperation == ReduceOperation::Mean)</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; {</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">if</span> (numElementsInAxis &gt; 0)</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(tempOut[idx] / armnn::numeric_cast&lt;float&gt;(numElementsInAxis));</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; }</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; {</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(tempOut[idx]);</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; }</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00198">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a6a061313d22e51e0f25b7cd4dc065233">Max</a>, <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">Mean</a>, <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a78d811e98514cd165dda532286610fd2">Min</a>, <a class="el" href="_reduce_8cpp_source.html#l00019">NextIndex()</a>, <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">Prod</a>, <a class="el" href="_reduce_8cpp_source.html#l00040">ReducedOutputOffset()</a>, <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>, and <a class="el" href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">Sum</a>.</p>
</div>
</div>
<a id="ae86f1ca23eaa764da9e589cc8e39a969"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae86f1ca23eaa764da9e589cc8e39a969">&#9670;&nbsp;</a></span>ReducedOutputOffset()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned int armnn::ReducedOutputOffset </td>
<td>(</td>
<td class="paramtype">const unsigned int&#160;</td>
<td class="paramname"><em>numDims</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">armnn::TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>dims</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; unsigned int &gt; &amp;&#160;</td>
<td class="paramname"><em>index</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const unsigned int&#160;</td>
<td class="paramname"><em>numAxis</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
<td class="paramname"><em>axis</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_reduce_8cpp_source.html#l00040">40</a> of file <a class="el" href="_reduce_8cpp_source.html">Reduce.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> offset = 0;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx &lt; numDims; ++idx)</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordtype">bool</span> isAxis = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (!axis.empty())</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axisIdx = 0; axisIdx &lt; numAxis; ++axisIdx)</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; {</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">if</span> (idx == axis[axisIdx])</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; isAxis = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">if</span> (!isAxis)</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; offset = offset * dims[idx] + index[idx];</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">return</span> offset;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_reduce_8cpp_source.html#l00070">Reduce()</a>.</p>
</div>
</div>
<a id="ae7d50846b2769f81521af24d063bc093"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae7d50846b2769f81521af24d063bc093">&#9670;&nbsp;</a></span>RefBackendId()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::RefBackendId </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</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.html#l00010">10</a> of file <a class="el" href="_ref_backend_id_8hpp_source.html">RefBackendId.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;CpuRef&quot;</span>; }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_ref_backend_8cpp_source.html#l00022">RefBackend::GetIdStatic()</a>.</p>
</div>
</div>
<a id="a5baedac4819656984488bc1fe5fe1505"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5baedac4819656984488bc1fe5fe1505">&#9670;&nbsp;</a></span>RefTensorHandleFactoryId()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::RefTensorHandleFactoryId </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</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.html#l00015">15</a> of file <a class="el" href="_ref_tensor_handle_factory_8hpp_source.html">RefTensorHandleFactory.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;Arm/Ref/TensorHandleFactory&quot;</span>; }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_ref_tensor_handle_factory_8cpp_source.html#l00016">RefTensorHandleFactory::GetIdStatic()</a>.</p>
</div>
</div>
<a id="ae756568a7f2c58778bb6d759d2bd38db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae756568a7f2c58778bb6d759d2bd38db">&#9670;&nbsp;</a></span>RemoveReshapeLayer()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void armnn::RemoveReshapeLayer </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_reshape_layer.html">ReshapeLayer</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::map&lt; <a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>, <a class="el" href="classarmnn_1_1_layer.html">Layer</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>untouched</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;&#160;</td>
<td class="paramname"><em>optimizationViews</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_subgraph_utils_8hpp_source.html#l00293">293</a> of file <a class="el" href="_subgraph_utils_8hpp_source.html">SubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;{</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">if</span> (baseLayer == <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; {</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; }</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; ReshapeDescriptor reshapeDescriptor = baseLayer-&gt;GetParameters();</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; Layer&amp; parentLayer = baseLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetOwningLayer();</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; </div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="comment">// Cannot currently remove the Reshape if it&#39;s connected to an Input, Constant or Splitter</span></div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">if</span> (parentLayer.GetType() == LayerType::Input || parentLayer.GetType() == LayerType::Constant)</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; {</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; </div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="comment">// Cannot currently remove the Reshape if it&#39;s connected to an OutputSlot or Concat</span></div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; baseLayer-&gt;GetOutputSlot(0).GetNumConnections(); ++i)</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; Layer&amp; nextLayer = baseLayer-&gt;GetOutputSlot(0).GetConnection(i)-&gt;GetOwningLayer();</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; </div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">if</span> (nextLayer.GetType() == LayerType::Output)</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; {</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; }</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keyword">auto</span> it = untouched.find(baseLayer-&gt;GetGuid());</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">if</span> (it == untouched.end())</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; {</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="comment">// Already removed from map</span></div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; }</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; untouched.erase(it);</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; </div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="comment">// Override the InputSlot TensorInfos for all the layers connected to the Reshape&#39;s OutputSlot</span></div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; baseLayer-&gt;GetOutputSlot(0).GetNumConnections(); ++i)</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; {</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; Layer&amp; nextLayer = baseLayer-&gt;GetOutputSlot(0).GetConnection(i)-&gt;GetOwningLayer();</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keyword">auto</span> inputIndex = baseLayer-&gt;GetOutputSlot(0).GetConnection(i)-&gt;GetSlotIndex();</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; TensorInfo reshapeInfo(baseLayer-&gt;GetOutputSlot(0).GetTensorInfo());</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; reshapeInfo.SetShape(reshapeDescriptor.m_TargetShape);</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; nextLayer.GetInputSlot(inputIndex).SetTensorInfo(reshapeInfo);</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; }</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; optimizationViews.AddDeletedSubgraph(baseLayer);</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_optimization_views_8hpp_source.html#l00053">OptimizationViews::AddDeletedSubgraph()</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="_layer_8hpp_source.html#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.html#l00083">OutputSlot::GetConnection()</a>, <a class="el" href="_layer_8hpp_source.html#l00343">Layer::GetGuid()</a>, <a class="el" href="_layer_8hpp_source.html#l00337">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00339">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00053">InputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_8hpp_source.html#l00132">OutputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_with_parameters_8hpp_source.html#l00019">LayerWithParameters&lt; Parameters &gt;::GetParameters()</a>, <a class="el" href="_layer_8hpp_source.html#l00054">InputSlot::GetSlotIndex()</a>, <a class="el" href="_layer_8cpp_source.html#l00100">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_layer_8hpp_source.html#l00286">Layer::GetType()</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="_descriptors_8hpp_source.html#l01039">ReshapeDescriptor::m_TargetShape</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>, <a class="el" href="_tensor_8hpp_source.html#l00195">TensorInfo::SetShape()</a>, and <a class="el" href="_layer_8cpp_source.html#l00609">InputSlot::SetTensorInfo()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_ref_backend_8cpp_source.html#l00072">RefBackend::OptimizeSubgraphView()</a>, <a class="el" href="_neon_backend_8cpp_source.html#l00144">NeonBackend::OptimizeSubgraphView()</a>, and <a class="el" href="_cl_backend_8cpp_source.html#l00292">ClBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="a52b301fd3adce20b51c4482cb52f1a38"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a52b301fd3adce20b51c4482cb52f1a38">&#9670;&nbsp;</a></span>ReorderWeightChannelsForAcl()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_const_tensor.html">ConstTensor</a> armnn::ReorderWeightChannelsForAcl </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_const_tensor.html">ConstTensor</a> &amp;&#160;</td>
<td class="paramname"><em>weightHandle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
<td class="paramname"><em>dataLayout</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>permuteBuffer</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.html#l00074">74</a> of file <a class="el" href="_workload_utils_8cpp_source.html">WorkloadUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;{</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>* weight = <span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>*<span class="keyword">&gt;</span>(permuteBuffer);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">const</span> TensorShape&amp; weightShape = weightHandle.GetShape();</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> multiplier;</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> height;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">switch</span> (dataLayout)</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">case</span> DataLayout::NHWC: <span class="comment">//It actually is [ H, W, I, M ]</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; height = weightShape[0];</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; width = weightShape[1];</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; inputChannels = weightShape[2];</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; multiplier = weightShape[3];</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">case</span> DataLayout::NCHW: <span class="comment">//It actually is [ M, I, H, W ]</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; height = weightShape[2];</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; width = weightShape[3];</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; inputChannels = weightShape[1];</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; multiplier = weightShape[0];</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; </div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; std::vector&lt;DataType&gt; weightAclOrder(height*width*inputChannels*multiplier);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> destinationWeightsChannel;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> totalChannels = inputChannels * multiplier;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelSize = height * width;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannel = 0;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; </div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> originWeightsChannel = 0; originWeightsChannel &lt; totalChannels; originWeightsChannel++)</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; {</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; inputChannel = originWeightsChannel % inputChannels;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; destinationWeightsChannel = (originWeightsChannel - inputChannel) / inputChannels + multiplier * inputChannel;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; channelSize; i++)</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; weightAclOrder[i + destinationWeightsChannel * channelSize] =</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; weight[i + originWeightsChannel * channelSize];</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; ::memcpy(permuteBuffer, weightAclOrder.data(), weightHandle.GetInfo().GetNumBytes());</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">return</span> ConstTensor(weightHandle.GetInfo(), permuteBuffer);</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.html#l00297">BaseTensor&lt; MemoryType &gt;::GetInfo()</a>, <a class="el" href="_tensor_8cpp_source.html#l00427">TensorInfo::GetNumBytes()</a>, <a class="el" href="_tensor_8hpp_source.html#l00299">BaseTensor&lt; MemoryType &gt;::GetShape()</a>, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>, and <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>.</p>
</div>
</div>
<a id="abecdb9c231b9ced02bec27a1ca54184f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abecdb9c231b9ced02bec27a1ca54184f">&#9670;&nbsp;</a></span>ReplaceLayers()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::ReplaceLayers </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;&#160;</td>
<td class="paramname"><em>optimizationViews</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_i_connectable_layer.html">IConnectableLayer</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>layers</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00339">339</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html">ArmComputeSubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;{</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; std::list&lt;IConnectableLayer*&gt; replacementLayers(layers.begin(), layers.end());</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; </div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; SubgraphView substitutionSubgraph(baseLayer);</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; SubgraphView replacementSubgraph(std::move(replacementLayers),</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; CreateIInputsFrom({replacementLayers.front()}),</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; CreateIOutputsFrom({replacementLayers.back()}));</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; </div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_optimization_views_8hpp_source.html#l00038">OptimizationViews::AddSubstitution()</a>.</p>
</div>
</div>
<a id="af8b1723c2ceaf3aca2deddbf9b0e3e44"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af8b1723c2ceaf3aca2deddbf9b0e3e44">&#9670;&nbsp;</a></span>ReplaceMultipleLayers()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::ReplaceMultipleLayers </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;&#160;</td>
<td class="paramname"><em>optimizationViews</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_i_connectable_layer.html">IConnectableLayer</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>originalLayers</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
<td class="paramname"><em>baseLayer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; SlotList &gt;&#160;</td>
<td class="paramname"><em>inputLayersSlotLists</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; SlotList &gt;&#160;</td>
<td class="paramname"><em>outputLayersSlotLists</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html#l00357">357</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.html">ArmComputeSubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;{</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; std::list&lt;IConnectableLayer*&gt; originalLayerList(originalLayers.begin(), originalLayers.end());</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; </div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; SubgraphView substitutionSubgraph(</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; std::move(originalLayerList),</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; CreateIInputsFromSlotLists&lt;armnn::IConnectableLayer&gt;(originalLayers, inputLayersSlotLists),</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; CreateIOutputsFromSlotLists&lt;armnn::IConnectableLayer&gt;(originalLayers, outputLayersSlotLists));</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; SubgraphView replacementSubgraph(baseLayer);</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; </div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_optimization_views_8hpp_source.html#l00038">OptimizationViews::AddSubstitution()</a>.</p>
</div>
</div>
<a id="a3cf1cee98e0ed8b54263ec7279f6ec69"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3cf1cee98e0ed8b54263ec7279f6ec69">&#9670;&nbsp;</a></span>ReportError()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::ReportError </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>errorMessage</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt;&#160;</td>
<td class="paramname"><em>errorMessages</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00762">762</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160;{</div>
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; std::stringstream fullErrorMessage;</div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; fullErrorMessage &lt;&lt; <span class="stringliteral">&quot;ERROR: &quot;</span> &lt;&lt; errorMessage;</div>
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; fullErrorMessage.str();</div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordflow">if</span> (errorMessages)</div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; {</div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; errorMessages.value().push_back(fullErrorMessage.str());</div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; }</div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_logging_8hpp_source.html#l00212">ARMNN_LOG</a>, and <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01179">AssignBackends()</a>, <a class="el" href="_network_8cpp_source.html#l00801">CheckScaleSetOnQuantizedType()</a>, <a class="el" href="_network_8cpp_source.html#l01906">Optimize()</a>, and <a class="el" href="_network_8cpp_source.html#l00786">ReturnWithError()</a>.</p>
</div>
</div>
<a id="a5afd10e5e84ebf5cb8cfc8707492eda7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5afd10e5e84ebf5cb8cfc8707492eda7">&#9670;&nbsp;</a></span>ReportUntouchedLayers()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void armnn::ReportUntouchedLayers </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.html">OptimizationViews</a> &amp;&#160;</td>
<td class="paramname"><em>optimizationViews</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::map&lt; <a class="el" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>, <a class="el" href="classarmnn_1_1_layer.html">Layer</a> * &gt;&#160;</td>
<td class="paramname"><em>untouched</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_subgraph_utils_8hpp_source.html#l00220">220</a> of file <a class="el" href="_subgraph_utils_8hpp_source.html">SubgraphUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;{</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; std::vector&lt;Layer*&gt; untouchedVector;</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; pair : untouched)</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; {</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; Layer* layer = pair.second;</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; SubgraphView subgraphView({layer},</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; CreateIInputsFrom({layer}),</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; CreateIOutputsFrom({layer}));</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; optimizationViews.AddUntouchedSubgraph(std::move(subgraphView));</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_optimization_views_8hpp_source.html#l00048">OptimizationViews::AddUntouchedSubgraph()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_ref_backend_8cpp_source.html#l00072">RefBackend::OptimizeSubgraphView()</a>, <a class="el" href="_neon_backend_8cpp_source.html#l00144">NeonBackend::OptimizeSubgraphView()</a>, <a class="el" href="_cl_backend_8cpp_source.html#l00292">ClBackend::OptimizeSubgraphView()</a>, and <a class="el" href="_gpu_fsa_backend_8cpp_source.html#l00220">GpuFsaBackend::OptimizeSubgraphView()</a>.</p>
</div>
</div>
<a id="a070307e9ee0f7969f7d4320145d1dddb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a070307e9ee0f7969f7d4320145d1dddb">&#9670;&nbsp;</a></span>ReportWarning()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::ReportWarning </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>warningMessage</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt;&#160;</td>
<td class="paramname"><em>warningMessages</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00774">774</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;{</div>
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; std::stringstream fullWarningMessage;</div>
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; fullWarningMessage &lt;&lt; <span class="stringliteral">&quot;WARNING: &quot;</span> &lt;&lt; warningMessage;</div>
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; fullWarningMessage.str();</div>
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <span class="keywordflow">if</span> (warningMessages)</div>
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; {</div>
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; warningMessages.value().push_back(fullWarningMessage.str());</div>
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; }</div>
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_logging_8hpp_source.html#l00212">ARMNN_LOG</a>, and <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01320">ApplyBackendOptimizations()</a>, and <a class="el" href="_network_8cpp_source.html#l00844">AttemptBackendAssignment()</a>.</p>
</div>
</div>
<a id="a5ee4a1cca55f69b31e625c786655ed1a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5ee4a1cca55f69b31e625c786655ed1a">&#9670;&nbsp;</a></span>RequiresCopy()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::RequiresCopy </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>&#160;</td>
<td class="paramname"><em>src</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.html#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>&#160;</td>
<td class="paramname"><em>dst</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.html">TensorHandleFactoryRegistry</a> &amp;&#160;</td>
<td class="paramname"><em>registry</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01454">1454</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;{</div>
<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; <span class="keywordflow">if</span> (src != dst)</div>
<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; {</div>
<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; ITensorHandleFactory* srcFactory = registry.GetFactory(src);</div>
<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; ITensorHandleFactory* dstFactory = registry.GetFactory(dst);</div>
<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; </div>
<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; <span class="keywordflow">if</span> (srcFactory &amp;&amp; dstFactory &amp;&amp;</div>
<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; (srcFactory-&gt;GetExportFlags() &amp; dstFactory-&gt;GetImportFlags()) != 0)</div>
<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; {</div>
<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; }</div>
<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; }</div>
<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00090">ITensorHandleFactory::GetExportFlags()</a>, <a class="el" href="_tensor_handle_factory_registry_8cpp_source.html#l00039">TensorHandleFactoryRegistry::GetFactory()</a>, and <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00091">ITensorHandleFactory::GetImportFlags()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01576">CalculateSlotOption()</a>.</p>
</div>
</div>
<a id="a3170fdd696155a247ecd81d445c0e2e1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3170fdd696155a247ecd81d445c0e2e1">&#9670;&nbsp;</a></span>ReshapeWeightsForAcl()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void ReshapeWeightsForAcl </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>weightInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
<td class="paramname"><em>dataLayout</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.html#l00048">48</a> of file <a class="el" href="_workload_utils_8cpp_source.html">WorkloadUtils.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;{</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="comment">// Reshape the weights in-place</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> TensorShape&amp; weightShape = weightInfo.GetShape();</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">switch</span> (dataLayout)</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; {</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">case</span> DataLayout::NHWC:</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="comment">// The data layout is NHWC, reshape from [ H, W, I, M ] to [ 1, H, W, I * M ]</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; weightInfo.SetShape({ 1,</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; weightShape[0],</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; weightShape[1],</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; weightShape[2] * weightShape[3] });</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; weightInfo.SetShape({ 1,</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; weightShape[0] * weightShape[1],</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; weightShape[2],</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; weightShape[3] });</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">case</span> DataLayout::NCHW:</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="comment">// The data layout is NCHW, reshape from [ M, I, H, W ] to [ 1, I * M, H, W, ]</span></div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; weightInfo.SetShape({ 1, weightShape[0] * weightShape[1], weightShape[2], weightShape[3] });</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>, and <a class="el" href="_tensor_8hpp_source.html#l00195">TensorInfo::SetShape()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_workload_utils_8cpp_source.html#l00237">ConvertWeightTensorFromArmnnToAcl()</a>, and <a class="el" href="_workload_utils_8cpp_source.html#l00122">ConvertWeightTensorInfoFromArmnnToAcl()</a>.</p>
</div>
</div>
<a id="aaa168a41b648cda82a2c8b9f2b91ec04"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaa168a41b648cda82a2c8b9f2b91ec04">&#9670;&nbsp;</a></span>Resize()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Resize </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>out</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_utils_1_1_data_layout_indexed.html">DataLayoutIndexed</a>&#160;</td>
<td class="paramname"><em>dataLayout</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4">ResizeMethod</a>&#160;</td>
<td class="paramname"><em>resizeMethod</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>alignCorners</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>halfPixelCenters</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_resize_8cpp_source.html#l00065">65</a> of file <a class="el" href="_resize_8cpp_source.html">Resize.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;{</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// alignCorners and halfPixelCenters cannot both be true</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(!(alignCorners &amp;&amp; halfPixelCenters),</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="stringliteral">&quot;Resize: alignCorners and halfPixelCenters cannot both be true&quot;</span>);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">// 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="l00079"></a><span class="lineno"> 79</span>&#160; <span class="comment">// image is projected into the input image to figure out the interpolants and weights. Note that this</span></div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="comment">// will yield different results than if projecting the centre of output texels.</span></div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; </div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <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.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0];</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelCount = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()];</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; </div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()];</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()];</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()];</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()];</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; </div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">// How much to scale pixel coordinates in the output image, to get the corresponding pixel coordinates</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">// in the input image.</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> scaleY = CalculateResizeScale(inputHeight, outputHeight, alignCorners);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> scaleX = CalculateResizeScale(inputWidth, outputWidth, alignCorners);</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>&amp; inputShape = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>&amp; outputShape = outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n = 0; n &lt; batchSize; ++n)</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; {</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; channelCount; ++c)</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; {</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y = 0; y &lt; outputHeight; ++y)</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; {</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="comment">// Corresponding real-valued height coordinate in input image.</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordtype">float</span> iy = PixelScaler(y, scaleY, halfPixelCenters, resizeMethod);</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="comment">// Discrete height coordinate of top-left texel (in the 2x2 texel area used for interpolation).</span></div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> fiy = (resizeMethod == ResizeMethod::NearestNeighbor &amp;&amp; alignCorners) ? <a class="code" href="namespacearmnn.html#a3cf63e1c930f73db7f917203fe15f503">armnn::roundf</a>(iy)</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; : floorf(iy);</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="comment">// Pixel scaling a value with Half Pixel Centers can be negative, if so set to 0</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y0 = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(std::max(fiy, 0.0f));</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="comment">// Interpolation weight (range [0,1]).</span></div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> yw = iy - fiy;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; </div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x = 0; x &lt; outputWidth; ++x)</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="comment">// Real-valued and discrete width coordinates in input image.</span></div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordtype">float</span> ix = PixelScaler(x, scaleX, halfPixelCenters, resizeMethod);</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="comment">// Nearest Neighbour uses rounding to align to corners</span></div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> fix = resizeMethod == ResizeMethod::NearestNeighbor &amp;&amp; alignCorners ? <a class="code" href="namespacearmnn.html#a3cf63e1c930f73db7f917203fe15f503">armnn::roundf</a>(ix)</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; : floorf(ix);</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="comment">// Pixel scaling a value with Half Pixel Centers can be negative, if so set to 0</span></div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x0 = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(std::max(fix, 0.0f));</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="comment">// Interpolation weight (range [0,1]).</span></div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> xw = ix - fix;</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; </div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x1;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y1;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="comment">// Half Pixel Centers uses the scaling to compute a weighted parameter for nearby pixels</span></div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">if</span> (halfPixelCenters)</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; {</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; x1 = std::min(<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(std::ceil(ix)), inputWidth - 1u);</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; y1 = std::min(<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(std::ceil(iy)), inputHeight - 1u);</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="comment">// Discrete width/height coordinates of texels below and to the right of (x0, y0).</span></div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; {</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; x1 = std::min(x0 + 1, inputWidth - 1u);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; y1 = std::min(y0 + 1, inputHeight - 1u);</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordtype">float</span> interpolatedValue;</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">switch</span> (resizeMethod)</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; {</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">case</span> ResizeMethod::Bilinear:</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; in[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a1e25d8623da985a43597b5756c73b206">GetIndex</a>(inputShape, n, c, y0, x0)];</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordtype">float</span> input1 = in.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; in[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a1e25d8623da985a43597b5756c73b206">GetIndex</a>(inputShape, n, c, y0, x1)];</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordtype">float</span> input2 = in.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; in[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a1e25d8623da985a43597b5756c73b206">GetIndex</a>(inputShape, n, c, y1, x0)];</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordtype">float</span> input3 = in.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; in[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a1e25d8623da985a43597b5756c73b206">GetIndex</a>(inputShape, n, c, y1, x1)];</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordtype">float</span> input4 = in.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; </div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">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="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> ly1 = Lerp(input3, input4, xw); <span class="comment">// lerp along row y1.</span></div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; interpolatedValue = Lerp(ly0, ly1, yw);</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">case</span> ResizeMethod::NearestNeighbor:</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="comment">// calculate euclidean distance to the 4 neighbours</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keyword">auto</span> distance00 = EuclideanDistance(fix, fiy, x0, y0);</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keyword">auto</span> distance01 = EuclideanDistance(fix, fiy, x0, y1);</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keyword">auto</span> distance10 = EuclideanDistance(fix, fiy, x1, y0);</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keyword">auto</span> distance11 = EuclideanDistance(fix, fiy, x1, y1);</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; </div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keyword">auto</span> <a class="code" href="structarmnn_1_1minimum.html">minimum</a> = std::min( { distance00, distance01, distance10, distance11 } );</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; </div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xNearest = 0;</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yNearest = 0;</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; </div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1minimum.html">minimum</a> == distance00)</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; xNearest = x0;</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; yNearest = y0;</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; }</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1minimum.html">minimum</a> == distance01)</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; xNearest = x0;</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; yNearest = y1;</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1minimum.html">minimum</a> == distance10)</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; xNearest = x1;</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; yNearest = y0;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1minimum.html">minimum</a> == distance11)</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; xNearest = x1;</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; yNearest = y1;</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; {</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(<span class="stringliteral">&quot;Resize Nearest Neighbor failure&quot;</span>);</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; </div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; in[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a1e25d8623da985a43597b5756c73b206">GetIndex</a>(inputShape, n, c, yNearest, xNearest)];</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; interpolatedValue = in.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(<span class="stringliteral">&quot;Unknown resize method: &quot;</span> +</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; std::to_string(<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(resizeMethod)));</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; }</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; out[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a1e25d8623da985a43597b5756c73b206">GetIndex</a>(outputShape, n, c, y, x)];</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; out.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(interpolatedValue);</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>, <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00028">DataLayoutIndexed::GetIndex()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_resize_8cpp_source.html#l00065">Resize()</a>, <a class="el" href="_utils_8hpp_source.html#l00043">roundf()</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_resize_8cpp_source.html#l00065">Resize()</a>, and <a class="el" href="_resize_layer_8cpp_source.html#l00021">ResizeLayer::ResizeLayer()</a>.</p>
</div>
</div>
<a id="aeee4e55e6ad4fe12b2168f9fd1e88141"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeee4e55e6ad4fe12b2168f9fd1e88141">&#9670;&nbsp;</a></span>ReturnWithError()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a> armnn::ReturnWithError </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a>&#160;</td>
<td class="paramname"><em>res</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.html">Layer</a> *&#160;</td>
<td class="paramname"><em>layer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_backend_settings.html">BackendSettings</a> &amp;&#160;</td>
<td class="paramname"><em>backendSettings</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt;&#160;</td>
<td class="paramname"><em>errMessages</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00786">786</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160;{</div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; std::stringstream failureMsg;</div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; failureMsg &lt;&lt; <span class="stringliteral">&quot;Layer of type &quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.html#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a>(layer-&gt;GetType())</div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; &lt;&lt; <span class="stringliteral">&quot; is not supported on any preferred backend &quot;</span> &lt;&lt; backendSettings.m_PreferredBackends;</div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <a class="code" href="namespacearmnn.html#a3cf1cee98e0ed8b54263ec7279f6ec69">ReportError</a>(failureMsg.str(), errMessages);</div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; </div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; res.m_Error = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordflow">return</span> res;</div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_internal_types_8cpp_source.html#l00013">GetLayerTypeAsCString()</a>, <a class="el" href="_layer_8hpp_source.html#l00286">Layer::GetType()</a>, <a class="el" href="_network_8hpp_source.html#l00266">OptimizationResult::m_Error</a>, <a class="el" href="_backend_settings_8hpp_source.html#l00020">BackendSettings::m_PreferredBackends</a>, and <a class="el" href="_network_8cpp_source.html#l00762">ReportError()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01073">AssignBackendsIConnectable()</a>, and <a class="el" href="_network_8cpp_source.html#l00844">AttemptBackendAssignment()</a>.</p>
</div>
</div>
<a id="a8d4ef1958eb8b75e33ff5f9e1682c9a8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8d4ef1958eb8b75e33ff5f9e1682c9a8">&#9670;&nbsp;</a></span>ReverseGetFlatIdx()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned int armnn::ReverseGetFlatIdx </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
<td class="paramname"><em>idxList</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>inputRank</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; unsigned int &gt; &amp;&#160;</td>
<td class="paramname"><em>elementNumInner</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_reverse_v2_impl_8cpp_source.html#l00034">34</a> of file <a class="el" href="_reverse_v2_impl_8cpp_source.html">ReverseV2Impl.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iDim = 0; iDim &lt; inputRank; ++iDim)</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; {</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; idx += idxList[iDim] * elementNumInner[iDim];</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> idx;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_reverse_v2_impl_8cpp_source.html#l00049">ReverseRelocateIdx()</a>.</p>
</div>
</div>
<a id="ae9f7ce777fbcab84555a1e80ab03c13a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae9f7ce777fbcab84555a1e80ab03c13a">&#9670;&nbsp;</a></span>ReverseGetMultIdx()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;unsigned int&gt; armnn::ReverseGetMultIdx </td>
<td>(</td>
<td class="paramtype">const unsigned int&#160;</td>
<td class="paramname"><em>idx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>inputRank</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; unsigned int &gt; &amp;&#160;</td>
<td class="paramname"><em>elementNumInner</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_reverse_v2_impl_8cpp_source.html#l00016">16</a> of file <a class="el" href="_reverse_v2_impl_8cpp_source.html">ReverseV2Impl.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; std::vector&lt;unsigned int&gt; indexList(inputRank);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mIdx = idx;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iDim = 0; iDim &lt; inputRank; ++iDim)</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; {</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; indexList[iDim] = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(mIdx / elementNumInner[iDim]);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; mIdx %= elementNumInner[iDim];</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; }</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">return</span> indexList;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_reverse_v2_impl_8cpp_source.html#l00049">ReverseRelocateIdx()</a>.</p>
</div>
</div>
<a id="a8a0d9d6566aa1e098f6988b2ee98bf00"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8a0d9d6566aa1e098f6988b2ee98bf00">&#9670;&nbsp;</a></span>ReverseRelocateIdx()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned int armnn::ReverseRelocateIdx </td>
<td>(</td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>idx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>inputRank</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; bool &gt; &amp;&#160;</td>
<td class="paramname"><em>axisFlag</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; unsigned int &gt; &amp;&#160;</td>
<td class="paramname"><em>dimSize</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; unsigned int &gt; &amp;&#160;</td>
<td class="paramname"><em>elementNumInner</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_reverse_v2_impl_8cpp_source.html#l00049">49</a> of file <a class="el" href="_reverse_v2_impl_8cpp_source.html">ReverseV2Impl.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;{</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="comment">// Get the multidimensional index list for input</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">auto</span> inputIdxList = <a class="code" href="namespacearmnn.html#ae9f7ce777fbcab84555a1e80ab03c13a">ReverseGetMultIdx</a>(idx, inputRank, elementNumInner);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; std::vector&lt;unsigned int&gt; outputIdxList(inputRank);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="comment">// Relocate the input index to the output one</span></div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iDim = 0; iDim &lt; inputRank; ++iDim)</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">if</span> (axisFlag[iDim])</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; outputIdxList[iDim] = dimSize[iDim] - inputIdxList[iDim] - 1;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; outputIdxList[iDim] = inputIdxList[iDim];</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; }</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">// Get the 1-dimensional flattened index for output</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputIdx = <a class="code" href="namespacearmnn.html#a8d4ef1958eb8b75e33ff5f9e1682c9a8">ReverseGetFlatIdx</a>(outputIdxList, inputRank, elementNumInner);</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">return</span> outputIdx;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_reverse_v2_impl_8cpp_source.html#l00034">ReverseGetFlatIdx()</a>, and <a class="el" href="_reverse_v2_impl_8cpp_source.html#l00016">ReverseGetMultIdx()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_reverse_v2_impl_8cpp_source.html#l00078">ReverseV2()</a>.</p>
</div>
</div>
<a id="a8caac207d532c38c3909d40c742d8c3f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8caac207d532c38c3909d40c742d8c3f">&#9670;&nbsp;</a></span>ReverseV2()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void ReverseV2 </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>axisInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>inputDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>axisDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>outputEncoder</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_reverse_v2_impl_8cpp_source.html#l00078">78</a> of file <a class="el" href="_reverse_v2_impl_8cpp_source.html">ReverseV2Impl.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;{</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axesRank = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(axisInfo.GetNumElements());</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; </div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="comment">// Empty axis and empty tensor case: copy input to output</span></div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span> ((axesRank == 0) || inputInfo.GetNumElements() == 0)</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> idx = 0; idx &lt; inputInfo.GetNumElements(); idx++)</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; {</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordtype">float</span> inputValue = inputDecoder.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; inputDecoder += 1;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; outputEncoder.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputValue);</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; outputEncoder += 1;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; </div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputRank = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(inputInfo.GetNumDimensions());</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; std::vector&lt;bool&gt; axisFlag(inputRank, <span class="keyword">false</span>);</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; std::vector&lt;unsigned int&gt; dimSize(inputRank, 0);</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; std::vector&lt;int32_t&gt; axis(axesRank, 0);</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; </div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="comment">// Decode the axis information</span></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i &lt; axesRank; i++)</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; {</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; axis[i] = axisDecoder.Get();</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; axisDecoder += 1;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; </div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="comment">// Make sure the axes are positive</span></div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">for</span> (int32_t axisElement: axis)</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; {</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; axisElement = axisElement &lt; 0 ? axisElement + static_cast&lt;int32_t&gt;(inputRank) : axisElement;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; axisFlag[<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(axisElement)] = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; }</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; </div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">const</span> TensorShape &amp;inputShape = inputInfo.GetShape();</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> elementNum = inputInfo.GetNumElements();</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> baseDimSize = 1;</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; std::vector&lt;unsigned int&gt; elementNumInner;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">// Get the number of element within the specific dimension</span></div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iDim = 0; iDim &lt; inputRank; ++iDim) {</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; dimSize[iDim] = inputShape[iDim];</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; baseDimSize *= dimSize[iDim];</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; elementNumInner.push_back(<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(elementNum / baseDimSize));</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; </div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="comment">// Iterate through all elements</span></div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx &lt; elementNum; ++idx)</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; {</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordtype">float</span> inputValue = inputDecoder.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; inputDecoder += 1;</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keyword">auto</span> outputIdx = <a class="code" href="namespacearmnn.html#a8a0d9d6566aa1e098f6988b2ee98bf00">ReverseRelocateIdx</a>(idx, inputRank, axisFlag, dimSize, elementNumInner);</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; outputEncoder[outputIdx];</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; outputEncoder.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputValue);</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00198">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_reverse_v2_impl_8cpp_source.html#l00049">ReverseRelocateIdx()</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="ac616eba4fa6ed1911f4b64a189b194fc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac616eba4fa6ed1911f4b64a189b194fc">&#9670;&nbsp;</a></span>RevertConstantWeightsToFP32()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::RevertConstantWeightsToFP32 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> *&#160;</td>
<td class="paramname"><em>layer</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a3cf63e1c930f73db7f917203fe15f503"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3cf63e1c930f73db7f917203fe15f503">&#9670;&nbsp;</a></span>roundf()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">float armnn::roundf </td>
<td>(</td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>value</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_utils_8hpp_source.html#l00043">43</a> of file <a class="el" href="_utils_8hpp_source.html">Utils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">// Workaround Valgrind&#39;s mismatches: when running from Valgrind the call to std::round(4.5) == 4.0 instead of 5.0</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> (value &lt; 0.f) ? ::floorf(value - 0.5f) : ::floorf(value + 0.5f);</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_resize_8cpp_source.html#l00065">Resize()</a>.</p>
</div>
</div>
<a id="a52c299ca6a3884c609583a5a0663db80"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a52c299ca6a3884c609583a5a0663db80">&#9670;&nbsp;</a></span>RunClFunction()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void RunClFunction </td>
<td>(</td>
<td class="paramtype">arm_compute::IFunction &amp;&#160;</td>
<td class="paramname"><em>function</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_check_location.html">CheckLocation</a> &amp;&#160;</td>
<td class="paramname"><em>location</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.html#l00167">167</a> of file <a class="el" href="_cl_workload_utils_8hpp_source.html">ClWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;{</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; {</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keyword">function</span>.run();</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">catch</span> (cl::Error&amp; error)</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="namespacearmnn.html#a562616feb340f23dbad3d86eb8706218">WrapClError</a>(error, location);</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; }</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>, and <a class="el" href="_cl_workload_utils_8hpp_source.html#l00159">WrapClError()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_fill_workload_8cpp_source.html#l00040">ClFillWorkload::Execute()</a>, <a class="el" href="_cl_pad_workload_8cpp_source.html#l00056">ClPadWorkload::Execute()</a>, <a class="el" href="_cl_addition_workload_8cpp_source.html#l00039">ClAdditionWorkload::Execute()</a>, <a class="el" href="_cl_subtraction_workload_8cpp_source.html#l00040">ClSubtractionWorkload::Execute()</a>, <a class="el" href="_cl_activation_workload_8cpp_source.html#l00056">ClActivationWorkload::Execute()</a>, <a class="el" href="_cl_neg_workload_8cpp_source.html#l00042">ClNegWorkload::Execute()</a>, <a class="el" href="_cl_cast_workload_8cpp_source.html#l00044">ClCastWorkload::Execute()</a>, <a class="el" href="_cl_exp_workload_8cpp_source.html#l00048">ClExpWorkload::Execute()</a>, <a class="el" href="_cl_prelu_workload_8cpp_source.html#l00046">ClPreluWorkload::Execute()</a>, <a class="el" href="_cl_convert_fp16_to_fp32_workload_8cpp_source.html#l00038">ClConvertFp16ToFp32Workload::Execute()</a>, <a class="el" href="_cl_quantize_workload_8cpp_source.html#l00048">ClQuantizeWorkload::Execute()</a>, <a class="el" href="_cl_rsqrt_workload_8cpp_source.html#l00042">ClRsqrtWorkload::Execute()</a>, <a class="el" href="_cl_sin_workload_8cpp_source.html#l00042">ClSinWorkload::Execute()</a>, <a class="el" href="_cl_abs_workload_8cpp_source.html#l00042">ClAbsWorkload::Execute()</a>, <a class="el" href="_cl_sqrt_workload_8cpp_source.html#l00064">ClSqrtWorkload::Execute()</a>, <a class="el" href="_cl_convert_fp32_to_fp16_workload_8cpp_source.html#l00038">ClConvertFp32ToFp16Workload::Execute()</a>, <a class="el" href="_cl_log_workload_8cpp_source.html#l00042">ClLogWorkload::Execute()</a>, <a class="el" href="_cl_lstm_float_workload_8cpp_source.html#l00238">ClLstmFloatWorkload::Execute()</a>, <a class="el" href="_cl_normalization_float_workload_8cpp_source.html#l00059">ClNormalizationFloatWorkload::Execute()</a>, <a class="el" href="_cl_floor_float_workload_8cpp_source.html#l00038">ClFloorFloatWorkload::Execute()</a>, <a class="el" href="_cl_reshape_workload_8cpp_source.html#l00040">ClReshapeWorkload::Execute()</a>, <a class="el" href="_cl_resize_workload_8cpp_source.html#l00091">ClResizeWorkload::Execute()</a>, <a class="el" href="_cl_gather_workload_8cpp_source.html#l00054">ClGatherWorkload::Execute()</a>, <a class="el" href="_cl_space_to_depth_workload_8cpp_source.html#l00048">ClSpaceToDepthWorkload::Execute()</a>, <a class="el" href="_cl_instance_normalization_workload_8cpp_source.html#l00064">ClInstanceNormalizationWorkload::Execute()</a>, <a class="el" href="_cl_maximum_workload_8cpp_source.html#l00056">ClMaximumWorkload::Execute()</a>, <a class="el" href="_cl_minimum_workload_8cpp_source.html#l00056">ClMinimumWorkload::Execute()</a>, <a class="el" href="_cl_arg_min_max_workload_8cpp_source.html#l00094">ClArgMinMaxWorkload::Execute()</a>, <a class="el" href="_cl_channel_shuffle_workload_8cpp_source.html#l00095">ClChannelShuffleWorkload::Execute()</a>, <a class="el" href="_cl_l2_normalization_float_workload_8cpp_source.html#l00057">ClL2NormalizationFloatWorkload::Execute()</a>, <a class="el" href="_cl_comparison_workload_8cpp_source.html#l00067">ClComparisonWorkload::Execute()</a>, <a class="el" href="_cl_batch_mat_mul_workload_8cpp_source.html#l00109">ClBatchMatMulWorkload::Execute()</a>, <a class="el" href="_cl_slice_workload_8cpp_source.html#l00060">ClSliceWorkload::Execute()</a>, <a class="el" href="_cl_space_to_batch_nd_workload_8cpp_source.html#l00178">ClSpaceToBatchNdWorkload::Execute()</a>, <a class="el" href="_cl_depth_to_space_workload_8cpp_source.html#l00070">ClDepthToSpaceWorkload::Execute()</a>, <a class="el" href="_cl_division_workload_8cpp_source.html#l00053">ClDivisionWorkload::Execute()</a>, <a class="el" href="_cl_pooling2d_workload_8cpp_source.html#l00065">ClPooling2dWorkload::Execute()</a>, <a class="el" href="_cl_pooling3d_workload_8cpp_source.html#l00065">ClPooling3dWorkload::Execute()</a>, <a class="el" href="_cl_gather_nd_workload_8cpp_source.html#l00196">ClGatherNdWorkload::Execute()</a>, <a class="el" href="_cl_strided_slice_workload_8cpp_source.html#l00102">ClStridedSliceWorkload::Execute()</a>, <a class="el" href="_cl_batch_to_space_nd_workload_8cpp_source.html#l00167">ClBatchToSpaceNdWorkload::Execute()</a>, <a class="el" href="_cl_multiplication_workload_8cpp_source.html#l00079">ClMultiplicationWorkload::Execute()</a>, <a class="el" href="_cl_permute_workload_8cpp_source.html#l00055">ClPermuteWorkload::Execute()</a>, <a class="el" href="_cl_scatter_nd_workload_8cpp_source.html#l00071">ClScatterNdWorkload::Execute()</a>, <a class="el" href="_cl_transpose_workload_8cpp_source.html#l00055">ClTransposeWorkload::Execute()</a>, <a class="el" href="_cl_quantized_lstm_workload_8cpp_source.html#l00142">ClQuantizedLstmWorkload::Execute()</a>, <a class="el" href="_cl_log_softmax_workload_8cpp_source.html#l00054">ClLogSoftmaxWorkload::Execute()</a>, <a class="el" href="_cl_softmax_workload_8cpp_source.html#l00053">ClSoftmaxWorkload::Execute()</a>, <a class="el" href="_cl_depthwise_convolution_workload_8cpp_source.html#l00157">ClDepthwiseConvolutionWorkload::Execute()</a>, <a class="el" href="_cl_batch_normalization_float_workload_8cpp_source.html#l00113">ClBatchNormalizationFloatWorkload::Execute()</a>, <a class="el" href="_cl_convolution3d_workload_8cpp_source.html#l00116">ClConvolution3dWorkload::Execute()</a>, <a class="el" href="_cl_fully_connected_workload_8cpp_source.html#l00104">ClFullyConnectedWorkload::Execute()</a>, <a class="el" href="_cl_transpose_convolution2d_workload_8cpp_source.html#l00123">ClTransposeConvolution2dWorkload::Execute()</a>, and <a class="el" href="_cl_convolution2d_workload_8cpp_source.html#l00160">ClConvolution2dWorkload::Execute()</a>.</p>
</div>
</div>
<a id="a817820c4d17214f542a1a6dd7cea72d4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a817820c4d17214f542a1a6dd7cea72d4">&#9670;&nbsp;</a></span>ScatterNd() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void ScatterNd </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>indicesInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>updatesInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>shapeInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>indices</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>updates</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>shape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_scatter_nd_descriptor.html">ScatterNdDescriptor</a>&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_scatter_nd_8cpp_source.html#l00181">181</a> of file <a class="el" href="_scatter_nd_8cpp_source.html">ScatterNd.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;{</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="comment">// Axis Unsupported</span></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">if</span> (descriptor.m_AxisEnabled)</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; {</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;ScatterNd: axis param not supported.&quot;</span>);</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; }</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; </div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="comment">// Get the shape for indices, updates, and input</span></div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; TensorShape indicesShape = indicesInfo.GetShape();</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; TensorShape updatesShape = updatesInfo.GetShape();</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; </div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="comment">// Get the shape values</span></div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; std::vector&lt;float&gt; shapeValues = shape.DecodeTensor(shapeInfo.GetShape());</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="comment">// Check the shape</span></div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">if</span> (shapeInfo.GetNumElements() == 0)</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; {</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;ScatterNd: shape must have values.&quot;</span>);</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; }</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> shapeValue : shapeValues)</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; {</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">if</span> (shapeValue &lt;= 0)</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;ScatterNd: shape values must &gt;= 0.&quot;</span>);</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="comment">// Get the input shape</span></div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; std::vector&lt;unsigned int&gt; inputShape (shapeValues.begin(), shapeValues.end());</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputElementsNum = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; std::accumulate(inputShape.begin(), inputShape.end(), 1, std::multiplies&lt;unsigned int&gt;()));</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; </div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="comment">// Get the dimensions for indices and updates</span></div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimension = shapeInfo.GetNumElements();</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indicesDim = indicesInfo.GetNumDimensions();</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> updatesDim = updatesInfo.GetNumDimensions();</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; </div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// Calculate the outter and inner dimensions</span></div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outterDim = indicesShape[indicesDim - 1];</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> innerDim = dimension - outterDim;</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; </div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="comment">// Calculate the number of elements in each dimension</span></div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numElementsCount = 1;</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; std::vector&lt;unsigned int&gt; elementInDim(dimension);</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimIndex = dimension; dimIndex &gt; 0; --dimIndex)</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; {</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; elementInDim[dimIndex - 1] = numElementsCount;</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; numElementsCount *= inputShape[dimIndex - 1];</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; </div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="comment">// Number of updates per index</span></div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numUpdatesPerIndex = elementInDim[dimension - innerDim - 1];</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; </div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="comment">// Number of indices to update</span></div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numIndices = indicesShape[0];</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; </div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// Check Input Requirements</span></div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="comment">// Requirement 1: Indices and Updates must have rank at least 1</span></div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">if</span> (indicesDim &lt; 1 || updatesDim &lt; 1)</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; {</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;ScatterNd: indices and updates must have rank &gt;= 1.&quot;</span>);</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; </div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">// Requirement 2: shape, Indices and Updates must have values</span></div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">if</span> (indicesInfo.GetNumElements() == 0 ||</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; updatesInfo.GetNumElements() == 0)</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; {</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;ScatterNd: indices and updates tensor must have values.&quot;</span>);</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; }</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; </div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// Requirement 3: Indices and Updates must match in shape</span></div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="comment">// The updates dimension should equals to 1 + inner dimension</span></div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">if</span> (updatesDim != 1 + innerDim)</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; {</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;ScatterNd: updates dimension should equal to 1 + inner dimension.&quot;</span>);</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; }</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// The inner dimension of updates has to match with shape of input</span></div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimBackIndex = 0; dimBackIndex &lt; innerDim; ++dimBackIndex)</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; {</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">if</span> (updatesShape[updatesDim - dimBackIndex - 1] != inputShape[dimension - dimBackIndex - 1])</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; {</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; fmt::format(<span class="stringliteral">&quot;ScatterNd: input and updates shape not match on dimension {}&quot;</span>,</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; dimension - dimBackIndex));</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; }</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; </div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// Requirement 4: Check duplicate indices and out of bound indices</span></div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; std::set&lt;int&gt; indicesSet;</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; std::vector&lt;int&gt; flattenIndices(numIndices);</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indicesIdx = 0; indicesIdx &lt; numIndices; ++indicesIdx)</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="comment">// Get the index</span></div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordtype">int</span> flattenIndex = 0;</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; </div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outterIdx = 0; outterIdx &lt; outterDim; ++outterIdx) {</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; </div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordtype">int</span> outterIndexValue = indices.Get();</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; </div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="comment">// Check bounds</span></div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">if</span> (outterIndexValue &lt; 0 || outterIndexValue &gt;= <span class="keywordtype">int</span>(inputShape[outterIdx]))</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; {</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; fmt::format(<span class="stringliteral">&quot;ScatterNd: indices {} out of bound [0, {})&quot;</span>,</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; outterIndexValue, inputShape[outterIdx]));</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; </div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; flattenIndex += int(elementInDim[outterIdx]) * outterIndexValue;</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; ++indices;</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; }</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; </div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="comment">// Check duplicates when executing ScatterNd::Update</span></div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">if</span> (descriptor.m_Function == ScatterNdFunction::Update &amp;&amp;</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; indicesSet.find(flattenIndex) != indicesSet.end())</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; {</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; fmt::format(<span class="stringliteral">&quot;ScatterNd: duplicate indices {} occurs when executing ScatterNd::Update.&quot;</span>,</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; flattenIndex));</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; </div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; flattenIndices[indicesIdx] = flattenIndex;</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; indicesSet.insert(flattenIndex);</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; }</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; </div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="comment">// Set zeros to output</span></div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx &lt; inputElementsNum; ++idx)</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; {</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(0.0f);</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; ++output;</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; }</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; </div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="comment">// Iterate through all indices to scatter updates</span></div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indicesIdx = 0; indicesIdx &lt; numIndices; ++indicesIdx)</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; {</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="comment">// Get the index and calculate the flatten index</span></div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordtype">int</span> flattenIndex = flattenIndices[indicesIdx];</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; </div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="comment">// FlattenIndex is the place that we are going to update the elements</span></div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> updatesStartIdx = indicesIdx * numUpdatesPerIndex;</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> updatesIdx = 0; updatesIdx &lt; numUpdatesPerIndex; ++updatesIdx)</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; {</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; updates[updatesStartIdx + updatesIdx];</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordtype">float</span> updateValue = <a class="code" href="namespacearmnn.html#a41d0463c55ff6a85d84bfd94e5d25805">ScatterOperation</a>(descriptor.m_Function, 0.0f, updates.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>());</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; output[<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(flattenIndex) + updatesIdx];</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(updateValue);</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; }</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder&lt; IType &gt;::DecodeTensor()</a>, <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00198">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_descriptors_8hpp_source.html#l01728">ScatterNdDescriptor::m_AxisEnabled</a>, <a class="el" href="_descriptors_8hpp_source.html#l01719">ScatterNdDescriptor::m_Function</a>, <a class="el" href="_scatter_nd_8cpp_source.html#l00018">ScatterOperation()</a>, <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>, and <a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4aa06933067aafd48425d67bcb01bba5cb6">Update</a>.</p>
</div>
</div>
<a id="a2055c78ee5627c32252387746d552ade"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2055c78ee5627c32252387746d552ade">&#9670;&nbsp;</a></span>ScatterNd() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void ScatterNd </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>indicesInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>updatesInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>indices</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>updates</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_scatter_nd_descriptor.html">ScatterNdDescriptor</a>&#160;</td>
<td class="paramname"><em>descriptor</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_scatter_nd_8cpp_source.html#l00041">41</a> of file <a class="el" href="_scatter_nd_8cpp_source.html">ScatterNd.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;{</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="comment">// Axis Unsupported</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (descriptor.m_AxisEnabled)</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;ScatterNd: axis param not supported.&quot;</span>);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="comment">// Get the shape for indices, updates, and input</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; TensorShape indicesShape = indicesInfo.GetShape();</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; TensorShape updatesShape = updatesInfo.GetShape();</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; TensorShape inputShape = inputInfo.GetShape();</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="comment">// Get the dimensions for indices and updates</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimension = inputInfo.GetNumDimensions();</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indicesDim = indicesInfo.GetNumDimensions();</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> updatesDim = updatesInfo.GetNumDimensions();</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="comment">// Calculate the outter and inner dimensions</span></div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outterDim = indicesShape[indicesDim - 1];</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> innerDim = dimension - outterDim;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="comment">// Calculate the number of elements in each dimension</span></div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numElementsCount = 1;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; std::vector&lt;unsigned int&gt; elementInDim(dimension);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimIndex = dimension; dimIndex &gt; 0; --dimIndex)</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; {</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; elementInDim[dimIndex - 1] = numElementsCount;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; numElementsCount *= inputShape[dimIndex - 1];</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="comment">// Number of updates per index</span></div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numUpdatesPerIndex = elementInDim[dimension - innerDim - 1];</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; </div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="comment">// Number of indices to update</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numIndices = indicesShape[0];</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; </div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">// Check Input Requirements</span></div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="comment">// Requirement 1: Indices and Updates must have rank at least 1</span></div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span> (indicesDim &lt; 1 || updatesDim &lt; 1)</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;ScatterNd: indices and updates must have rank &gt;= 1.&quot;</span>);</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="comment">// Requirement 2: Input, Indices and Updates must have values</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">if</span> (inputInfo.GetNumElements() == 0 ||</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; indicesInfo.GetNumElements() == 0 ||</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; updatesInfo.GetNumElements() == 0)</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; {</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;ScatterNd: input, indices and updates tensor must have values.&quot;</span>);</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// Requirement 3: Indices and Updates must match in shape</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="comment">// The updates dimension should equals to 1 + inner dimension</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">if</span> (updatesDim != 1 + innerDim)</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; {</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;ScatterNd: updates dimension should equal to 1 + inner dimension.&quot;</span>);</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">// The inner dimension of updates has to match with shape of input</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimBackIndex = 0; dimBackIndex &lt; innerDim; ++dimBackIndex)</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; {</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">if</span> (updatesShape[updatesDim - dimBackIndex - 1] != inputShape[dimension - dimBackIndex - 1])</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; fmt::format(<span class="stringliteral">&quot;ScatterNd: input and updates shape not match on dimension {}&quot;</span>,</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; dimension - dimBackIndex));</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="comment">// Requirement 4: Check duplicate indices and out of bound indices</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; std::set&lt;int&gt; indicesSet;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; std::vector&lt;int&gt; flattenIndices(numIndices);</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indicesIdx = 0; indicesIdx &lt; numIndices; ++indicesIdx)</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="comment">// Get the index</span></div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordtype">int</span> flattenIndex = 0;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; </div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outterIdx = 0; outterIdx &lt; outterDim; ++outterIdx) {</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordtype">int</span> outterIndexValue = indices.Get();</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; </div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="comment">// Check bounds</span></div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">if</span> (outterIndexValue &lt; 0 || outterIndexValue &gt;= <span class="keywordtype">int</span>(inputShape[outterIdx]))</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; fmt::format(<span class="stringliteral">&quot;ScatterNd: indices {} out of bound [0, {})&quot;</span>,</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; outterIndexValue, inputShape[outterIdx]));</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; }</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; flattenIndex += int(elementInDim[outterIdx]) * outterIndexValue;</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; ++indices;</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; }</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; </div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="comment">// Check duplicates when executing ScatterNd::Update</span></div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">if</span> (descriptor.m_Function == ScatterNdFunction::Update &amp;&amp;</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; indicesSet.find(flattenIndex) != indicesSet.end())</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; {</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; fmt::format(<span class="stringliteral">&quot;ScatterNd: duplicate indices occurs {}&quot;</span>, flattenIndex));</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; </div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; flattenIndices[indicesIdx] = flattenIndex;</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; indicesSet.insert(flattenIndex);</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; </div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="comment">// Set the input data to output</span></div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx &lt; inputInfo.GetNumElements(); ++idx)</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordtype">float</span> inputValue = input.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; ++input;</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputValue);</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; ++output;</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; </div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="comment">// Iterate through all indices to scatter updates</span></div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indicesIdx = 0; indicesIdx &lt; numIndices; ++indicesIdx)</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; {</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="comment">// Get the index and calculate the flatten index</span></div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordtype">int</span> flattenIndex = flattenIndices[indicesIdx];</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; </div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="comment">// FlattenIndex is the place that we are going to update the elements</span></div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> updatesStartIdx = indicesIdx * numUpdatesPerIndex;</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> updatesIdx = 0; updatesIdx &lt; numUpdatesPerIndex; ++updatesIdx)</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; updates[updatesStartIdx + updatesIdx];</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; input[<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(flattenIndex) + updatesIdx];</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordtype">float</span> updateValue = <a class="code" href="namespacearmnn.html#a41d0463c55ff6a85d84bfd94e5d25805">ScatterOperation</a>(descriptor.m_Function, input.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>(), updates.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>());</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; output[<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(flattenIndex) + updatesIdx];</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(updateValue);</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00198">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_descriptors_8hpp_source.html#l01728">ScatterNdDescriptor::m_AxisEnabled</a>, <a class="el" href="_descriptors_8hpp_source.html#l01719">ScatterNdDescriptor::m_Function</a>, <a class="el" href="_scatter_nd_8cpp_source.html#l00018">ScatterOperation()</a>, <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>, and <a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4aa06933067aafd48425d67bcb01bba5cb6">Update</a>.</p>
</div>
</div>
<a id="a41d0463c55ff6a85d84bfd94e5d25805"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a41d0463c55ff6a85d84bfd94e5d25805">&#9670;&nbsp;</a></span>ScatterOperation()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">float armnn::ScatterOperation </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4a">ScatterNdFunction</a>&#160;</td>
<td class="paramname"><em>operation</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>update</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_scatter_nd_8cpp_source.html#l00018">18</a> of file <a class="el" href="_scatter_nd_8cpp_source.html">ScatterNd.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">switch</span> (operation)</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; {</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">case</span> ScatterNdFunction::Update:</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> update;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">case</span> ScatterNdFunction::Add:</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> input + update;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">case</span> ScatterNdFunction::Sub:</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> input - update;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">case</span> ScatterNdFunction::Max:</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">return</span> std::max(input, update);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">case</span> ScatterNdFunction::Min:</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">return</span> std::min(input, update);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">case</span> ScatterNdFunction::Mul:</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">return</span> input * update;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;ScatterNd: cannot execute this operation.&quot;</span>);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; }</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4aaec211f7c20af43e742bf2570c3cb84f9">Add</a>, <a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4aa6a061313d22e51e0f25b7cd4dc065233">Max</a>, <a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4aa78d811e98514cd165dda532286610fd2">Min</a>, <a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4aa62b6d55816cf737bfc6f42e60df1a3f2">Mul</a>, <a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4aae80155eceb940c89e2de63ad05868db2">Sub</a>, and <a class="el" href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4aa06933067aafd48425d67bcb01bba5cb6">Update</a>.</p>
<p class="reference">Referenced by <a class="el" href="_scatter_nd_8cpp_source.html#l00041">ScatterNd()</a>.</p>
</div>
</div>
<a id="acbf7c9a630f03ece800f807d946239ab"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acbf7c9a630f03ece800f807d946239ab">&#9670;&nbsp;</a></span>SelectTensorHandleStrategy()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structarmnn_1_1_optimization_result.html">OptimizationResult</a> SelectTensorHandleStrategy </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&#160;</td>
<td class="paramname"><em>optGraph</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;&#160;</td>
<td class="paramname"><em>backends</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.html">TensorHandleFactoryRegistry</a> &amp;&#160;</td>
<td class="paramname"><em>registry</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>importEnabled</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>exportEnabled</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt;&#160;</td>
<td class="paramname"><em>errMessages</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01821">1821</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160;{</div>
<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160; <a class="code" href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Optimizer_SelectTensorHandleStrategy&quot;</span>);</div>
<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160; OptimizationResult result;</div>
<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160; </div>
<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160; optGraph.ForEachLayer([&amp;backends, &amp;registry, &amp;result, &amp;errMessages, importEnabled, exportEnabled](Layer* layer)</div>
<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160; {</div>
<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160; <span class="comment">// Lets make sure the backend is in our list of supported backends. Something went wrong during backend</span></div>
<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160; <span class="comment">// assignment if this check fails</span></div>
<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160; <span class="keywordflow">if</span> (backends.find(layer-&gt;GetBackendId()) == backends.end())</div>
<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160; {</div>
<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160; throw armnn::Exception(<span class="stringliteral">&quot;Backend id not found for the layer&quot;</span>);</div>
<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160; }</div>
<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160; </div>
<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160; <span class="comment">// Check each output separately</span></div>
<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160; for (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slotIdx = 0; slotIdx &lt; layer-&gt;GetNumOutputSlots(); slotIdx++)</div>
<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160; {</div>
<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160; OutputSlot&amp; outputSlot = layer-&gt;GetOutputSlot(slotIdx);</div>
<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160; </div>
<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160; <a class="code" href="namespacearmnn.html#a947e07902b1b5d98b57eeae34053146b">ITensorHandleFactory::FactoryId</a> slotOption = ITensorHandleFactory::LegacyFactoryId;</div>
<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; </div>
<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; <span class="comment">// Calculate the factory to use which results in the fewest copies being made.</span></div>
<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160; <span class="keywordflow">switch</span>(layer-&gt;GetType())</div>
<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160; {</div>
<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160; case LayerType::Input:</div>
<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160; slotOption = CalculateSlotOptionForInput(backends, outputSlot, registry, importEnabled);</div>
<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160; break;</div>
<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160; case LayerType::Output:</div>
<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160; slotOption = CalculateSlotOptionForOutput(backends, outputSlot, registry);</div>
<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160; break;</div>
<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160; default:</div>
<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160; slotOption = CalculateSlotOption(backends, outputSlot, registry, exportEnabled);</div>
<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160; break;</div>
<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160; }</div>
<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160; outputSlot.SetTensorHandleFactory(slotOption);</div>
<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160; </div>
<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160; <span class="comment">// Now determine the &quot;best&quot; edge strategy for each connection given the slotOption.</span></div>
<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> connectionIdx = 0;</div>
<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160; for (<span class="keyword">auto</span>&amp;&amp; connection : outputSlot.GetConnections())</div>
<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160; {</div>
<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160; const Layer&amp; connectedLayer = connection-&gt;GetOwningLayer();</div>
<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160; </div>
<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160; EdgeStrategy strategy = CalculateEdgeStrategy(backends, slotOption, *layer, connectedLayer,</div>
<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160; registry, importEnabled);</div>
<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160; </div>
<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160; if (strategy == EdgeStrategy::Undefined)</div>
<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160; {</div>
<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160; result.m_Error = true;</div>
<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160; if (errMessages)</div>
<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160; {</div>
<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160; errMessages.value().emplace_back(<span class="stringliteral">&quot;Could not find valid strategy required for compatibility&quot;</span></div>
<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160; <span class="stringliteral">&quot; between backends.&quot;</span>);</div>
<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160; }</div>
<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160; return;</div>
<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160; }</div>
<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160; </div>
<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160; outputSlot.SetEdgeStrategy(connectionIdx, strategy);</div>
<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160; </div>
<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160; connectionIdx++;</div>
<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160; }</div>
<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160; }</div>
<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160; });</div>
<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160; </div>
<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_profiling_8hpp_source.html#l00220">ARMNN_SCOPED_PROFILING_EVENT</a>, <a class="el" href="_graph_8hpp_source.html#l00040">Graph::ForEachLayer()</a>, <a class="el" href="_layer_8hpp_source.html#l00290">Layer::GetBackendId()</a>, <a class="el" href="_layer_8hpp_source.html#l00145">OutputSlot::GetConnections()</a>, <a class="el" href="_layer_8hpp_source.html#l00335">Layer::GetNumOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.html#l00339">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00286">Layer::GetType()</a>, <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00050">ITensorHandleFactory::LegacyFactoryId</a>, <a class="el" href="_layer_8cpp_source.html#l00223">OutputSlot::SetEdgeStrategy()</a>, <a class="el" href="_layer_8cpp_source.html#l00213">OutputSlot::SetTensorHandleFactory()</a>, and <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01906">Optimize()</a>.</p>
</div>
</div>
<a id="a7f8325a4bc02f2f687ba1968b595ec0a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7f8325a4bc02f2f687ba1968b595ec0a">&#9670;&nbsp;</a></span>SetAllLoggingSinks()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void SetAllLoggingSinks </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>standardOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>debugOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>coloured</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_logging_8cpp_source.html#l00191">191</a> of file <a class="el" href="_logging_8cpp_source.html">Logging.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;{</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; SetLoggingSinks&lt;LogSeverity::Trace&gt;(standardOut, debugOut, coloured);</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; SetLoggingSinks&lt;LogSeverity::Debug&gt;(standardOut, debugOut, coloured);</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; SetLoggingSinks&lt;LogSeverity::Info&gt;(standardOut, debugOut, coloured);</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; SetLoggingSinks&lt;LogSeverity::Warning&gt;(standardOut, debugOut, coloured);</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; SetLoggingSinks&lt;LogSeverity::Error&gt;(standardOut, debugOut, coloured);</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; SetLoggingSinks&lt;LogSeverity::Fatal&gt;(standardOut, debugOut, coloured);</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_utils_8cpp_source.html#l00020">ConfigureLogging()</a>, and <a class="el" href="_unit_tests_8cpp_source.html#l00023">TEST_SUITE()</a>.</p>
</div>
</div>
<a id="ae7c459566269bf22b16513d61865272b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae7c459566269bf22b16513d61865272b">&#9670;&nbsp;</a></span>SetClSliceData()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">auto SetClSliceData </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
<td class="paramname"><em>m_begin</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
<td class="paramname"><em>m_size</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.html#l00100">100</a> of file <a class="el" href="_cl_workload_utils_8hpp_source.html">ClWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;{</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="comment">// This function must translate the size vector given to an end vector</span></div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="comment">// expected by the ACL NESlice workload</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_dims = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin.size());</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="comment">// For strided slices, we have the relationship size = (end - begin) / stride</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="comment">// For slice, we assume stride to be a vector of all ones, yielding the formula</span></div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="comment">// size = (end - begin) therefore we know end = size + begin</span></div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; num_dims; i++)</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; {</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> revertedIndex = num_dims - i - 1;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; starts.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin[revertedIndex]));</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; ends.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin[revertedIndex] + m_size[revertedIndex]));</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">return</span> std::make_tuple(starts, ends);</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_slice_workload_8cpp_source.html#l00033">ClSliceWorkload::ClSliceWorkload()</a>.</p>
</div>
</div>
<a id="a21850e0777395246bfd30d95f8ffdd31"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a21850e0777395246bfd30d95f8ffdd31">&#9670;&nbsp;</a></span>SetClStridedSliceData()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">auto SetClStridedSliceData </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>m_begin</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>m_end</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>m_stride</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.html#l00079">79</a> of file <a class="el" href="_cl_workload_utils_8hpp_source.html">ClWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;{</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> strides;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_dims = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin.size());</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; num_dims; i++) {</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> revertedIndex = num_dims - i - 1;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; starts.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin[revertedIndex]));</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; ends.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_end[revertedIndex]));</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; strides.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_stride[revertedIndex]));</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; </div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> std::make_tuple(starts, ends, strides);</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_strided_slice_workload_8cpp_source.html#l00055">ClStridedSliceWorkload::ClStridedSliceWorkload()</a>.</p>
</div>
</div>
<a id="ac9aad76a34137b6359a867b282ea7cfb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac9aad76a34137b6359a867b282ea7cfb">&#9670;&nbsp;</a></span>SetLogFilter()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void SetLogFilter </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a>&#160;</td>
<td class="paramname"><em>level</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_logging_8cpp_source.html#l00073">73</a> of file <a class="el" href="_logging_8cpp_source.html">Logging.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;{</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; SimpleLogger&lt;LogSeverity::Trace&gt;::Get().Enable(<span class="keyword">false</span>);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; SimpleLogger&lt;LogSeverity::Debug&gt;::Get().Enable(<span class="keyword">false</span>);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; SimpleLogger&lt;LogSeverity::Info&gt;::Get().Enable(<span class="keyword">false</span>);</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; SimpleLogger&lt;LogSeverity::Warning&gt;::Get().Enable(<span class="keyword">false</span>);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; SimpleLogger&lt;LogSeverity::Error&gt;::Get().Enable(<span class="keyword">false</span>);</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; SimpleLogger&lt;LogSeverity::Fatal&gt;::Get().Enable(<span class="keyword">false</span>);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">switch</span> (level)</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">case</span> LogSeverity::Trace:</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; SimpleLogger&lt;LogSeverity::Trace&gt;::Get().Enable(<span class="keyword">true</span>);</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="_utils_8hpp.html#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.html#a181ecb133401da6ff2916c192ca04d48">LogSeverity::Debug</a>:</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; SimpleLogger&lt;LogSeverity::Debug&gt;::Get().Enable(<span class="keyword">true</span>);</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="_utils_8hpp.html#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">case</span> LogSeverity::Info:</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; SimpleLogger&lt;LogSeverity::Info&gt;::Get().Enable(<span class="keyword">true</span>);</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="_utils_8hpp.html#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">case</span> LogSeverity::Warning:</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; SimpleLogger&lt;LogSeverity::Warning&gt;::Get().Enable(<span class="keyword">true</span>);</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="_utils_8hpp.html#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">case</span> LogSeverity::Error:</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; SimpleLogger&lt;LogSeverity::Error&gt;::Get().Enable(<span class="keyword">true</span>);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="_utils_8hpp.html#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">case</span> LogSeverity::Fatal:</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; SimpleLogger&lt;LogSeverity::Fatal&gt;::Get().Enable(<span class="keyword">true</span>);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Unknown LoggingSeverity level.&quot;</span>);</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_utils_8hpp_source.html#l00036">ARMNN_FALLTHROUGH</a>, <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3daa603905470e2a5b8c13e96b579ef0dba">Debug</a>, <a class="el" href="_logging_8hpp_source.html#l00168">SimpleLogger&lt; Level &gt;::Enable()</a>, <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">Error</a>, <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4">Fatal</a>, <a class="el" href="_logging_8cpp_source.html#l00025">SimpleLogger&lt; Level &gt;::Get()</a>, <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">Info</a>, <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">Trace</a>, and <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">Warning</a>.</p>
<p class="reference">Referenced by <a class="el" href="_utils_8cpp_source.html#l00020">ConfigureLogging()</a>, and <a class="el" href="_unit_tests_8cpp_source.html#l00023">TEST_SUITE()</a>.</p>
</div>
</div>
<a id="a5f523aee1752323aeaf899085649320b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5f523aee1752323aeaf899085649320b">&#9670;&nbsp;</a></span>SetLoggingSinks()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void armnn::SetLoggingSinks </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>standardOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>debugOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>coloured</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_logging_8cpp_source.html#l00167">167</a> of file <a class="el" href="_logging_8cpp_source.html">Logging.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;{</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; SimpleLogger&lt;Level&gt;::Get().RemoveAllSinks();</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; </div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">if</span> (standardOut)</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; {</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">if</span> (coloured)</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; SimpleLogger&lt;Level&gt;::Get().AddSink(</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; std::make_shared&lt;StandardOutputColourSink&gt;(Level));</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; } <span class="keywordflow">else</span></div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; SimpleLogger&lt;Level&gt;::Get().AddSink(</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; std::make_shared&lt;StandardOutputSink&gt;());</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; }</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; </div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">if</span> (debugOut)</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; SimpleLogger&lt;Level&gt;::Get().AddSink(</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; std::make_shared&lt;DebugOutputSink&gt;());</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; }</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_logging_8hpp_source.html#l00183">SimpleLogger&lt; Level &gt;::AddSink()</a>, <a class="el" href="_logging_8cpp_source.html#l00025">SimpleLogger&lt; Level &gt;::Get()</a>, and <a class="el" href="_logging_8hpp_source.html#l00178">SimpleLogger&lt; Level &gt;::RemoveAllSinks()</a>.</p>
</div>
</div>
<a id="ab40e30cea5a328a3c35aa32f9b7db1c1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab40e30cea5a328a3c35aa32f9b7db1c1">&#9670;&nbsp;</a></span>SetNeonSliceData()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">auto armnn::SetNeonSliceData </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
<td class="paramname"><em>m_begin</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
<td class="paramname"><em>m_size</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_workload_utils_8hpp_source.html#l00160">160</a> of file <a class="el" href="_neon_workload_utils_8hpp_source.html">NeonWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;{</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="comment">// This function must translate the size vector given to an end vector</span></div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="comment">// expected by the ACL NESlice workload</span></div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; </div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_dims = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin.size());</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; </div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="comment">// For strided slices, we have the relationship size = (end - begin) / stride</span></div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="comment">// For slice, we assume stride to be a vector of all ones, yielding the formula</span></div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="comment">// size = (end - begin) therefore we know end = size + begin</span></div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; num_dims; i++)</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> revertedIndex = num_dims - i - 1;</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; </div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; starts.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin[revertedIndex]));</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; ends.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin[revertedIndex] + m_size[revertedIndex]));</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; </div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">return</span> std::make_tuple(starts, ends);</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_slice_workload_8cpp_source.html#l00036">NeonSliceWorkload::NeonSliceWorkload()</a>.</p>
</div>
</div>
<a id="a01d1e745f360ccd0b655214645bcef32"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a01d1e745f360ccd0b655214645bcef32">&#9670;&nbsp;</a></span>SetNeonStridedSliceData()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">auto armnn::SetNeonStridedSliceData </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>m_begin</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>m_end</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>m_stride</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_workload_utils_8hpp_source.html#l00138">138</a> of file <a class="el" href="_neon_workload_utils_8hpp_source.html">NeonWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;{</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> strides;</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; </div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_dims = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin.size());</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; num_dims; i++)</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> revertedIndex = num_dims - i - 1;</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; </div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; starts.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin[revertedIndex]));</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; ends.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_end[revertedIndex]));</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; strides.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_stride[revertedIndex]));</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; }</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; </div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">return</span> std::make_tuple(starts, ends, strides);</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_strided_slice_workload_8cpp_source.html#l00051">NeonStridedSliceWorkload::NeonStridedSliceWorkload()</a>.</p>
</div>
</div>
<a id="a8c88a8a91827e9ccc3cf3ce6b14fcd17"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8c88a8a91827e9ccc3cf3ce6b14fcd17">&#9670;&nbsp;</a></span>SetValueChecked()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::SetValueChecked </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; T &amp; &gt;&#160;</td>
<td class="paramname"><em>optionalRef</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">V &amp;&amp;&#160;</td>
<td class="paramname"><em>val</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.html#l00017">17</a> of file <a class="el" href="_layer_support_common_8hpp_source.html">LayerSupportCommon.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keywordflow">if</span> (optionalRef)</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; {</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; optionalRef.value() = val;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; }</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_optional_8hpp_source.html#l00146">OptionalReferenceSwitch&lt; std::is_reference&lt; T &gt;::value, T &gt;::value()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_layer_support_common_8hpp_source.html#l00070">FalseFuncF16()</a>, <a class="el" href="_layer_support_common_8hpp_source.html#l00078">FalseFuncF32()</a>, <a class="el" href="_layer_support_common_8hpp_source.html#l00094">FalseFuncI32()</a>, <a class="el" href="_layer_support_common_8hpp_source.html#l00086">FalseFuncU8()</a>, <a class="el" href="_layer_support_common_8hpp_source.html#l00110">FalseInputFuncF16()</a>, <a class="el" href="_layer_support_common_8hpp_source.html#l00102">FalseInputFuncF32()</a>, <a class="el" href="_layer_support_common_8hpp_source.html#l00126">FalseOutputFuncF16()</a>, <a class="el" href="_layer_support_common_8hpp_source.html#l00118">FalseOutputFuncF32()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l00908">NeonLayerSupport::IsConcatSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.html#l00827">ClLayerSupport::IsConcatSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.html#l01594">NeonLayerSupport::IsSplitterSupported()</a>, and <a class="el" href="_cl_layer_support_8cpp_source.html#l01509">ClLayerSupport::IsSplitterSupported()</a>.</p>
</div>
</div>
<a id="a044ea0cc993d4d1fbe4ec877b17b8d39"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a044ea0cc993d4d1fbe4ec877b17b8d39">&#9670;&nbsp;</a></span>Slice()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Slice </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_slice_descriptor.html">SliceDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>outputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>dataTypeSize</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_slice_8cpp_source.html#l00014">14</a> of file <a class="el" href="_slice_8cpp_source.html">Slice.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> TensorShape&amp; inputShape = inputInfo.GetShape();</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDims = inputShape.GetNumDimensions();</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; constexpr <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxNumDims = 4;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">if</span> (descriptor.m_Begin.size() != numDims)</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; {</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; std::stringstream msg;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; msg &lt;&lt; <span class="stringliteral">&quot;Slice: Number of dimensions (&quot;</span> &lt;&lt; numDims &lt;&lt;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="stringliteral">&quot;) does not match the Begin vector in the descriptor (&quot;</span> &lt;&lt; descriptor.m_Begin.size() &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(msg.str());</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; }</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">if</span> (descriptor.m_Size.size() != numDims)</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; {</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; std::stringstream msg;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; msg &lt;&lt; <span class="stringliteral">&quot;Slice: Number of dimensions (&quot;</span> &lt;&lt; numDims &lt;&lt;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="stringliteral">&quot;) does not match the Size vector in the descriptor (&quot;</span> &lt;&lt; descriptor.m_Size.size() &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(msg.str());</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; }</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">if</span> (numDims &gt; maxNumDims)</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; std::stringstream msg;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; msg &lt;&lt; <span class="stringliteral">&quot;Slice: Number of dimensions (&quot;</span> &lt;&lt; numDims &lt;&lt;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="stringliteral">&quot;) is greater than the maximum supported (&quot;</span> &lt;&lt; maxNumDims &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(msg.str());</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; std::vector&lt;unsigned int&gt; paddedInput(4);</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; std::vector&lt;unsigned int&gt; paddedBegin(4);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; std::vector&lt;unsigned int&gt; paddedSize (4);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numPaddingDims = maxNumDims - numDims;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i &lt; maxNumDims; ++i)</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">if</span> (i &lt; numPaddingDims)</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; {</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; paddedInput[i] = 1u;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; paddedBegin[i] = 0u;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; paddedSize[i] = 1u;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = i - numPaddingDims;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; paddedInput[i] = inputShape[j];</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; paddedBegin[i] = descriptor.m_Begin[j];</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; paddedSize[i] = descriptor.m_Size[j];</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim0 = paddedInput[0];</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim1 = paddedInput[1];</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim2 = paddedInput[2];</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim3 = paddedInput[3];</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> begin0 = paddedBegin[0];</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> begin1 = paddedBegin[1];</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> begin2 = paddedBegin[2];</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> begin3 = paddedBegin[3];</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size0 = paddedSize[0];</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size1 = paddedSize[1];</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size2 = paddedSize[2];</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size3 = paddedSize[3];</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">if</span> (begin0 + size0 &gt; dim0)</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; {</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; std::stringstream msg;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; msg &lt;&lt; <span class="stringliteral">&quot;Slice: begin0 + size0 (&quot;</span> &lt;&lt; (begin0 + size0) &lt;&lt;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="stringliteral">&quot;) exceeds dim0 (&quot;</span> &lt;&lt; dim0 &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(msg.str());</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">if</span> (begin1 + size1 &gt; dim1)</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; {</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; std::stringstream msg;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; msg &lt;&lt; <span class="stringliteral">&quot;Slice: begin1 + size1 (&quot;</span> &lt;&lt; (begin1 + size1) &lt;&lt;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="stringliteral">&quot;) exceeds dim2 (&quot;</span> &lt;&lt; dim1 &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(msg.str());</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">if</span> (begin2 + size2 &gt; dim2)</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; std::stringstream msg;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; msg &lt;&lt; <span class="stringliteral">&quot;Slice: begin2 + size2 (&quot;</span> &lt;&lt; (begin2 + size2) &lt;&lt;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="stringliteral">&quot;) exceeds dim2 (&quot;</span> &lt;&lt; dim2 &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(msg.str());</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span> (begin3 + size3 &gt; dim3)</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; std::stringstream msg;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; msg &lt;&lt; <span class="stringliteral">&quot;Slice: begin3 + size3 (&quot;</span> &lt;&lt; (begin3 + size3) &lt;&lt;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="stringliteral">&quot;) exceeds dim3 (&quot;</span> &lt;&lt; dim3 &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(msg.str());</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; </div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">if</span> (inputData == <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; {</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_null_pointer_exception.html">armnn::NullPointerException</a>(<span class="stringliteral">&quot;Slice: Null inputData pointer&quot;</span>);</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (outputData == <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_null_pointer_exception.html">armnn::NullPointerException</a>(<span class="stringliteral">&quot;Slice: Null outputData pointer&quot;</span>);</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* input = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(inputData);</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* output = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(outputData);</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx0 = begin0; idx0 &lt; begin0 + size0; ++idx0)</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; {</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx1 = begin1; idx1 &lt; begin1 + size1; ++idx1)</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; {</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx2 = begin2; idx2 &lt; begin2 + size2; ++idx2)</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; {</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx3 = begin3; idx3 &lt; begin3 + size3; ++idx3)</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputOffset =</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; (((idx0 * dim1 + idx1) * dim2 + idx2) * dim3 + idx3) * dataTypeSize;</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; ::memcpy(output, input + inputOffset, dataTypeSize);</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; output += dataTypeSize;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; }</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8cpp_source.html#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_descriptors_8hpp_source.html#l01244">SliceDescriptor::m_Begin</a>, and <a class="el" href="_descriptors_8hpp_source.html#l01247">SliceDescriptor::m_Size</a>.</p>
</div>
</div>
<a id="aa999ff2585ad75b95954a9323f63c32b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa999ff2585ad75b95954a9323f63c32b">&#9670;&nbsp;</a></span>Softmax()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Softmax </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>out</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputTensorInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>beta</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>axis</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Computes the softmax function on some inputs, into outputs, with a shape given by tensorInfo. </p>
<p class="definition">Definition at line <a class="el" href="_softmax_8cpp_source.html#l00017">17</a> of file <a class="el" href="_softmax_8cpp_source.html">Softmax.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(axis &lt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(inputTensorInfo.GetNumDimensions()),</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="stringliteral">&quot;Required axis index greater than number of dimensions.&quot;</span>);</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(axis &gt;= -<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(inputTensorInfo.GetNumDimensions()),</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="stringliteral">&quot;Required axis index lower than negative of the number of dimensions&quot;</span>);</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> uAxis = axis &lt; 0 ?</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; inputTensorInfo.GetNumDimensions() - <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(abs(axis))</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; : <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(axis);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> TensorShape&amp; inputShape = inputTensorInfo.GetShape();</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outerSize = <a class="code" href="namespacearmnn_utils.html#af57864f5e03358d14c2988edae912b8b">armnnUtils::GetNumElementsBetween</a>(inputShape, 0, uAxis);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axisSize = inputShape[uAxis];</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> innerSize = <a class="code" href="namespacearmnn_utils.html#af57864f5e03358d14c2988edae912b8b">armnnUtils::GetNumElementsBetween</a>(inputShape,</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; uAxis + 1,</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; inputShape.GetNumDimensions());</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outer = 0; outer &lt; outerSize; ++outer)</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; {</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputBeginIdx = outer * axisSize * innerSize;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputEndIdx = inputBeginIdx + axisSize * innerSize;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputBeginIdx = outer * axisSize * innerSize;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inner = 0; inner &lt; innerSize; ++inner, ++inputBeginIdx, ++inputEndIdx, ++outputBeginIdx)</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// Find max</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">float</span> maxValue = std::numeric_limits&lt;float&gt;::lowest();</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iter = inputBeginIdx; iter &lt; inputEndIdx; iter += innerSize)</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; in[iter];</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; maxValue = std::max(maxValue, in.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>());</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; </div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="comment">// Compute sum</span></div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordtype">float</span> sum = 0.0f;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iter = inputBeginIdx; iter &lt; inputEndIdx; iter += innerSize)</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; {</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; in[iter];</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; sum += std::exp((in.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>() - maxValue) * beta);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="comment">// Compute result</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputIter = outputBeginIdx;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; out[outputIter];</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iter = inputBeginIdx; iter &lt; inputEndIdx; iter += innerSize, outputIter += innerSize)</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; out[outputIter];</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; in[iter];</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; out.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(std::exp((in.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>() - maxValue) * beta) / sum);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>, <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8cpp_source.html#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_utils_8cpp_source.html#l00209">armnnUtils::GetNumElementsBetween()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="a4a180e425d4c19b2cdea4ce5760180e1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4a180e425d4c19b2cdea4ce5760180e1">&#9670;&nbsp;</a></span>SpaceToBatchNd()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void SpaceToBatchNd </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.html">SpaceToBatchNdDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>params</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>outputData</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_space_to_batch_nd_8cpp_source.html#l00048">48</a> of file <a class="el" href="_space_to_batch_nd_8cpp_source.html">SpaceToBatchNd.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;{</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rank = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">if</span> (rank != 3 &amp;&amp; rank != 4 )</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; {</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(<span class="stringliteral">&quot;Tensor rank must be either 3 or 4, but it is &quot;</span> + std::to_string(rank),</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="_exceptions_8hpp.html#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>());</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html">DataLayoutIndexed</a> dataLayout = params.<a class="code" href="structarmnn_1_1_space_to_batch_nd_descriptor.html#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelDimension3D = params.<a class="code" href="structarmnn_1_1_space_to_batch_nd_descriptor.html#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> == DataLayout::NCHW ? 1 : 2;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; </div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>&amp; inputShape = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>&amp; outputShape = outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputBatchSize = inputShape[0];</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputBatchSize = outputShape[0];</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels = (rank == 3) ? inputShape[channelDimension3D]</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; : inputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()];</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keyword">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.html#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()];</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = (rank == 3) ? 1 : inputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()];</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = outputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()];</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = (rank == 3) ? 1 : outputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()];</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="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.html#a02e143524aefddd40b485fcf7dea6696">m_BlockShape</a>[0];</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockWidth = (rank == 3) ? 1 : params.<a class="code" href="structarmnn_1_1_space_to_batch_nd_descriptor.html#a02e143524aefddd40b485fcf7dea6696">m_BlockShape</a>[1];</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; </div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddingTop = params.<a class="code" href="structarmnn_1_1_space_to_batch_nd_descriptor.html#a85f98c94e11f65a6b73f831735c040f3">m_PadList</a>[0].first;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddingLeft = (rank == 3) ? 0 : params.<a class="code" href="structarmnn_1_1_space_to_batch_nd_descriptor.html#a85f98c94e11f65a6b73f831735c040f3">m_PadList</a>[1].first;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; </div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outB = 0; outB &lt; outputBatchSize; ++outB)</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inB = outB % inputBatchSize;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; </div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> shiftW = (outB / inputBatchSize) % blockWidth;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> shiftH = (outB / inputBatchSize) / blockWidth;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outH = 0; outH &lt; outputHeight; ++outH)</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outW = 0; outW &lt; outputWidth; ++outW)</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; {</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">if</span> (outH * blockHeight + shiftH &lt; paddingTop ||</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; outH * blockHeight + shiftH &gt;= paddingTop + inputHeight ||</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; outW * blockWidth + shiftW &lt; paddingLeft ||</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; outW * blockWidth + shiftW &gt;= paddingLeft + inputWidth)</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; {</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; channels; c++)</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; {</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outOffset = <a class="code" href="namespacearmnn.html#adafb0fd0a3f6435c2bdf41f971761ecf">GetOffset</a>(outputShape,</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; outB,</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; outH,</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; outW,</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; c,</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; dataLayout);</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; outputData += outOffset;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; outputData.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(0);</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; outputData -= outOffset;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; {</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; channels; c++)</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; {</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inOffset = <a class="code" href="namespacearmnn.html#adafb0fd0a3f6435c2bdf41f971761ecf">GetOffset</a>(inputShape,</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; inB,</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; (outH * blockHeight + shiftH) - paddingTop,</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; (outW * blockWidth + shiftW) - paddingLeft,</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; c,</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; dataLayout);</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outOffset = <a class="code" href="namespacearmnn.html#adafb0fd0a3f6435c2bdf41f971761ecf">GetOffset</a>(outputShape,</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; outB,</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; outH,</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; outW,</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; c,</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; dataLayout);</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; </div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; outputData += outOffset;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; inputData += inOffset;</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; outputData.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputData.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>());</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; inputData -= inOffset;</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; outputData -= outOffset;</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; }</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00203">CHECK_LOCATION</a>, <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_space_to_batch_nd_8cpp_source.html#l00015">GetOffset()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.html#l01066">SpaceToBatchNdDescriptor::m_BlockShape</a>, <a class="el" href="_descriptors_8hpp_source.html#l01071">SpaceToBatchNdDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.html#l01069">SpaceToBatchNdDescriptor::m_PadList</a>, <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>, and <a class="el" href="_space_to_batch_nd_8cpp_source.html#l00048">SpaceToBatchNd()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_space_to_batch_nd_8cpp_source.html#l00048">SpaceToBatchNd()</a>, and <a class="el" href="_space_to_batch_nd_layer_8cpp_source.html#l00019">SpaceToBatchNdLayer::SpaceToBatchNdLayer()</a>.</p>
</div>
</div>
<a id="a5e1dc69443b64ad16b669388a6023f7a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5e1dc69443b64ad16b669388a6023f7a">&#9670;&nbsp;</a></span>SpaceToDepth()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void SpaceToDepth </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.html">SpaceToDepthDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>params</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>outputData</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_space_to_depth_8cpp_source.html#l00036">36</a> of file <a class="el" href="_space_to_depth_8cpp_source.html">SpaceToDepth.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;{</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html">DataLayoutIndexed</a> dataLayout = params.<a class="code" href="structarmnn_1_1_space_to_depth_descriptor.html#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>&amp; inputShape = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.html">TensorShape</a>&amp; outputShape = outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputBatchSize = inputShape[0];</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels = inputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()];</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = outputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()];</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = outputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()];</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannels = outputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()];</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockSize = params.<a class="code" href="structarmnn_1_1_space_to_depth_descriptor.html#a6c6b8957f1e176867e5fb05b1a1a1486">m_BlockSize</a>;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">if</span> (blockSize == 0)</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; {</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a>(</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="stringliteral">&quot;Input shape must be divisible by block size in all spatial dimensions: Block size is&quot;</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="stringliteral">&quot; equal to zero&quot;</span>);</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; }</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outChannelIndex = 0; outChannelIndex &lt; outputChannels; outChannelIndex++)</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inChannelIndex = outChannelIndex % inputChannels;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> shiftW = (outChannelIndex / inputChannels) % blockSize;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> shiftH = (outChannelIndex / inputChannels) / blockSize;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outH = 0; outH &lt; outputHeight; outH++)</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outW = 0; outW &lt; outputWidth; outW++)</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inBatchIndex = 0; inBatchIndex &lt; inputBatchSize; inBatchIndex++)</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inOffset = <a class="code" href="namespacearmnn.html#adafb0fd0a3f6435c2bdf41f971761ecf">GetOffset</a>(inputShape,</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; inChannelIndex,</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; (outH * blockSize + shiftH),</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; (outW * blockSize + shiftW),</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; inBatchIndex,</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; dataLayout);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outOffset = <a class="code" href="namespacearmnn.html#adafb0fd0a3f6435c2bdf41f971761ecf">GetOffset</a>(outputShape,</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; outChannelIndex,</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; outH,</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; outW,</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; inBatchIndex,</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; dataLayout);</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; </div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; outputData += outOffset;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; inputData += inOffset;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; outputData.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputData.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>());</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; inputData -= inOffset;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; outputData -= outOffset;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_space_to_batch_nd_8cpp_source.html#l00015">GetOffset()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.html#l01092">SpaceToDepthDescriptor::m_BlockSize</a>, <a class="el" href="_descriptors_8hpp_source.html#l01095">SpaceToDepthDescriptor::m_DataLayout</a>, <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>, and <a class="el" href="_space_to_depth_8cpp_source.html#l00036">SpaceToDepth()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_space_to_depth_8cpp_source.html#l00036">SpaceToDepth()</a>, and <a class="el" href="_space_to_depth_layer_8cpp_source.html#l00023">SpaceToDepthLayer::SpaceToDepthLayer()</a>.</p>
</div>
</div>
<a id="a3e6cbdbfb81dbcea27d219a6553838dc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3e6cbdbfb81dbcea27d219a6553838dc">&#9670;&nbsp;</a></span>Split()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Split </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_splitter_queue_descriptor.html">SplitterQueueDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> * &gt;&#160;</td>
<td class="paramname"><em>inputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> * &gt;&#160;</td>
<td class="paramname"><em>outputs</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_splitter_8cpp_source.html#l00020">20</a> of file <a class="el" href="_splitter_8cpp_source.html">Splitter.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> TensorInfo&amp; inputInfo = <a class="code" href="namespacearmnn_utils.html#acee63cd08da47910fc166a1990988fa8">GetTensorInfo</a>(inputs[0]);</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; std::unique_ptr&lt;Decoder&lt;float&gt;&gt; decoderPtr =</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; MakeDecoder&lt;float&gt;(inputInfo, inputs[0]-&gt;<a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>());</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; Decoder&lt;float&gt;&amp; decoder = *decoderPtr;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = 0; index &lt; inputInfo.GetNumElements(); ++index)</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indices[<a class="code" href="namespacearmnn.html#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>] = { 0 };</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexRemainder = index;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimensionStride = inputInfo.GetNumElements();</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i&lt;inputInfo.GetNumDimensions(); i++)</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; dimensionStride /= inputInfo.GetShape()[i];</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; indices[i] = indexRemainder / dimensionStride; <span class="comment">// Use integer division to round down.</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; indexRemainder -= indices[i] * dimensionStride;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> viewIdx = 0; viewIdx &lt; data.m_ViewOrigins.size(); ++viewIdx)</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; SplitterQueueDescriptor::ViewOrigin <span class="keyword">const</span>&amp; view = data.m_ViewOrigins[viewIdx];</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">//Split view extents are defined by the size of (the corresponding) input tensor.</span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> TensorInfo&amp; outputInfo = <a class="code" href="namespacearmnn_utils.html#acee63cd08da47910fc166a1990988fa8">GetTensorInfo</a>(outputs[viewIdx]);</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; outputInfo.GetNumDimensions() == inputInfo.GetNumDimensions(),</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="stringliteral">&quot;The number of output dimensions does not match the number of input dimensions.&quot;</span>);</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="comment">// Check all dimensions to see if this element is inside the given input view.</span></div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordtype">bool</span> insideView = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i&lt;outputInfo.GetNumDimensions(); i++)</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; {</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">if</span> (indices[i] &lt; view.m_Origin[i])</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; {</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; insideView = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; }</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span> (indices[i] &gt;= view.m_Origin[i] + outputInfo.GetShape()[i])</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; insideView = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">if</span> (insideView)</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; std::unique_ptr&lt;Encoder&lt;float&gt;&gt; encoderPtr =</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; MakeEncoder&lt;float&gt;(outputInfo, outputs[viewIdx]-&gt;<a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>());</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; Encoder&lt;float&gt;&amp; encoder = *encoderPtr;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outIndex = 0;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimensionStride = 1;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordtype">float</span> inputValue = 0.f;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = outputInfo.GetNumDimensions(); i-- &gt; 0;)</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; outIndex += dimensionStride * (indices[i] - view.m_Origin[i]);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; dimensionStride *= outputInfo.GetShape()[i];</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; </div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; decoder += index;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; inputValue = decoder.Get();</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; decoder -= index;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; </div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; encoder += outIndex;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; encoder.Set(inputValue);</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; }</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>, <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00198">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_ref_workload_utils_8hpp_source.html#l00033">GetTensorInfo()</a>, <a class="el" href="_workload_data_8hpp_source.html#l00119">SplitterQueueDescriptor::ViewOrigin::m_Origin</a>, <a class="el" href="_workload_data_8hpp_source.html#l00124">SplitterQueueDescriptor::m_ViewOrigins</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>, <a class="el" href="_types_8hpp_source.html#l00031">MaxNumOfTensorDimensions</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="a0fdab6fc39d90c5beea97f4ca0a584c4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0fdab6fc39d90c5beea97f4ca0a584c4">&#9670;&nbsp;</a></span>Splitter()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::Splitter </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_splitter_queue_descriptor.html">SplitterQueueDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> * &gt;&#160;</td>
<td class="paramname"><em>inputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.html">ITensorHandle</a> * &gt;&#160;</td>
<td class="paramname"><em>outputs</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_splitter_8hpp_source.html#l00017">17</a> of file <a class="el" href="_splitter_8hpp_source.html">Splitter.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> TensorInfo&amp; inputInfo0 = <a class="code" href="namespacearmnn_utils.html#acee63cd08da47910fc166a1990988fa8">GetTensorInfo</a>(inputs[0]);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = 0; index &lt; inputInfo0.GetNumElements(); ++index)</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indices[<a class="code" href="namespacearmnn.html#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>] = { 0 };</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexRemainder = index;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimensionStride = inputInfo0.GetNumElements();</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i&lt;inputInfo0.GetNumDimensions(); i++)</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; dimensionStride /= inputInfo0.GetShape()[i];</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; indices[i] = indexRemainder / dimensionStride; <span class="comment">// Use integer division to round down.</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; indexRemainder -= indices[i] * dimensionStride;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; }</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> viewIdx = 0; viewIdx &lt; data.m_ViewOrigins.size(); ++viewIdx)</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; SplitterQueueDescriptor::ViewOrigin <span class="keyword">const</span>&amp; view = data.m_ViewOrigins[viewIdx];</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">//Split view extents are defined by the size of (the corresponding) input tensor.</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">const</span> TensorInfo&amp; outputInfo = <a class="code" href="namespacearmnn_utils.html#acee63cd08da47910fc166a1990988fa8">GetTensorInfo</a>(outputs[viewIdx]);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; outputInfo.GetNumDimensions() == inputInfo0.GetNumDimensions(),</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="stringliteral">&quot;The number of output dimensions does not match the number of input dimensions.&quot;</span>);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="comment">// Check all dimensions to see if this element is inside the given input view.</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">bool</span> insideView = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i&lt;outputInfo.GetNumDimensions(); i++)</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (indices[i] &lt; view.m_Origin[i])</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; insideView = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">if</span> (indices[i] &gt;= view.m_Origin[i] + outputInfo.GetShape()[i])</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; {</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; insideView = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">if</span> (insideView)</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outIndex = 0;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimensionStride = 1;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = outputInfo.GetNumDimensions(); i-- &gt; 0;)</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; outIndex += dimensionStride * (indices[i] - view.m_Origin[i]);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; dimensionStride *= outputInfo.GetShape()[i];</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">//We are within the view, to copy input data to the output corresponding to this view.</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>* outputData = GetOutputTensorData&lt;DataType&gt;(viewIdx, data);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>* inputData = GetInputTensorData&lt;DataType&gt;(0, data);</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; outputData[outIndex] = inputData[index];</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; }</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>, <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00198">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_ref_workload_utils_8hpp_source.html#l00033">GetTensorInfo()</a>, <a class="el" href="_workload_data_8hpp_source.html#l00119">SplitterQueueDescriptor::ViewOrigin::m_Origin</a>, <a class="el" href="_workload_data_8hpp_source.html#l00124">SplitterQueueDescriptor::m_ViewOrigins</a>, and <a class="el" href="_types_8hpp_source.html#l00031">MaxNumOfTensorDimensions</a>.</p>
</div>
</div>
<a id="ac245fda400649db10eed0dc96c1b5c37"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac245fda400649db10eed0dc96c1b5c37">&#9670;&nbsp;</a></span>Stack()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Stack </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_stack_queue_descriptor.html">StackQueueDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt;&gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>inputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>outputInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_stack_8cpp_source.html#l00012">12</a> of file <a class="el" href="_stack_8cpp_source.html">Stack.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputNumDims = outputInfo.GetNumDimensions();</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputNumDims = inputInfo.GetNumDimensions();</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.html">armnn::TensorShape</a>&amp; outputDims = outputInfo.GetShape();</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.html">armnn::TensorShape</a>&amp; inputDims = inputInfo.GetShape();</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axis = data.m_Parameters.m_Axis;</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="comment">// Can perform a simple concatenation when axis == 0</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">if</span> (!axis)</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; {</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputs = data.m_Parameters.m_NumInputs;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputLength = inputInfo.<a class="code" href="classarmnn_1_1_tensor_shape.html#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>();</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputIdx=0; inputIdx&lt;numInputs; ++inputIdx)</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; {</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> elmt=0; elmt&lt;inputLength; ++elmt)</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; {</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; (*inputs[inputIdx])[elmt];</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; output[(inputIdx * inputLength) + elmt];</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputs[inputIdx]-&gt;Get());</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iNumTensors = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(data.m_Inputs.size());</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iBatchSize = inputDims[0];</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannels = (inputNumDims &gt; 1) ? inputDims[1] : 1;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHeight = (inputNumDims &gt; 2) ? inputDims[2] : 1;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iWidth = (inputNumDims &gt; 3) ? inputDims[3] : 1;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oBatchSize = outputDims[1];</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannels = (outputNumDims &gt; 2) ? outputDims[2] : 1;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oHeight = (outputNumDims &gt; 3) ? outputDims[3] : 1;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oWidth = (outputNumDims &gt; 4) ? outputDims[4] : 1;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="comment">// Array to store the input coordinates</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="comment">// iCoordinates[0] = i, iCoordinates[1] = bi, iCoordinates[2] = ci</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="comment">// iCoordinates[3] = hi, iCoordinates[4] = wi, iCoordinates[5] = 0</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">// iCoordinates[5] will be always zero and used for not incrementing</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="comment">// the output when the input has less than 4 dimensions</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; std::array&lt;unsigned int, 6&gt; iCoordinates{ 0 };</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; </div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="comment">// Array of pointers used to map the output coordinates to the input ones, in accordance with the axis</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="comment">// This array is initialized with &amp;iCoordinates[5] since this will be always zero</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; std::array&lt;unsigned int *, 5&gt; oCoordinates = { &amp;iCoordinates[5],</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; &amp;iCoordinates[5],</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; &amp;iCoordinates[5],</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; &amp;iCoordinates[5],</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; &amp;iCoordinates[5] };</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="comment">// Set the axis coordinate</span></div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; oCoordinates[axis] = &amp;iCoordinates[0];</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">// Map the output coordinates, accounting for the axis</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim_shift = 0;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim = 0; dim &lt; inputNumDims; ++dim)</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">if</span>(dim == axis)</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; dim_shift++;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; oCoordinates[dim + dim_shift] = &amp;iCoordinates[dim + 1];</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; </div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="comment">// Alias for the input coordinates</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;i = iCoordinates[0];</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;bi = iCoordinates[1];</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;ci = iCoordinates[2];</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;hi = iCoordinates[3];</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;wi = iCoordinates[4];</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">// Alias for the output coordinates</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;o = *(oCoordinates[0]);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;bo = *(oCoordinates[1]);</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;co = *(oCoordinates[2]);</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;ho = *(oCoordinates[3]);</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;wo = *(oCoordinates[4]);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="comment">// Stack tensors</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">for</span>(; i &lt; iNumTensors; ++(i))</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">for</span>(bi = 0; bi &lt; iBatchSize; ++(bi))</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; {</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">for</span>(ci = 0; ci &lt; iChannels; ++(ci))</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">for</span>(hi = 0; hi &lt; iHeight; ++(hi))</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; {</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">for</span>(wi = 0; wi &lt; iWidth; ++(wi))</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; {</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; output[o * oWidth * oHeight * oChannels * oBatchSize +</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; bo * oWidth * oHeight * oChannels +</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; co * oWidth * oHeight +</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; ho * oWidth +</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; wo];</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; </div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputs[i]-&gt;Get());</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; ++(*(inputs[i]));</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; }</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00198">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_descriptors_8hpp_source.html#l01273">StackDescriptor::m_Axis</a>, <a class="el" href="_workload_data_8hpp_source.html#l00026">QueueDescriptor::m_Inputs</a>, <a class="el" href="_descriptors_8hpp_source.html#l01275">StackDescriptor::m_NumInputs</a>, <a class="el" href="_workload_data_8hpp_source.html#l00066">QueueDescriptorWithParameters&lt; LayerDescriptor &gt;::m_Parameters</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="a637fea04314a9870c1dc4355c1bed429"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a637fea04314a9870c1dc4355c1bed429">&#9670;&nbsp;</a></span>StrEqual()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr bool armnn::StrEqual </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>strA</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char(&amp;)&#160;</td>
<td class="paramname"><em>strB</em>[N]&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</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.html#l00201">201</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;{</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordtype">bool</span> isEqual = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; isEqual &amp;&amp; (i &lt; N); ++i)</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; {</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; isEqual = (strA[i] == strB[i]);</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">return</span> isEqual;</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_types_utils_8hpp_source.html#l00213">ParseComputeDevice()</a>.</p>
</div>
</div>
<a id="a86d7a7168ac00b75b4971f9aad623698"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a86d7a7168ac00b75b4971f9aad623698">&#9670;&nbsp;</a></span>StridedSlice()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void StridedSlice </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.html">StridedSliceDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>params</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>inputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>outputData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>dataTypeSize</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_strided_slice_8cpp_source.html#l00086">86</a> of file <a class="el" href="_strided_slice_8cpp_source.html">StridedSlice.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;{</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">if</span> (inputData == <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Slice: Null inputData pointer&quot;</span>);</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">if</span> (outputData == <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; {</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.html">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Slice: Null outputData pointer&quot;</span>);</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* input = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(inputData);</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* output = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(outputData);</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keyword">const</span> TensorShape inputShape = ExtendShape(inputInfo.GetShape(), 4);</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; </div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; StridedSliceDescriptor paddedParams = params;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="comment">// Pad parameters to 4 dimensions</span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; PadParams(paddedParams, 4);</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; </div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> start0 = paddedParams.GetStartForAxis(inputShape, 0);</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> stop0 = paddedParams.GetStopForAxis (inputShape, 0, start0);</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; </div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> start1 = paddedParams.GetStartForAxis(inputShape, 1);</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> stop1 = paddedParams.GetStopForAxis (inputShape, 1, start1);</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> start2 = paddedParams.GetStartForAxis(inputShape, 2);</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> stop2 = paddedParams.GetStopForAxis (inputShape, 2, start2);</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; </div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> start3 = paddedParams.GetStartForAxis(inputShape, 3);</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> stop3 = paddedParams.GetStopForAxis (inputShape, 3, start3);</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; </div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> step = armnn::numeric_cast&lt;int&gt;(dataTypeSize);</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; </div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> in0 = start0;</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; !LoopCondition(in0, stop0, paddedParams.m_Stride[0]);</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; in0 += paddedParams.m_Stride[0])</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; {</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> in1 = start1;</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; !LoopCondition(in1, stop1, paddedParams.m_Stride[1]);</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; in1 += paddedParams.m_Stride[1])</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; {</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> in2 = start2;</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; !LoopCondition(in2, stop2, paddedParams.m_Stride[2]);</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; in2 += paddedParams.m_Stride[2])</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> in3 = start3;</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; !LoopCondition(in3, stop3, paddedParams.m_Stride[3]);</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; in3 += paddedParams.m_Stride[3])</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; {</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordtype">int</span> dim1 = armnn::numeric_cast&lt;int&gt;(inputShape[1]);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordtype">int</span> dim2 = armnn::numeric_cast&lt;int&gt;(inputShape[2]);</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordtype">int</span> dim3 = armnn::numeric_cast&lt;int&gt;(inputShape[3]);</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordtype">int</span> inputOffset = (((in0 * dim1 + in1) * dim2 + in2) * dim3 + in3) * step;</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; ::memcpy(output, input + inputOffset, dataTypeSize);</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; output += step;</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; }</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_descriptors_8cpp_source.html#l00393">StridedSliceDescriptor::GetStartForAxis()</a>, <a class="el" href="_descriptors_8cpp_source.html#l00420">StridedSliceDescriptor::GetStopForAxis()</a>, and <a class="el" href="_descriptors_8hpp_source.html#l01346">StridedSliceDescriptor::m_Stride</a>.</p>
</div>
</div>
<a id="aaaddf7d8f68eae6c1bf90e4ec3cb5490"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaaddf7d8f68eae6c1bf90e4ec3cb5490">&#9670;&nbsp;</a></span>StringToLogLevel()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a> armnn::StringToLogLevel </td>
<td>(</td>
<td class="paramtype">std::string&#160;</td>
<td class="paramname"><em>level</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_logging_8hpp_source.html#l00043">43</a> of file <a class="el" href="_logging_8hpp_source.html">Logging.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">// Transfer to lower case</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; std::transform(level.begin(), level.end(), level.begin(),</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; [](<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c){ return std::tolower(c); }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; );</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;trace&quot;</span>)</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">return</span> LogSeverity::Trace;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;debug&quot;</span>)</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a181ecb133401da6ff2916c192ca04d48">LogSeverity::Debug</a>;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;info&quot;</span>)</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; {</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">return</span> LogSeverity::Info;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; }</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;warning&quot;</span>)</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> LogSeverity::Warning;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;error&quot;</span>)</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">return</span> LogSeverity::Error;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;fatal&quot;</span>)</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">return</span> LogSeverity::Fatal;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;Unknown severity level for logging: &#39;&quot;</span> + level +</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="stringliteral">&quot;&#39;. Valid options: trace, debug, info, warning, error, fatal&quot;</span>);</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; }</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3daa603905470e2a5b8c13e96b579ef0dba">Debug</a>, <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">Error</a>, <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4">Fatal</a>, <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">Info</a>, <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">Trace</a>, and <a class="el" href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">Warning</a>.</p>
</div>
</div>
<a id="a14d7f180bf51e86850305965c3707e07"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a14d7f180bf51e86850305965c3707e07">&#9670;&nbsp;</a></span>swap() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::swap </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_origins_descriptor.html">OriginsDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>first</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_origins_descriptor.html">OriginsDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>second</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_descriptors_8cpp_source.html#l00357">357</a> of file <a class="el" href="_descriptors_8cpp_source.html">Descriptors.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;{</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keyword">using</span> <a class="code" href="namespacearmnn.html#a686b8288a04b3ffff67d560eea53f6be">std::swap</a>;</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <a class="code" href="namespacearmnn.html#a686b8288a04b3ffff67d560eea53f6be">swap</a>(first.m_NumViews, second.m_NumViews);</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <a class="code" href="namespacearmnn.html#a686b8288a04b3ffff67d560eea53f6be">swap</a>(first.m_NumDimensions, second.m_NumDimensions);</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <a class="code" href="namespacearmnn.html#a686b8288a04b3ffff67d560eea53f6be">swap</a>(first.m_ViewOrigins, second.m_ViewOrigins);</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="namespacearmnn.html#a686b8288a04b3ffff67d560eea53f6be">swap</a>(first.m_ConcatAxis, second.m_ConcatAxis);</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8cpp_source.html#l00366">swap()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_backend_id_8hpp_source.html#l00102">BackendId::operator=()</a>, <a class="el" href="_squash_equal_siblings_8hpp_source.html#l00025">SquashEqualSiblingsImpl&lt; Comparable &gt;::Run()</a>, <a class="el" href="_backend_registry_8cpp_source.html#l00102">BackendRegistry::Swap()</a>, and <a class="el" href="_descriptors_8cpp_source.html#l00366">swap()</a>.</p>
</div>
</div>
<a id="a686b8288a04b3ffff67d560eea53f6be"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a686b8288a04b3ffff67d560eea53f6be">&#9670;&nbsp;</a></span>swap() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::swap </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_views_descriptor.html">ViewsDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>first</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structarmnn_1_1_views_descriptor.html">ViewsDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>second</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_descriptors_8cpp_source.html#l00366">366</a> of file <a class="el" href="_descriptors_8cpp_source.html">Descriptors.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;{</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">using</span> <a class="code" href="namespacearmnn.html#a686b8288a04b3ffff67d560eea53f6be">std::swap</a>;</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="namespacearmnn.html#a686b8288a04b3ffff67d560eea53f6be">swap</a>(first.m_Origins, second.m_Origins);</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="namespacearmnn.html#a686b8288a04b3ffff67d560eea53f6be">swap</a>(first.m_ViewSizes, second.m_ViewSizes);</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <a class="code" href="namespacearmnn.html#a686b8288a04b3ffff67d560eea53f6be">swap</a>(first.m_IsAxisSet, second.m_IsAxisSet);</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="namespacearmnn.html#a686b8288a04b3ffff67d560eea53f6be">swap</a>(first.m_Axis, second.m_Axis);</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8cpp_source.html#l00357">swap()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_descriptors_8cpp_source.html#l00357">swap()</a>.</p>
</div>
</div>
<a id="ae789852d4625b71ca83474fe12c511e8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae789852d4625b71ca83474fe12c511e8">&#9670;&nbsp;</a></span>Tile()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Tile </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_tile_descriptor.html">TileDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>params</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>inputInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>inputDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>outputEncoder</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_tile_8cpp_source.html#l00045">45</a> of file <a class="el" href="_tile_8cpp_source.html">Tile.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;{</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="comment">// Input and output will always have same rank</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; uint32_t rank = inputInfo.GetNumDimensions();</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; TensorShape inputShape = inputInfo.GetShape();</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; std::vector&lt;uint32_t&gt; outputShape(rank);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; rank; ++i)</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; {</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; outputShape[i] = inputShape[i] * params.m_Multiples[i];</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="comment">// If all values of multiples are 1, then return the input</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span> ( std::adjacent_find( params.m_Multiples.begin(), params.m_Multiples.end(),</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; std::not_equal_to&lt;&gt;() ) == params.m_Multiples.end() &amp;&amp; params.m_Multiples[0] == 1)</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">for</span> (uint32_t idx = 0; idx &lt; inputInfo.GetNumElements(); ++idx)</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; {</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordtype">float</span> inputValue = inputDecoder.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; ++inputDecoder;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; outputEncoder.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputValue);</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; ++outputEncoder;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; }</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; std::vector&lt;float&gt; inputData = inputDecoder.<a class="code" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(inputInfo.GetShape());</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; std::vector&lt;float&gt; outputData;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">auto</span> outputNumElements = inputData.size() * <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(std::accumulate(begin(params.m_Multiples),</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; end(params.m_Multiples),</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; 1,</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; std::multiplies&lt;&gt;()));</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; outputData.reserve(outputNumElements);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">for</span> (uint32_t outputIndex = 0; outputIndex &lt; outputNumElements; ++outputIndex)</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; {</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; std::vector&lt;uint32_t&gt; outputCoords = <a class="code" href="namespacearmnn.html#a536bd930213ea3fd689fc28c8589fc4a">IndexToCoordinates</a>(outputShape, outputIndex);</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="comment">// Converting output coordinates to input coordinates using modulus</span></div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; std::vector&lt;uint32_t&gt; inputCoordinates;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; inputCoordinates.reserve(rank);</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; rank; ++i)</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; {</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; inputCoordinates.push_back(outputCoords[i] % inputShape[i]);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; }</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; uint32_t inputIndex = <a class="code" href="namespacearmnn.html#a8b5472bb95f8226e5c82b95c1de1dab0">CoordinatesToIndex</a>(inputShape, inputCoordinates);</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; </div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; outputEncoder[outputIndex];</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; outputEncoder.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputData[inputIndex]);</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tile_8cpp_source.html#l00032">CoordinatesToIndex()</a>, <a class="el" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder&lt; IType &gt;::DecodeTensor()</a>, <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.html#l00197">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.html#l00198">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.html#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_tile_8cpp_source.html#l00016">IndexToCoordinates()</a>, <a class="el" href="_descriptors_8hpp_source.html#l01656">TileDescriptor::m_Multiples</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="a2748f45e58b1c612d473043f711d1434"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2748f45e58b1c612d473043f711d1434">&#9670;&nbsp;</a></span>TopKSort()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void TopKSort </td>
<td>(</td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>k</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int *&#160;</td>
<td class="paramname"><em>indices</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const float *&#160;</td>
<td class="paramname"><em>values</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>numElement</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_detection_post_process_8cpp_source.html#l00023">23</a> of file <a class="el" href="_detection_post_process_8cpp_source.html">DetectionPostProcess.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; std::partial_sort(indices, indices + k, indices + numElement,</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; [&amp;values](<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j) { <span class="keywordflow">return</span> values[i] &gt; values[j]; });</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_detection_post_process_8cpp_source.html#l00139">DetectionPostProcess()</a>, and <a class="el" href="_detection_post_process_8cpp_source.html#l00048">NonMaxSuppression()</a>.</p>
</div>
</div>
<a id="a40fd83a6a69162220440c353f27e8c78"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a40fd83a6a69162220440c353f27e8c78">&#9670;&nbsp;</a></span>TosaRefBackendId()</h2>
<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>
<td>(</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="_tosa_ref_backend_id_8hpp_source.html#l00010">10</a> of file <a class="el" href="_tosa_ref_backend_id_8hpp_source.html">TosaRefBackendId.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;TosaRef&quot;</span>; }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_tosa_ref_backend_8cpp_source.html#l00032">TosaRefBackend::GetIdStatic()</a>.</p>
</div>
</div>
<a id="a9cc3716d6ece2068215d72aae0ad7918"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9cc3716d6ece2068215d72aae0ad7918">&#9670;&nbsp;</a></span>TosaRefPreCompiledWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool TosaRefPreCompiledWorkloadValidate </td>
<td>(</td>
<td class="paramtype">std::string *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_tosa_ref_pre_compiled_workload_8cpp_source.html#l00166">166</a> of file <a class="el" href="_tosa_ref_pre_compiled_workload_8cpp_source.html">TosaRefPreCompiledWorkload.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;{</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ab6c9f1100acdf0b61ae55acd3447e734"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab6c9f1100acdf0b61ae55acd3447e734">&#9670;&nbsp;</a></span>TosaRefTensorHandleFactoryId()</h2>
<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>
<td>(</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="_tosa_ref_tensor_handle_factory_8hpp_source.html#l00015">15</a> of file <a class="el" href="_tosa_ref_tensor_handle_factory_8hpp_source.html">TosaRefTensorHandleFactory.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;Arm/TosaRef/TensorHandleFactory&quot;</span>; }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_tosa_ref_tensor_handle_factory_8cpp_source.html#l00016">TosaRefTensorHandleFactory::GetIdStatic()</a>.</p>
</div>
</div>
<a id="affec174d91f234497dfbceba5e251dee"></a>
<h2 class="memtitle"><span class="permalink"><a href="#affec174d91f234497dfbceba5e251dee">&#9670;&nbsp;</a></span>TransposeConvolution2dImpl()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void TransposeConvolution2dImpl </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.html">TransposeConvolution2dDescriptor</a> &amp;&#160;</td>
<td class="paramname"><em>descriptor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>inputShape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>inputDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>outputShape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.html">Encoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>outputEncoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.html">TensorShape</a> &amp;&#160;</td>
<td class="paramname"><em>weightsShape</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>weightsDecoder</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.html">Decoder</a>&lt; float &gt; *&#160;</td>
<td class="paramname"><em>biasesDecoder</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_transpose_convolution2d_8cpp_source.html#l00015">15</a> of file <a class="el" href="_transpose_convolution2d_8cpp_source.html">TransposeConvolution2d.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled &amp;&amp; !biasesDecoder)</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; {</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Biases enabled but no bias data provided&quot;</span>);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; }</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.html">DataLayoutIndexed</a> dataLayoutIndexed(descriptor.m_DataLayout);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelsIndex = dataLayoutIndexed.GetChannelsIndex();</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> heightIndex = dataLayoutIndexed.GetHeightIndex();</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> widthIndex = dataLayoutIndexed.GetWidthIndex();</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numBatches = inputShape[0];</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = inputShape[widthIndex];</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = inputShape[heightIndex];</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputDepth = inputShape[channelsIndex];</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> weightsHeight = weightsShape[heightIndex];</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> weightsWidth = weightsShape[widthIndex];</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> weightsDepth = weightsShape[channelsIndex];</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = outputShape[heightIndex];</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = outputShape[widthIndex];</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputDepth = outputShape[channelsIndex];</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddingLeft = descriptor.m_PadLeft;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddingTop = descriptor.m_PadTop;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> strideX = descriptor.m_StrideX;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> strideY = descriptor.m_StrideY;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; std::vector&lt;float&gt; outputBuffer(outputShape.GetNumElements(), 0);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; inputVec = inputDecoder.<a class="code" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(inputShape);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; filterVec = weightsDecoder.<a class="code" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(weightsShape);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batch = 0u; batch &lt; numBatches; ++batch)</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; {</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yInput = 0u; yInput &lt; inputHeight; ++yInput)</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xInput = 0u; xInput &lt; inputWidth; ++xInput)</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xOutputOrigin = xInput * strideX - paddingLeft;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yOutputOrigin = yInput * strideY - paddingTop;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dOutput = 0u; dOutput &lt; outputDepth; ++dOutput)</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yWeights = 0u; yWeights &lt; weightsHeight; ++yWeights)</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xWeights = 0u; xWeights &lt; weightsWidth; ++xWeights)</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yOutput = yOutputOrigin + yWeights;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xOutput = xOutputOrigin + xWeights;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">if</span> (yOutput &lt; outputHeight &amp;&amp; xOutput&lt; outputWidth)</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dInput = 0u; dInput &lt; inputDepth; dInput++)</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputIndex;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputIndex;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> weightsIndex;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; </div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span>(descriptor.m_DataLayout == <a class="code" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; inputIndex = batch * inputHeight * inputWidth * inputDepth +</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; yInput * inputWidth * inputDepth +</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; xInput * inputDepth +</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; dInput;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; weightsIndex = dOutput * weightsHeight * weightsWidth * weightsDepth +</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; yWeights * weightsWidth * weightsDepth +</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; xWeights * weightsDepth +</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; dInput;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; outputIndex = batch * outputHeight * outputWidth * outputDepth +</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; yOutput * outputWidth * outputDepth +</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; xOutput * outputDepth +</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; dOutput;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; {</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; inputIndex = batch * inputDepth * inputHeight * inputWidth +</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; dInput * inputHeight * inputWidth +</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; yInput * inputWidth +</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; xInput;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; weightsIndex = dOutput * weightsDepth * weightsHeight * weightsWidth +</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; dInput * weightsHeight * weightsWidth +</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; yWeights * weightsWidth +</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; xWeights;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; outputIndex = batch * outputDepth * outputHeight * outputWidth +</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; dOutput * outputHeight * outputWidth +</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; yOutput * outputWidth +</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; xOutput;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; }</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; </div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; outputBuffer[outputIndex] += inputVec[inputIndex] * filterVec[weightsIndex];</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; </div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; </div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="comment">// Apply bias (if enabled)</span></div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; {</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; outputEncoder[0];</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; Decoder&lt;float&gt;&amp; rBiasesDecoder = *biasesDecoder;</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batch = 0u; batch &lt; numBatches; ++batch)</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dOutput = 0u; dOutput &lt; outputDepth; ++dOutput)</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; {</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; rBiasesDecoder[dOutput];</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yOutput = 0u; yOutput &lt; outputHeight; ++yOutput)</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xOutput = 0u; xOutput &lt; outputWidth; ++xOutput)</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; {</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputIndex =</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; dataLayoutIndexed.GetIndex(outputShape, batch, dOutput, yOutput, xOutput);</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; outputBuffer[outputIndex] += rBiasesDecoder.<a class="code" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Get</a>();</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; }</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; outputEncoder[0];</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">float</span> output : outputBuffer)</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; outputEncoder.<a class="code" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Set</a>(output);</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; ++outputEncoder;</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder&lt; IType &gt;::DecodeTensor()</a>, <a class="el" href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00028">DataLayoutIndexed::GetIndex()</a>, <a class="el" href="_tensor_8cpp_source.html#l00181">TensorShape::GetNumElements()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.html#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.html#l01481">TransposeConvolution2dDescriptor::m_BiasEnabled</a>, <a class="el" href="_descriptors_8hpp_source.html#l01483">TransposeConvolution2dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.html#l01469">TransposeConvolution2dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.html#l01473">TransposeConvolution2dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.html#l01477">TransposeConvolution2dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.html#l01479">TransposeConvolution2dDescriptor::m_StrideY</a>, <a class="el" href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>, and <a class="el" href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
</div>
</div>
<a id="a1c60a2624c7cabd60237bbeec07c70a0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1c60a2624c7cabd60237bbeec07c70a0">&#9670;&nbsp;</a></span>TrueFunc()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool armnn::TrueFunc </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::string &amp; &gt;&#160;</td>
<td class="paramname"><em>reasonIfUnsupported</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Params &amp;&amp;...&#160;</td>
<td class="paramname"><em>params</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.html#l00054">54</a> of file <a class="el" href="_layer_support_common_8hpp_source.html">LayerSupportCommon.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;{</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(reasonIfUnsupported);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.html#l00014">IgnoreUnused()</a>.</p>
</div>
</div>
<a id="a52928589effc0b9cbb170a93ea792d47"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a52928589effc0b9cbb170a93ea792d47">&#9670;&nbsp;</a></span>ValidateSourcesMatchOptimizedNetwork()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void armnn::ValidateSourcesMatchOptimizedNetwork </td>
<td>(</td>
<td class="paramtype">std::vector&lt; <a class="el" href="structarmnn_1_1_backend_options.html">BackendOptions</a> &gt;&#160;</td>
<td class="paramname"><em>optimizedOptions</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_i_network_properties.html">INetworkProperties</a> &amp;&#160;</td>
<td class="paramname"><em>networkProperties</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>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. </p>
<p>During optimization the tensor handle factories are chosen based on whether import and export are enabled. If the user then specifies something incompatible here it can lead to problems.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">optimizedOptions</td><td></td></tr>
<tr><td class="paramname">networkProperties</td><td></td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="_loaded_network_8cpp_source.html#l00101">101</a> of file <a class="el" href="_loaded_network_8cpp_source.html">LoadedNetwork.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;{</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="comment">// Find the &quot;Global&quot; backend options. During the optimize phase the values of importEnabled and exportEnabled are</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="comment">// added as backend options.</span></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">const</span> vector&lt;BackendOptions&gt;::iterator&amp; backendItr =</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; find_if(optimizedOptions.begin(), optimizedOptions.end(), [](<span class="keyword">const</span> BackendOptions&amp; backend) {</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; if (backend.GetBackendId().Get() == <span class="stringliteral">&quot;Global&quot;</span>)</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; return true;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; {</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; return false;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; });</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordtype">bool</span> importEnabled = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordtype">bool</span> exportEnabled = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">if</span> (backendItr != optimizedOptions.end())</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; {</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="comment">// Find the importEnabled and exportEnabled values.</span></div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; backendItr-&gt;GetOptionCount(); i++)</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; {</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">const</span> BackendOptions::BackendOption&amp; option = backendItr-&gt;GetOption(i);</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">if</span> (option.GetName() == <span class="stringliteral">&quot;ImportEnabled&quot;</span>)</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; {</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; importEnabled = option.GetValue().AsBool();</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">if</span> (option.GetName() == <span class="stringliteral">&quot;ExportEnabled&quot;</span>)</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; exportEnabled = option.GetValue().AsBool();</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; }</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; }</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="comment">// Now that we have values for import and export compare them to the MemorySource variables.</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="comment">// Any value of MemorySource that&#39;s not &quot;Undefined&quot; implies that we need to do an import of some kind.</span></div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">if</span> ((networkProperties.m_InputSource == MemorySource::Undefined &amp;&amp; importEnabled) ||</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; (networkProperties.m_InputSource != MemorySource::Undefined &amp;&amp; !importEnabled))</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; {</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keyword">auto</span> message = fmt::format(<span class="stringliteral">&quot;The input memory source specified, &#39;{0}&#39;,&quot;</span>, networkProperties.m_InputSource);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">if</span> (!importEnabled)</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; {</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; message.append(<span class="stringliteral">&quot; requires that memory import be enabled. However, &quot;</span></div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="stringliteral">&quot;it was disabled when this network was optimized.&quot;</span>);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; message.append(<span class="stringliteral">&quot; requires that memory import be disabled. However, &quot;</span></div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="stringliteral">&quot;it was enabled when this network was optimized.&quot;</span>);</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(message);</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; </div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">if</span> ((networkProperties.m_OutputSource == MemorySource::Undefined &amp;&amp; exportEnabled) ||</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; (networkProperties.m_OutputSource != MemorySource::Undefined &amp;&amp; !exportEnabled))</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; {</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keyword">auto</span> message = fmt::format(<span class="stringliteral">&quot;The output memory source specified, &#39;{0}&#39;,&quot;</span>, networkProperties.m_OutputSource);</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">if</span> (!exportEnabled)</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; {</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; message.append(<span class="stringliteral">&quot; requires that memory export be enabled. However, &quot;</span></div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="stringliteral">&quot;it was disabled when this network was optimized.&quot;</span>);</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; message.append(<span class="stringliteral">&quot; requires that memory export be disabled. However, &quot;</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="stringliteral">&quot;it was enabled when this network was optimized.&quot;</span>);</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; }</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(message);</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; }</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;} <span class="comment">// anonymous</span></div>
</div><!-- fragment -->
</div>
</div>
<a id="acda1e285d7be5f9b456d98bd29be4591"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acda1e285d7be5f9b456d98bd29be4591">&#9670;&nbsp;</a></span>VerifyClContextBuffer()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool armnn::VerifyClContextBuffer </td>
<td>(</td>
<td class="paramtype">flatbuffers::Verifier &amp;&#160;</td>
<td class="paramname"><em>verifier</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.html#l00157">157</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.html">ClContextSchema_generated.h</a>.</p>
<div class="fragment"><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">return</span> verifier.VerifyBuffer&lt;armnn::ClContext&gt;(<a class="code" href="namespacearmnn.html#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a>());</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.html#l00148">ClContextIdentifier()</a>.</p>
</div>
</div>
<a id="acc7af054e783ad1bf6dce0111366d64c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acc7af054e783ad1bf6dce0111366d64c">&#9670;&nbsp;</a></span>VerifySizePrefixedClContextBuffer()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool armnn::VerifySizePrefixedClContextBuffer </td>
<td>(</td>
<td class="paramtype">flatbuffers::Verifier &amp;&#160;</td>
<td class="paramname"><em>verifier</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.html#l00162">162</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.html">ClContextSchema_generated.h</a>.</p>
<div class="fragment"><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; {</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">return</span> verifier.VerifySizePrefixedBuffer&lt;armnn::ClContext&gt;(<a class="code" href="namespacearmnn.html#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a>());</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.html#l00148">ClContextIdentifier()</a>.</p>
</div>
</div>
<a id="a9667bea652e3a5ef81fea59b71513ced"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9667bea652e3a5ef81fea59b71513ced">&#9670;&nbsp;</a></span>VerifyTensorInfoDataType()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void armnn::VerifyTensorInfoDataType </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a> &amp;&#160;</td>
<td class="paramname"><em>info</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a>&#160;</td>
<td class="paramname"><em>dataType</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.html#l00382">382</a> of file <a class="el" href="_types_utils_8hpp_source.html">TypesUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;{</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType() != dataType)</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; {</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; std::stringstream ss;</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;Unexpected datatype:&quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.html#a81b5ff8545adad19a1c9d4ca076d552c">armnn::GetDataTypeName</a>(<a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; &lt;&lt; <span class="stringliteral">&quot; for tensor:&quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetShape()</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; &lt;&lt; <span class="stringliteral">&quot;. The type expected to be: &quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.html#a81b5ff8545adad19a1c9d4ca076d552c">armnn::GetDataTypeName</a>(dataType);</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(ss.str());</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; }</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_types_utils_8hpp_source.html#l00233">GetDataTypeName()</a>, and <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
</div>
</div>
<a id="a562616feb340f23dbad3d86eb8706218"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a562616feb340f23dbad3d86eb8706218">&#9670;&nbsp;</a></span>WrapClError()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_runtime_exception.html">RuntimeException</a> WrapClError </td>
<td>(</td>
<td class="paramtype">const cl::Error &amp;&#160;</td>
<td class="paramname"><em>clError</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structarmnn_1_1_check_location.html">CheckLocation</a> &amp;&#160;</td>
<td class="paramname"><em>location</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.html#l00159">159</a> of file <a class="el" href="_cl_workload_utils_8hpp_source.html">ClWorkloadUtils.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;{</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; std::stringstream message;</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; message &lt;&lt; <span class="stringliteral">&quot;CL error: &quot;</span> &lt;&lt; clError.what() &lt;&lt; <span class="stringliteral">&quot;. Error code: &quot;</span> &lt;&lt; clError.err();</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; </div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">return</span> RuntimeException(message.str(), location);</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_exceptions_8cpp_source.html#l00032">Exception::what()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_workload_utils_8hpp_source.html#l00167">RunClFunction()</a>.</p>
</div>
</div>
<h2 class="groupheader">Variable Documentation</h2>
<a id="a2cafcc09d062f993b17f53499933a952"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2cafcc09d062f993b17f53499933a952">&#9670;&nbsp;</a></span>cpuAccCapabilities</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="namespacearmnn.html#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> cpuAccCapabilities(&quot;CpuAcc&quot;, { {&quot;NonConstWeights&quot;, true}, {&quot;AsyncExecution&quot;, false}, {&quot;ProtectedContentAllocation&quot;, false}, {&quot;ConstantTensorsAsInputs&quot;, true}, {&quot;PreImportIOTensors&quot;, false}, {&quot;ExternallyManagedMemory&quot;, true}, {&quot;MultiAxisPacking&quot;, false}, {&quot;SingleAxisPacking&quot;, true}, {&quot;HasFp16&quot;, arm_compute::CPUInfo::get().has_fp16()} })</td>
</tr>
</table>
</div><div class="memdoc">
<p class="reference">Referenced by <a class="el" href="_neon_backend_8hpp_source.html#l00068">NeonBackend::GetCapabilities()</a>.</p>
</div>
</div>
<a id="a35f80da9b1316b2d338f4615906ef30d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a35f80da9b1316b2d338f4615906ef30d">&#9670;&nbsp;</a></span>cpuRefCapabilities</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="namespacearmnn.html#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> cpuRefCapabilities(&quot;CpuRef&quot;, { {&quot;NonConstWeights&quot;, true}, {&quot;AsyncExecution&quot;, true}, {&quot;ProtectedContentAllocation&quot;, false}, {&quot;ConstantTensorsAsInputs&quot;, true}, {&quot;PreImportIOTensors&quot;, true}, {&quot;ExternallyManagedMemory&quot;, true}, {&quot;MultiAxisPacking&quot;, false}, {&quot;SingleAxisPacking&quot;, true}, {&quot;HasFp16&quot;, true} })</td>
</tr>
</table>
</div><div class="memdoc">
<p class="reference">Referenced by <a class="el" href="_ref_backend_8hpp_source.html#l00061">RefBackend::GetCapabilities()</a>.</p>
</div>
</div>
<a id="a61d2390e44601830cdc9b400b9910bbf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a61d2390e44601830cdc9b400b9910bbf">&#9670;&nbsp;</a></span>EXPIRE_RATE</h2>
<div class="memitem">
<div class="memproto">
<table class="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.html#l00037">37</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
</div>
</div>
<a id="aacc0d11e271ebbfcff9d613dd17604aa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aacc0d11e271ebbfcff9d613dd17604aa">&#9670;&nbsp;</a></span>g_AggregateProfilingEventsByInference</h2>
<div class="memitem">
<div class="memproto">
<table class="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.html#l00037">37</a> of file <a class="el" href="_profiling_8cpp_source.html">Profiling.cpp</a>.</p>
<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.html#l00490">ProfilerImpl::AnalyzeEventsAndWriteResults()</a>.</p>
</div>
</div>
<a id="a43ecd194778b7653578044060ba8695e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a43ecd194778b7653578044060ba8695e">&#9670;&nbsp;</a></span>g_ProfilingEventCountHint</h2>
<div class="memitem">
<div class="memproto">
<table class="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.html#l00029">29</a> of file <a class="el" href="_profiling_8cpp_source.html">Profiling.cpp</a>.</p>
<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.html#l00164">ProfilerImpl::ProfilerImpl()</a>.</p>
</div>
</div>
<a id="a41794552ff67b0dad16de60f9b8e7d7c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a41794552ff67b0dad16de60f9b8e7d7c">&#9670;&nbsp;</a></span>g_WriteProfilingEventSequence</h2>
<div class="memitem">
<div class="memproto">
<table class="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.html#l00032">32</a> of file <a class="el" href="_profiling_8cpp_source.html">Profiling.cpp</a>.</p>
<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.html#l00113">ProfilerImpl::AnalyzeEventSequenceAndWriteResults()</a>.</p>
</div>
</div>
<a id="a6ce7e56eb10e440463f09eee8f213adc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ce7e56eb10e440463f09eee8f213adc">&#9670;&nbsp;</a></span>g_WriteReportToStdOutOnProfilerDestruction</h2>
<div class="memitem">
<div class="memproto">
<table class="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.html#l00041">41</a> of file <a class="el" href="_profiling_8cpp_source.html">Profiling.cpp</a>.</p>
<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.html#l00176">ProfilerImpl::~ProfilerImpl()</a>.</p>
</div>
</div>
<a id="afcf2f9c617481601a888f1f9425586ba"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afcf2f9c617481601a888f1f9425586ba">&#9670;&nbsp;</a></span>gpuFsaCapabilities</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="namespacearmnn.html#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> gpuFsaCapabilities(&quot;GpuFsa&quot;, { {&quot;NonConstWeights&quot;, false}, {&quot;AsyncExecution&quot;, false}, {&quot;ProtectedContentAllocation&quot;, false}, {&quot;ConstantTensorsAsInputs&quot;, true}, {&quot;PreImportIOTensors&quot;, false}, {&quot;ExternallyManagedMemory&quot;, false}, {&quot;MultiAxisPacking&quot;, false}, {&quot;SingleAxisPacking&quot;, false} })</td>
</tr>
</table>
</div><div class="memdoc">
<p class="reference">Referenced by <a class="el" href="_gpu_fsa_backend_8hpp_source.html#l00100">GpuFsaBackend::GetCapabilities()</a>.</p>
</div>
</div>
<a id="a602ddc6408c3347ba4c1eba623003984"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a602ddc6408c3347ba4c1eba623003984">&#9670;&nbsp;</a></span>LOWEST_CAPTURE_PERIOD</h2>
<div class="memitem">
<div class="memproto">
<table class="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>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00034">34</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
</div>
</div>
<a id="abdcd184ed3bd648bb31d385040cafd5d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abdcd184ed3bd648bb31d385040cafd5d">&#9670;&nbsp;</a></span>MaxNumOfTensorDimensions</h2>
<div class="memitem">
<div class="memproto">
<table class="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.html#l00031">31</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<p class="reference">Referenced by <a class="el" href="_concatenate_8cpp_source.html#l00014">Concatenate()</a>, <a class="el" href="_workload_utils_8hpp_source.html#l00046">CopyTensorContentsGeneric()</a>, <a class="el" href="_descriptors_8cpp_source.html#l00020">PermutationVector::PermutationVector()</a>, <a class="el" href="_permute_8cpp_source.html#l00125">armnnUtils::Permuted()</a>, <a class="el" href="_splitter_8cpp_source.html#l00020">Split()</a>, <a class="el" href="_splitter_8hpp_source.html#l00017">Splitter()</a>, <a class="el" href="_tosa_layer_support_rules_8hpp_source.html#l00036">TosaTensorNumDimensionsWithinBounds::TosaTensorNumDimensionsWithinBounds()</a>, <a class="el" href="_deserializer_8cpp_source.html#l00676">armnnDeserializer::ToTensorInfo()</a>, and <a class="el" href="_transpose_8cpp_source.html#l00125">armnnUtils::TransposeTensorShape()</a>.</p>
</div>
</div>
<a id="ab7a35288d329560ff76ddf785e852507"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab7a35288d329560ff76ddf785e852507">&#9670;&nbsp;</a></span>oldCpuRefCapabilities</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const std::set&lt;<a class="el" href="namespacearmnn.html#ab24d74259a053475f6040dd701a01952">armnn::BackendCapability</a>&gt; oldCpuRefCapabilities</td>
</tr>
</table>
</div><div class="memdoc">
<b>Initial value:</b><div class="fragment"><div class="line">{</div>
<div class="line"> <a class="code" href="namespacearmnn.html#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.html#l00025">25</a> of file <a class="el" href="_ref_backend_8hpp_source.html">RefBackend.hpp</a>.</p>
</div>
</div>
<a id="a57af7c2f79db8ab6ccc1611a2172b6e6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a57af7c2f79db8ab6ccc1611a2172b6e6">&#9670;&nbsp;</a></span>paddingRequiredLayers</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const std::set&lt;<a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a>&gt; paddingRequiredLayers</td>
</tr>
</table>
</div><div class="memdoc">
<b>Initial value:</b><div class="fragment"><div class="line">{</div>
<div class="line"> <a class="code" href="namespacearmnn.html#ad441be836a142e8935e0413f4a22c9ec">LayerType::ArgMinMax</a>,</div>
<div class="line"> LayerType::Convolution2d,</div>
<div class="line"> <a class="code" href="namespacearmnn.html#ab023d9a7687e35c0f108458a094c1f56">LayerType::DepthToSpace</a>,</div>
<div class="line"> LayerType::DepthwiseConvolution2d,</div>
<div class="line"> <a class="code" href="namespacearmnn.html#a855293b1be0581fb61ef6a1c5b027d0f">LayerType::Dequantize</a>,</div>
<div class="line"> <a class="code" href="namespacearmnn.html#a435f9350a94adfbb0d5b9abb5f430914">LayerType::FullyConnected</a>,</div>
<div class="line"> <a class="code" href="namespacearmnn.html#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.html#af3c74017185773dd61d8ca6662d65d43">LayerType::Permute</a>,</div>
<div class="line"> <a class="code" href="namespacearmnn.html#ae2e93e304cf516841c521e3eaee025cd">LayerType::Pooling2d</a>,</div>
<div class="line"> <a class="code" href="namespacearmnn.html#ad773a034fb9983e15f3094b4c5c7c30c">LayerType::Quantize</a>,</div>
<div class="line"> LayerType::QuantizedLstm,</div>
<div class="line"> <a class="code" href="namespacearmnn.html#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.html#l00016">16</a> of file <a class="el" href="_neon_tensor_handle_factory_8hpp_source.html">NeonTensorHandleFactory.hpp</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_tensor_handle_factory_8cpp_source.html#l00120">NeonTensorHandleFactory::GetCapabilities()</a>.</p>
</div>
</div>
<a id="acb96b901eccb58267042c6bb7d41185f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acb96b901eccb58267042c6bb7d41185f">&#9670;&nbsp;</a></span>tl_Profiler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">thread_local <a class="el" href="classarmnn_1_1_i_profiler.html">IProfiler</a>* tl_Profiler = nullptr</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.html#l00600">600</a> of file <a class="el" href="_profiling_8cpp_source.html">Profiling.cpp</a>.</p>
<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.html#l00614">ProfilerManager::GetProfiler()</a>, and <a class="el" href="_profiling_8cpp_source.html#l00609">ProfilerManager::RegisterProfiler()</a>.</p>
</div>
</div>
<a id="aa2b4a5cd5b7f1555cba80a6072824024"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa2b4a5cd5b7f1555cba80a6072824024">&#9670;&nbsp;</a></span>wordSize</h2>
<div class="memitem">
<div class="memproto">
<table class="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.html#l00022">22</a> of file <a class="el" href="_single_axis_priority_list_8cpp_source.html">SingleAxisPriorityList.cpp</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div class="ttc" id="a_assert_8hpp_html_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.html#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.html#l00014">Assert.hpp:14</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233"><div class="ttname"><a href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">armnn::ArgMinMaxFunction::Max</a></div><div class="ttdeci">@ Max</div></div>
<div class="ttc" id="anamespacearmnn_html_a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f"><div class="ttname"><a href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f">armnn::TuningLevel::Exhaustive</a></div><div class="ttdeci">@ Exhaustive</div></div>
<div class="ttc" id="anamespacearmnn_html_a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523"><div class="ttname"><a href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523">armnn::MemorySource::Malloc</a></div><div class="ttdeci">@ Malloc</div></div>
<div class="ttc" id="anamespacearmnn_html_a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d"><div class="ttname"><a href="namespacearmnn.html#a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d">armnn::CapabilityClass::FallbackImportDisabled</a></div><div class="ttdeci">@ FallbackImportDisabled</div></div>
<div class="ttc" id="anamespacearmnn_utils_html_a405d5f966ec992d1717711e5a2d7909d"><div class="ttname"><a href="namespacearmnn_utils.html#a405d5f966ec992d1717711e5a2d7909d">armnnUtils::Transpose</a></div><div class="ttdeci">void Transpose(const armnn::TensorShape &amp;dstShape, const armnn::PermutationVector &amp;mappings, const void *src, void *dst, size_t dataTypeSize)</div><div class="ttdef"><b>Definition:</b> <a href="_transpose_8cpp_source.html#l00153">Transpose.cpp:153</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626"><div class="ttname"><a href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626">armnn::PaddingMode::Symmetric</a></div><div class="ttdeci">@ Symmetric</div></div>
<div class="ttc" id="anamespacearmnn_html_ab81159ebfa638af1b91fe1e8c5de1955"><div class="ttname"><a href="namespacearmnn.html#ab81159ebfa638af1b91fe1e8c5de1955">armnn::NeonMinimumWorkloadValidate</a></div><div class="ttdeci">arm_compute::Status NeonMinimumWorkloadValidate(const TensorInfo &amp;input0, const TensorInfo &amp;input1, const TensorInfo &amp;output)</div><div class="ttdoc">Validate function for validating the inputs and output.</div><div class="ttdef"><b>Definition:</b> <a href="_neon_minimum_workload_8cpp_source.html#l00015">NeonMinimumWorkload.cpp:15</a></div></div>
<div class="ttc" id="anamespacearmnn_html_aed346b74795fd613f727ca8369778704"><div class="ttname"><a href="namespacearmnn.html#aed346b74795fd613f727ca8369778704">armnn::GetBinaryOperationAsCString</a></div><div class="ttdeci">constexpr char const * GetBinaryOperationAsCString(BinaryOperation operation)</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.html#l00076">TypesUtils.hpp:76</a></div></div>
<div class="ttc" id="a_arm_compute_utils_8hpp_html_a97d67174b2c48969547ba4bac79e5ea2"><div class="ttname"><a href="_arm_compute_utils_8hpp.html#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.html#l00373">ArmComputeUtils.hpp:373</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a9c0a3a9a388a01bc21e20a16e70055f0"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a9c0a3a9a388a01bc21e20a16e70055f0">armnn::optimizations::InsertDebugToFileLayer</a></div><div class="ttdeci">OptimizeForType&lt; Layer, AddDebugToFileImpl &gt; InsertDebugToFileLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_debug_8hpp_source.html#l00054">AddDebug.hpp:54</a></div></div>
<div class="ttc" id="a_lstm_utils_8cpp_html_a5b81dc0a1a9a2bccab8bb79dfa3e77b7"><div class="ttname"><a href="_lstm_utils_8cpp.html#a5b81dc0a1a9a2bccab8bb79dfa3e77b7">VectorVectorCwiseProduct</a></div><div class="ttdeci">void VectorVectorCwiseProduct(armnn::Decoder&lt; float &gt; &amp;vector1, armnn::Decoder&lt; float &gt; &amp;vector2, uint32_t vSize, armnn::Encoder&lt; float &gt; &amp;outResult)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.html#l00187">LstmUtils.cpp:187</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a674efcf6cbdb9e831d653ff0e821fb38"><div class="ttname"><a href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">armnn::IOptimizedNetworkPtr</a></div><div class="ttdeci">std::unique_ptr&lt; IOptimizedNetwork, void(*)(IOptimizedNetwork *network)&gt; IOptimizedNetworkPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.html#l00340">INetwork.hpp:340</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f"><div class="ttname"><a href="namespacearmnn.html#a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f">armnn::MemBlockStrategyType::MultiAxisPacking</a></div><div class="ttdeci">@ MultiAxisPacking</div></div>
<div class="ttc" id="anamespacearmnn_html_ac39f2b15d34d3e2fc74d586fc3e26231"><div class="ttname"><a href="namespacearmnn.html#ac39f2b15d34d3e2fc74d586fc3e26231">armnn::ApplyBackendOptimizations</a></div><div class="ttdeci">OptimizationResult ApplyBackendOptimizations(OptimizedNetworkImpl *optNetObjPtr, BackendSettings &amp;backendSettings, BackendsMap &amp;backends, const ModelOptions &amp;modelOptions, Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01320">Network.cpp:1320</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360"><div class="ttname"><a href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a></div><div class="ttdeci">@ Undefined</div></div>
<div class="ttc" id="anamespacearmnn_html_ac4f8557279754ed7b3f749d55b0e3047a62b6d55816cf737bfc6f42e60df1a3f2"><div class="ttname"><a href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a62b6d55816cf737bfc6f42e60df1a3f2">armnn::BinaryOperation::Mul</a></div><div class="ttdeci">@ Mul</div></div>
<div class="ttc" id="anamespacearmnn_html_ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b"><div class="ttname"><a href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a></div><div class="ttdeci">@ Boolean</div></div>
<div class="ttc" id="astructarmnn_1_1_pooling2d_descriptor_html_a8c29d6ea9b4186d69aad5961c910939c"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.html#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.html#l00425">Descriptors.hpp:425</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_aa76c76565125ad77092403176d74fd85"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#aa76c76565125ad77092403176d74fd85">armnn::optimizations::InsertDebugLayer</a></div><div class="ttdeci">OptimizeForType&lt; Layer, AddDebugImpl &gt; InsertDebugLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_debug_8hpp_source.html#l00053">AddDebug.hpp:53</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ae8ed5c640761fb6744aec0ee16388417"><div class="ttname"><a href="namespacearmnn.html#ae8ed5c640761fb6744aec0ee16388417">armnn::GenerateRangeK</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; GenerateRangeK(unsigned int k)</div><div class="ttdef"><b>Definition:</b> <a href="_detection_post_process_8cpp_source.html#l00016">DetectionPostProcess.cpp:16</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7">armnn::LayerType::Permute</a></div><div class="ttdeci">@ Permute</div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_aa52c06792e18dc13030e82476f706f9e"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#aa52c06792e18dc13030e82476f706f9e">armnn::optimizations::FuseBatchNormIntoConvolution2DFloat32</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; Convolution2dLayer, BatchNormalizationLayer, FuseBatchNorm&lt; Convolution2dLayer, armnn::DataType::Float32 &gt; &gt; FuseBatchNormIntoConvolution2DFloat32</div><div class="ttdef"><b>Definition:</b> <a href="_fuse_batch_norm_8hpp_source.html#l00222">FuseBatchNorm.hpp:222</a></div></div>
<div class="ttc" id="anamespacearmnn_html_abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b"><div class="ttname"><a href="namespacearmnn.html#abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b">armnn::NormalizationAlgorithmChannel::Within</a></div><div class="ttdeci">@ Within</div></div>
<div class="ttc" id="anamespacearmnn_html_ac4f8557279754ed7b3f749d55b0e3047aec211f7c20af43e742bf2570c3cb84f9"><div class="ttname"><a href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047aec211f7c20af43e742bf2570c3cb84f9">armnn::BinaryOperation::Add</a></div><div class="ttdeci">@ Add</div></div>
<div class="ttc" id="anamespacearmnn_html_a1b03e82a1a53b686aedea3734b2fb957"><div class="ttname"><a href="namespacearmnn.html#a1b03e82a1a53b686aedea3734b2fb957">armnn::NeonAdditionWorkloadValidate</a></div><div class="ttdeci">arm_compute::Status NeonAdditionWorkloadValidate(const TensorInfo &amp;input0, const TensorInfo &amp;input1, const TensorInfo &amp;output, const ActivationDescriptor *activationDescriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_addition_workload_8cpp_source.html#l00020">NeonAdditionWorkload.cpp:20</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_backend_options_1_1_var_html_ad0c302a166dc669426251446bca2748a"><div class="ttname"><a href="classarmnn_1_1_backend_options_1_1_var.html#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.html#l00120">BackendOptions.hpp:120</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ac4aa9e41515b354234645f115c49de32"><div class="ttname"><a href="namespacearmnn.html#ac4aa9e41515b354234645f115c49de32">armnn::Convert1HWOTensorInfoToAcl</a></div><div class="ttdeci">std::tuple&lt; TensorInfo, unsigned int &gt; Convert1HWOTensorInfoToAcl(const TensorInfo &amp;weightInfo, const TensorInfo &amp;inputInfo, const DataLayout dataLayout)</div><div class="ttdoc">Weights for depthwise have a datalayout of [1,H,W,O] = [1,H,W,I*M] This function coverts a TensorInfo...</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.html#l00177">WorkloadUtils.cpp:177</a></div></div>
<div class="ttc" id="a_optional_8hpp_html_acbec11f88a308826fa811f370d363a4a"><div class="ttname"><a href="_optional_8hpp.html#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.html#l00041">Optional.hpp:41</a></div></div>
<div class="ttc" id="anamespacearmnn_html_af6d517245110f6b1ca702da0cbbf4518"><div class="ttname"><a href="namespacearmnn.html#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.html#l00094">ArmComputeUtils.hpp:94</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14"><div class="ttname"><a href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14">armnn::ComparisonOperation::LessOrEqual</a></div><div class="ttdeci">@ LessOrEqual</div></div>
<div class="ttc" id="anamespacearmnn_html_a35d5394615a3062b629db056d414ae4f"><div class="ttname"><a href="namespacearmnn.html#a35d5394615a3062b629db056d414ae4f">armnn::MakeInfo</a></div><div class="ttdeci">arm_compute::DetectionPostProcessLayerInfo MakeInfo(const DetectionPostProcessDescriptor &amp;descriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_detection_post_process_workload_8cpp_source.html#l00017">NeonDetectionPostProcessWorkload.cpp:17</a></div></div>
<div class="ttc" id="anamespacearmnn_html_addb6b14dd1b632263ffe77430259a7c4"><div class="ttname"><a href="namespacearmnn.html#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.html#l00013">InternalTypes.cpp:13</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_encoder_html_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.html#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
<div class="ttc" id="anamespacearmnn_html_ad512520e809bfed4fbd3db9fbc241263"><div class="ttname"><a href="namespacearmnn.html#ad512520e809bfed4fbd3db9fbc241263">armnn::NeonMultiplicationWorkloadValidate</a></div><div class="ttdeci">arm_compute::Status NeonMultiplicationWorkloadValidate(const TensorInfo &amp;input0, const TensorInfo &amp;input1, const TensorInfo &amp;output, const ActivationDescriptor *activationDescriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_multiplication_workload_8cpp_source.html#l00019">NeonMultiplicationWorkload.cpp:19</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad10d72a6f8859949bbe6134c638ce171"><div class="ttname"><a href="namespacearmnn.html#ad10d72a6f8859949bbe6134c638ce171">armnn::Activation</a></div><div class="ttdeci">void Activation(Decoder&lt; float &gt; &amp;in, Encoder&lt; float &gt; &amp;out, const TensorInfo &amp;tensorInfo, ActivationFunction function, float a, float b)</div><div class="ttdef"><b>Definition:</b> <a href="_activation_8cpp_source.html#l00102">Activation.cpp:102</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015"><div class="ttname"><a href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">armnn::DataLayout::NCDHW</a></div><div class="ttdeci">@ NCDHW</div></div>
<div class="ttc" id="anamespacearmnn_html_a21850e0777395246bfd30d95f8ffdd31"><div class="ttname"><a href="namespacearmnn.html#a21850e0777395246bfd30d95f8ffdd31">armnn::SetClStridedSliceData</a></div><div class="ttdeci">auto SetClStridedSliceData(const std::vector&lt; int &gt; &amp;m_begin, const std::vector&lt; int &gt; &amp;m_end, const std::vector&lt; int &gt; &amp;m_stride)</div><div class="ttdef"><b>Definition:</b> <a href="_cl_workload_utils_8hpp_source.html#l00079">ClWorkloadUtils.hpp:79</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad91bc7bfe29186f5d78c28386c6c5309"><div class="ttname"><a href="namespacearmnn.html#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.html#l00316">TypesUtils.hpp:316</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b"><div class="ttname"><a href="namespacearmnn.html#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_html_a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735"><div class="ttname"><a href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735">armnn::ActivationFunction::LeakyReLu</a></div><div class="ttdeci">@ LeakyReLu</div></div>
<div class="ttc" id="a_lstm_utils_8cpp_html_a0ed27dd6d6125a06bf654080f4184360"><div class="ttname"><a href="_lstm_utils_8cpp.html#a0ed27dd6d6125a06bf654080f4184360">MeanStddevNormalization</a></div><div class="ttdeci">void MeanStddevNormalization(armnn::Decoder&lt; float &gt; &amp;input_vector, armnn::Encoder&lt; float &gt; &amp;output_vector, uint32_t v_size, uint32_t n_batch, float normalization_epsilon)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.html#l00040">LstmUtils.cpp:40</a></div></div>
<div class="ttc" id="a_lstm_utils_8cpp_html_a796323e16216b880043dc5ebbaa2372b"><div class="ttname"><a href="_lstm_utils_8cpp.html#a796323e16216b880043dc5ebbaa2372b">VectorBatchVectorCwiseProductAccumulate</a></div><div class="ttdeci">void VectorBatchVectorCwiseProductAccumulate(armnn::Decoder&lt; float &gt; &amp;vector, uint32_t vSize, armnn::Decoder&lt; float &gt; &amp;batchVector, uint32_t nBatch, armnn::Encoder&lt; float &gt; &amp;outResult)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.html#l00131">LstmUtils.cpp:131</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e"><div class="ttname"><a href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e">armnn::MemorySource::Gralloc</a></div><div class="ttdeci">@ Gralloc</div></div>
<div class="ttc" id="anamespacearmnn_html_ad1d5cce2d9e9a5d61c243e5c989112e0"><div class="ttname"><a href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a></div><div class="ttdeci">DataLayout</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.html#l00062">Types.hpp:62</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad31c56533e4f9f9f51719599fbfcf7bb"><div class="ttname"><a href="namespacearmnn.html#ad31c56533e4f9f9f51719599fbfcf7bb">armnn::InsertConvertFp16ToFp32LayersBefore</a></div><div class="ttdeci">std::vector&lt; ConvertFp16ToFp32Layer * &gt; InsertConvertFp16ToFp32LayersBefore(Graph &amp;graph, Layer &amp;layer, bool expectCorrectInputType)</div><div class="ttdef"><b>Definition:</b> <a href="_network_utils_8cpp_source.html#l00040">NetworkUtils.cpp:40</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling3d_descriptor_html_a56b51f56cef50cdfa554258eecdab046"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.html#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.html#l00479">Descriptors.hpp:479</a></div></div>
<div class="ttc" id="astructarmnn_1_1_space_to_batch_nd_descriptor_html_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_space_to_batch_nd_descriptor.html#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.html#l01071">Descriptors.hpp:1071</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a0fdab6fc39d90c5beea97f4ca0a584c4"><div class="ttname"><a href="namespacearmnn.html#a0fdab6fc39d90c5beea97f4ca0a584c4">armnn::Splitter</a></div><div class="ttdeci">void Splitter(const SplitterQueueDescriptor &amp;data, std::vector&lt; ITensorHandle * &gt; inputs, std::vector&lt; ITensorHandle * &gt; outputs)</div><div class="ttdef"><b>Definition:</b> <a href="_splitter_8hpp_source.html#l00017">Splitter.hpp:17</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a0c8a28b71e49c04596289ff281e58f1a"><div class="ttname"><a href="namespacearmnn.html#a0c8a28b71e49c04596289ff281e58f1a">armnn::Append</a></div><div class="ttdeci">void Append(Optimizer::Optimizations &amp;optimizations, Front &amp;&amp;front, Others &amp;&amp;... others)</div><div class="ttdef"><b>Definition:</b> <a href="_optimizer_8hpp_source.html#l00036">Optimizer.hpp:36</a></div></div>
<div class="ttc" id="anamespacearmnn_html_aec9e2fd5ad76777cb83005a5ed7fe3de"><div class="ttname"><a href="namespacearmnn.html#aec9e2fd5ad76777cb83005a5ed7fe3de">armnn::CollapseLeadingUnitDimensions</a></div><div class="ttdeci">bool CollapseLeadingUnitDimensions(const TensorInfo &amp;in, TensorInfo &amp;out)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_backend_optimization_utils_8hpp_source.html#l00014">NeonBackendOptimizationUtils.hpp:14</a></div></div>
<div class="ttc" id="astructarmnn_1_1_depthwise_convolution2d_descriptor_html_aea202e14d8874cefd9a0f778022b7e25"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.html#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.html#l00708">Descriptors.hpp:708</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling2d_descriptor_html_a5699e8606c37d18c03910b242cd1b010"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.html#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.html#l00417">Descriptors.hpp:417</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a8e72227ebe5ac505cf44790f2e6eb488a87f8a6ab85c9ced3702b4ea641ad4bb5"><div class="ttname"><a href="namespacearmnn.html#a8e72227ebe5ac505cf44790f2e6eb488a87f8a6ab85c9ced3702b4ea641ad4bb5">armnn::QosExecPriority::Medium</a></div><div class="ttdeci">@ Medium</div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_aa31127c77d2117f78d43ca2958dcae19"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#aa31127c77d2117f78d43ca2958dcae19">armnn::optimizations::OptimizeInversePermutes</a></div><div class="ttdeci">OptimizeForConnection&lt; PermuteLayer, PermuteLayer, OptimizeInversePermutesImpl&lt; PermuteLayer &gt; &gt; OptimizeInversePermutes</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_inverse_permutes_8hpp_source.html#l00043">OptimizeInversePermutes.hpp:43</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"><div class="ttname"><a href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a></div><div class="ttdeci">@ NHWC</div></div>
<div class="ttc" id="anamespacearmnn_html_a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef"><div class="ttname"><a href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef">armnn::ActivationFunction::SoftReLu</a></div><div class="ttdeci">@ SoftReLu</div></div>
<div class="ttc" id="anamespacearmnn_html_ae9bdcb8ac91731109dc423d6ed476204"><div class="ttname"><a href="namespacearmnn.html#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.html#l00213">ArmComputeUtils.hpp:213</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a98f54d4391347d517c7a7869e7707203"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a98f54d4391347d517c7a7869e7707203">armnn::optimizations::TransposeAndBatchToSpaceAsDepthToSpace</a></div><div class="ttdeci">OptimizeForConnection&lt; TransposeLayer, BatchToSpaceNdLayer, PermuteAndBatchToSpaceAsDepthToSpaceImpl&lt; TransposeLayer &gt; &gt; TransposeAndBatchToSpaceAsDepthToSpace</div><div class="ttdef"><b>Definition:</b> <a href="_permute_and_batch_to_space_as_depth_to_space_8hpp_source.html#l00104">PermuteAndBatchToSpaceAsDepthToSpace.hpp:104</a></div></div>
<div class="ttc" id="astructarmnn_1_1_convolution3d_descriptor_html_a83ca447892f460dabaa2f87d3dc3db61"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.html#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.html#l00637">Descriptors.hpp:637</a></div></div>
<div class="ttc" id="a_lstm_utils_8cpp_html_a389c4bbafd0fff7060cbb183f20a2134"><div class="ttname"><a href="_lstm_utils_8cpp.html#a389c4bbafd0fff7060cbb183f20a2134">VectorBatchVectorAdd</a></div><div class="ttdeci">void VectorBatchVectorAdd(armnn::Decoder&lt; float &gt; &amp;vector, uint32_t vSize, armnn::Decoder&lt; float &gt; &amp;batchVector, uint32_t nBatch, armnn::Encoder&lt; float &gt; &amp;outResult)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.html#l00016">LstmUtils.cpp:16</a></div></div>
<div class="ttc" id="anamespacearmnn_html_aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650"><div class="ttname"><a href="namespacearmnn.html#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="anamespacearmnn_html_a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754"><div class="ttname"><a href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754">armnn::TuningLevel::None</a></div><div class="ttdeci">@ None</div></div>
<div class="ttc" id="anamespacearmnn_html_ae2e93e304cf516841c521e3eaee025cd"><div class="ttname"><a href="namespacearmnn.html#ae2e93e304cf516841c521e3eaee025cd">armnn::Pooling2d</a></div><div class="ttdeci">void Pooling2d(Decoder&lt; float &gt; &amp;rInputDecoder, Encoder&lt; float &gt; &amp;rOutputEncoder, const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, const Pooling2dDescriptor &amp;params)</div><div class="ttdoc">Computes the Pooling2d operation.</div><div class="ttdef"><b>Definition:</b> <a href="_pooling2d_8cpp_source.html#l00142">Pooling2d.cpp:142</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1"><div class="ttname"><a href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">armnn::LogSeverity::Trace</a></div><div class="ttdeci">@ Trace</div></div>
<div class="ttc" id="anamespacearmnn_html_ab24d74259a053475f6040dd701a01952a0be89c9a624a5de3925150e3cd476245"><div class="ttname"><a href="namespacearmnn.html#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_1_1optimizations_html_a279d0a7c56966cea334303d48a874964"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a279d0a7c56966cea334303d48a874964">armnn::optimizations::FoldPadIntoPooling2d</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; PadLayer, Pooling2dLayer, pad_fold::FoldPadIntoPooling2dImpl &gt; FoldPadIntoPooling2d</div><div class="ttdef"><b>Definition:</b> <a href="_fold_pad_into_layer2d_8hpp_source.html#l00283">FoldPadIntoLayer2d.hpp:283</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64"><div class="ttname"><a href="namespacearmnn.html#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_html_abc968e1323027f9e42cbc7642800d5ce"><div class="ttname"><a href="namespacearmnn.html#abc968e1323027f9e42cbc7642800d5ce">armnn::NeonSubtractionWorkloadValidate</a></div><div class="ttdeci">arm_compute::Status NeonSubtractionWorkloadValidate(const TensorInfo &amp;input0, const TensorInfo &amp;input1, const TensorInfo &amp;output, const ActivationDescriptor *activationDescriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_subtraction_workload_8cpp_source.html#l00022">NeonSubtractionWorkload.cpp:22</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a86d19da62b6cfed3928f6fe7026f22fa"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a86d19da62b6cfed3928f6fe7026f22fa">armnn::optimizations::Fp32NetworkToFp16Converter</a></div><div class="ttdeci">OptimizeForType&lt; Layer, ConvertFp32NetworkToFp16Impl &gt; Fp32NetworkToFp16Converter</div><div class="ttdef"><b>Definition:</b> <a href="_convert_fp32_network_to_fp16_8hpp_source.html#l00087">ConvertFp32NetworkToFp16.hpp:87</a></div></div>
<div class="ttc" id="anamespacearmnn_utils_html_ac93cb1365b4bcb67df2a3164606096c5"><div class="ttname"><a href="namespacearmnn_utils.html#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.html#l00236">TensorUtils.cpp:236</a></div></div>
<div class="ttc" id="astructarmnn_1_1_views_descriptor_html_a0863c05ae66572108c23853f8f003b55"><div class="ttname"><a href="structarmnn_1_1_views_descriptor.html#a0863c05ae66572108c23853f8f003b55">armnn::ViewsDescriptor::HasAxis</a></div><div class="ttdeci">bool HasAxis() const</div><div class="ttdoc">Returns true if an axis has been set.</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.html#l00388">Descriptors.cpp:388</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a19a90c41ca2f46ab29918fef1a6ad72e"><div class="ttname"><a href="namespacearmnn.html#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.html#l00021">TypesUtils.hpp:21</a></div></div>
<div class="ttc" id="anamespacearmnn_html_abfb0841058a8190d30851f07eca3991f"><div class="ttname"><a href="namespacearmnn.html#abfb0841058a8190d30851f07eca3991f">armnn::ConvertAdditionalInfoToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertAdditionalInfoToAclActivationLayerInfo(const QueueDescriptor &amp;queueDescriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.html#l00105">ArmComputeUtils.hpp:105</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ab432cc781460dbb619afabeb88139a15"><div class="ttname"><a href="namespacearmnn.html#ab432cc781460dbb619afabeb88139a15">armnn::IsLayerOptimizable</a></div><div class="ttdeci">bool IsLayerOptimizable(const armnn::Layer &amp;layer)</div><div class="ttdef"><b>Definition:</b> <a href="_mock_backend_8cpp_source.html#l00099">MockBackend.cpp:99</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_tensor_shape_html_a3919600d4aa8d5cd801a0e0740f62308"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.html#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.html#l00211">Tensor.cpp:211</a></div></div>
<div class="ttc" id="a_cl_workload_utils_8hpp_html_a9166fc90a3ea47a2c9499a810b204daf"><div class="ttname"><a href="_cl_workload_utils_8hpp.html#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.html#l00021">ClWorkloadUtils.hpp:21</a></div></div>
<div class="ttc" id="astructarmnn_1_1_depthwise_convolution2d_descriptor_html_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.html#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.html#l00710">Descriptors.hpp:710</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054"><div class="ttname"><a href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">armnn::ActivationFunction::Sqrt</a></div><div class="ttdeci">@ Sqrt</div></div>
<div class="ttc" id="anamespacearmnn_html_ac895f6f6897ce335b7b433201bae0b48"><div class="ttname"><a href="namespacearmnn.html#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.html#l00014">Timer.hpp:14</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975"><div class="ttname"><a href="namespacearmnn.html#a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975">armnn::JsonObjectType::Measurement</a></div><div class="ttdeci">@ Measurement</div></div>
<div class="ttc" id="aclassarmnn_1_1_tensor_info_html"><div class="ttname"><a href="classarmnn_1_1_tensor_info.html">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.html#l00152">Tensor.hpp:152</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a0f37510801ba4f2500e4e9558c81f93c"><div class="ttname"><a href="namespacearmnn.html#a0f37510801ba4f2500e4e9558c81f93c">armnn::CreateProgram</a></div><div class="ttdeci">flatbuffers::Offset&lt; Program &gt; CreateProgram(flatbuffers::FlatBufferBuilder &amp;_fbb, flatbuffers::Offset&lt; flatbuffers::String &gt; name=0, flatbuffers::Offset&lt; flatbuffers::Vector&lt; uint8_t &gt;&gt; binary=0)</div><div class="ttdef"><b>Definition:</b> <a href="_cl_context_schema__generated_8h_source.html#l00118">ClContextSchema_generated.h:118</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a8b394ff60ed829a91f07deac476f3db2"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a8b394ff60ed829a91f07deac476f3db2">armnn::optimizations::FoldPadIntoConvolution2d</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; PadLayer, Convolution2dLayer, pad_fold::FoldPadIntoConvolution2dImpl &gt; FoldPadIntoConvolution2d</div><div class="ttdef"><b>Definition:</b> <a href="_fold_pad_into_layer2d_8hpp_source.html#l00277">FoldPadIntoLayer2d.hpp:277</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a8d2ea79addd8ef64be2ca0dad3408f00"><div class="ttname"><a href="namespacearmnn.html#a8d2ea79addd8ef64be2ca0dad3408f00">armnn::NeonMaximumWorkloadValidate</a></div><div class="ttdeci">arm_compute::Status NeonMaximumWorkloadValidate(const TensorInfo &amp;input0, const TensorInfo &amp;input1, const TensorInfo &amp;output)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_maximum_workload_8cpp_source.html#l00014">NeonMaximumWorkload.cpp:14</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ae8dcbb74cf0c855724f12833a55a5684"><div class="ttname"><a href="namespacearmnn.html#ae8dcbb74cf0c855724f12833a55a5684">armnn::AllocateOutputData</a></div><div class="ttdeci">void AllocateOutputData(unsigned int numOutput, unsigned int numSelected, const std::vector&lt; float &gt; &amp;boxCorners, const std::vector&lt; unsigned int &gt; &amp;outputIndices, const std::vector&lt; unsigned int &gt; &amp;selectedBoxes, const std::vector&lt; unsigned int &gt; &amp;selectedClasses, const std::vector&lt; float &gt; &amp;selectedScores, float *detectionBoxes, float *detectionScores, float *detectionClasses, float *numDetections)</div><div class="ttdef"><b>Definition:</b> <a href="_detection_post_process_8cpp_source.html#l00101">DetectionPostProcess.cpp:101</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a14fcd7f88d11cea0a018269dca5f9277a7f9067c59dd34aca0ad09a7f283ed1f8"><div class="ttname"><a href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277a7f9067c59dd34aca0ad09a7f283ed1f8">armnn::MemorySource::DmaBufProtected</a></div><div class="ttdeci">@ DmaBufProtected</div></div>
<div class="ttc" id="anamespacearmnn_html_ad605d1661fa0d8c7fea651d82fbe11c9ac65d2e51c610dd3853a3c777aa8bfe9d"><div class="ttname"><a href="namespacearmnn.html#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_html_aefc7bff008047b9f763c2cf82c1a0fcb"><div class="ttname"><a href="namespacearmnn.html#aefc7bff008047b9f763c2cf82c1a0fcb">armnn::IsSequenceLayerType</a></div><div class="ttdeci">bool IsSequenceLayerType(Layer &amp;layer, LayerType type)</div><div class="ttdef"><b>Definition:</b> <a href="_subgraph_utils_8hpp_source.html#l00362">SubgraphUtils.hpp:362</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ac4f8557279754ed7b3f749d55b0e3047ae80155eceb940c89e2de63ad05868db2"><div class="ttname"><a href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047ae80155eceb940c89e2de63ad05868db2">armnn::BinaryOperation::Sub</a></div><div class="ttdeci">@ Sub</div></div>
<div class="ttc" id="anamespacearmnn_html_aafe6180ef80d9f334f3a3ba9cc0db35d"><div class="ttname"><a href="namespacearmnn.html#aafe6180ef80d9f334f3a3ba9cc0db35d">armnn::PermuteTensor</a></div><div class="ttdeci">armnn::ConstTensor PermuteTensor(const ConstTensorHandle *tensor, const PermutationVector &amp;permutationVector, void *permuteBuffer)</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.html#l00019">WorkloadUtils.cpp:19</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a81b5ff8545adad19a1c9d4ca076d552c"><div class="ttname"><a href="namespacearmnn.html#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.html#l00233">TypesUtils.hpp:233</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a01d1e745f360ccd0b655214645bcef32"><div class="ttname"><a href="namespacearmnn.html#a01d1e745f360ccd0b655214645bcef32">armnn::SetNeonStridedSliceData</a></div><div class="ttdeci">auto SetNeonStridedSliceData(const std::vector&lt; int &gt; &amp;m_begin, const std::vector&lt; int &gt; &amp;m_end, const std::vector&lt; int &gt; &amp;m_stride)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_workload_utils_8hpp_source.html#l00138">NeonWorkloadUtils.hpp:138</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a4dfbdc8cc90b67e74eccd146d977ff66"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a4dfbdc8cc90b67e74eccd146d977ff66">armnn::optimizations::ConvertConstDequantisationLayersToConstLayers</a></div><div class="ttdeci">OptimizeForConnection&lt; ConstantLayer, DequantizeLayer, ConvertConstDequantisationLayersToConstLayersImpl &gt; ConvertConstDequantisationLayersToConstLayers</div><div class="ttdef"><b>Definition:</b> <a href="_convert_const_dequantisation_layers_to_const_layers_8hpp_source.html#l00173">ConvertConstDequantisationLayersToConstLayers.hpp:173</a></div></div>
<div class="ttc" id="anamespacearmnn_html_adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3"><div class="ttname"><a href="namespacearmnn.html#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">armnn::OutputShapeRounding::Floor</a></div><div class="ttdeci">@ Floor</div></div>
<div class="ttc" id="astructarmnn_1_1_pooling2d_descriptor_html_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.html#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.html#l00421">Descriptors.hpp:421</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_tensor_info_html_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.html#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.html#l00197">Tensor.hpp:197</a></div></div>
<div class="ttc" id="astructarmnn_1_1_batch_to_space_nd_descriptor_html_a02e143524aefddd40b485fcf7dea6696"><div class="ttname"><a href="structarmnn_1_1_batch_to_space_nd_descriptor.html#a02e143524aefddd40b485fcf7dea6696">armnn::BatchToSpaceNdDescriptor::m_BlockShape</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; m_BlockShape</div><div class="ttdoc">Block shape values.</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.html#l00898">Descriptors.hpp:898</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad64b7a275169ba1b1ba2d15679f7e8b1"><div class="ttname"><a href="namespacearmnn.html#ad64b7a275169ba1b1ba2d15679f7e8b1">armnn::Reduce</a></div><div class="ttdeci">void Reduce(const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, Decoder&lt; float &gt; &amp;input, Encoder&lt; float &gt; &amp;output, const std::vector&lt; uint32_t &gt; axis, const ReduceOperation reduceOperation)</div><div class="ttdef"><b>Definition:</b> <a href="_reduce_8cpp_source.html#l00070">Reduce.cpp:70</a></div></div>
<div class="ttc" id="a_exceptions_8hpp_html_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.html#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.html#l00203">Exceptions.hpp:203</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ac9aad76a34137b6359a867b282ea7cfb"><div class="ttname"><a href="namespacearmnn.html#ac9aad76a34137b6359a867b282ea7cfb">armnn::SetLogFilter</a></div><div class="ttdeci">void SetLogFilter(LogSeverity level)</div><div class="ttdef"><b>Definition:</b> <a href="_logging_8cpp_source.html#l00073">Logging.cpp:73</a></div></div>
<div class="ttc" id="aclassarmnn_utils_1_1_data_layout_indexed_html"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.html">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.html#l00017">DataLayoutIndexed.hpp:17</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a5918588fa316cf4c23f1cf02c81ee706"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a5918588fa316cf4c23f1cf02c81ee706">armnn::optimizations::MoveTransposeUp</a></div><div class="ttdeci">OptimizeForConnection&lt; Layer, TransposeLayer, MoveTransposeUpImpl &gt; MoveTransposeUp</div><div class="ttdef"><b>Definition:</b> <a href="_move_transpose_up_8hpp_source.html#l00083">MoveTransposeUp.hpp:83</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a5b05f3b7208ec7cea3338e30057c0bac"><div class="ttname"><a href="namespacearmnn.html#a5b05f3b7208ec7cea3338e30057c0bac">armnn::MemorySourceFlags</a></div><div class="ttdeci">unsigned int MemorySourceFlags</div><div class="ttdef"><b>Definition:</b> <a href="_memory_sources_8hpp_source.html#l00015">MemorySources.hpp:15</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd"><div class="ttname"><a href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">armnn::GraphEvent::LayerAdded</a></div><div class="ttdeci">@ LayerAdded</div></div>
<div class="ttc" id="anamespacearmnn_html_ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204"><div class="ttname"><a href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a></div><div class="ttdeci">@ Float32</div></div>
<div class="ttc" id="anamespacearmnn_html_aeef70b7611ae71e97ab55c75ef72b210"><div class="ttname"><a href="namespacearmnn.html#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.html#l00253">TypesUtils.hpp:253</a></div></div>
<div class="ttc" id="aclassarmnn_utils_1_1_data_layout_indexed_html_a7d8b3d755b6ca8f5533657969efb06c4"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.html#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.html#l00022">DataLayoutIndexed.hpp:22</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e"><div class="ttname"><a href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e">armnn::ActivationFunction::TanH</a></div><div class="ttdeci">@ TanH</div></div>
<div class="ttc" id="a_lstm_utils_8cpp_html_a1d7ad9698b02282a57fdb17b3af745f9"><div class="ttname"><a href="_lstm_utils_8cpp.html#a1d7ad9698b02282a57fdb17b3af745f9">VectorBatchVectorCwiseProduct</a></div><div class="ttdeci">void VectorBatchVectorCwiseProduct(armnn::Decoder&lt; float &gt; &amp;vector, uint32_t vSize, armnn::Decoder&lt; float &gt; &amp;batchVector, uint32_t nBatch, armnn::Encoder&lt; float &gt; &amp;outResult)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.html#l00152">LstmUtils.cpp:152</a></div></div>
<div class="ttc" id="a_lstm_utils_8cpp_html_a117781e8e9b7321722bbdd8ff74b484a"><div class="ttname"><a href="_lstm_utils_8cpp.html#a117781e8e9b7321722bbdd8ff74b484a">ClipVector</a></div><div class="ttdeci">void ClipVector(armnn::Decoder&lt; float &gt; &amp;vector, uint32_t vSize, float absLimit, armnn::Encoder&lt; float &gt; &amp;outResult)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.html#l00229">LstmUtils.cpp:229</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ac52e04c0e349e25bcdaa72c27395ef8f"><div class="ttname"><a href="namespacearmnn.html#ac52e04c0e349e25bcdaa72c27395ef8f">armnn::LogSoftmax</a></div><div class="ttdeci">void LogSoftmax(Decoder&lt; float &gt; &amp;input, Encoder&lt; float &gt; &amp;output, const TensorInfo &amp;inputInfo, const LogSoftmaxDescriptor &amp;descriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_log_softmax_8cpp_source.html#l00027">LogSoftmax.cpp:27</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ab912656f08118f8b81f8261b5e0dc3a9"><div class="ttname"><a href="namespacearmnn.html#ab912656f08118f8b81f8261b5e0dc3a9">armnn::GpuFsaBackendId</a></div><div class="ttdeci">constexpr const char * GpuFsaBackendId()</div><div class="ttdef"><b>Definition:</b> <a href="_gpu_fsa_backend_id_8hpp_source.html#l00010">GpuFsaBackendId.hpp:10</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247"><div class="ttname"><a href="namespacearmnn.html#a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247">armnn::LogicalBinaryOperation::LogicalOr</a></div><div class="ttdeci">@ LogicalOr</div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_abe2f78445ce58bc35eff698bf77f42d0"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#abe2f78445ce58bc35eff698bf77f42d0">armnn::optimizations::BroadcastToOptimizationLayer</a></div><div class="ttdeci">OptimizeForType&lt; BroadcastToLayer, DeleteBroadcastToImpl &gt; BroadcastToOptimizationLayer</div><div class="ttdef"><b>Definition:</b> <a href="_delete_broadcast_to_8hpp_source.html#l00038">DeleteBroadcastTo.hpp:38</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling2d_descriptor_html_a56b51f56cef50cdfa554258eecdab046"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.html#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.html#l00411">Descriptors.hpp:411</a></div></div>
<div class="ttc" id="astructarmnn_1_1_convolution3d_descriptor_html_a56b51f56cef50cdfa554258eecdab046"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.html#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.html#l00633">Descriptors.hpp:633</a></div></div>
<div class="ttc" id="a_deprecated_8hpp_html_ab66a241a0ed3ee89c866e777b035d0ed"><div class="ttname"><a href="_deprecated_8hpp.html#ab66a241a0ed3ee89c866e777b035d0ed">ARMNN_NO_DEPRECATE_WARN_BEGIN</a></div><div class="ttdeci">#define ARMNN_NO_DEPRECATE_WARN_BEGIN</div><div class="ttdef"><b>Definition:</b> <a href="_deprecated_8hpp_source.html#l00033">Deprecated.hpp:33</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76"><div class="ttname"><a href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76">armnn::PoolingAlgorithm::L2</a></div><div class="ttdeci">@ L2</div></div>
<div class="ttc" id="astructarmnn_1_1_space_to_batch_nd_descriptor_html_a02e143524aefddd40b485fcf7dea6696"><div class="ttname"><a href="structarmnn_1_1_space_to_batch_nd_descriptor.html#a02e143524aefddd40b485fcf7dea6696">armnn::SpaceToBatchNdDescriptor::m_BlockShape</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; m_BlockShape</div><div class="ttdoc">Block shape value.</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.html#l01066">Descriptors.hpp:1066</a></div></div>
<div class="ttc" id="a_lstm_utils_8cpp_html_ab93a2c78551c3d3aba8ddcafb792a36d"><div class="ttname"><a href="_lstm_utils_8cpp.html#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a></div><div class="ttdeci">void MatrixBatchVectorMultiplyAccumulate(armnn::Decoder&lt; float &gt; &amp;matrix, uint32_t mRows, uint32_t mCols, armnn::Decoder&lt; float &gt; &amp;vector, uint32_t nBatch, armnn::Encoder&lt; float &gt; &amp;outResult)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.html#l00087">LstmUtils.cpp:87</a></div></div>
<div class="ttc" id="astructarmnn_1_1_convolution3d_descriptor_html_aa3c6a77a963a98ccb8ea7b8fd008a8c1"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.html#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.html#l00647">Descriptors.hpp:647</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a14d24d90ab4ba2956e92e27890ba4c91"><div class="ttname"><a href="namespacearmnn.html#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.html#l00200">Types.hpp:200</a></div></div>
<div class="ttc" id="astructarmnn_1_1_convolution3d_descriptor_html_aa9e49717ebdb741e8c767741647fc618"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.html#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.html#l00635">Descriptors.hpp:635</a></div></div>
<div class="ttc" id="anamespacearmnn_html_abdcd184ed3bd648bb31d385040cafd5d"><div class="ttname"><a href="namespacearmnn.html#abdcd184ed3bd648bb31d385040cafd5d">armnn::MaxNumOfTensorDimensions</a></div><div class="ttdeci">constexpr unsigned int MaxNumOfTensorDimensions</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.html#l00031">Types.hpp:31</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e"><div class="ttname"><a href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a></div><div class="ttdeci">@ QAsymmU8</div></div>
<div class="ttc" id="anamespacearmnn_html_a8e72227ebe5ac505cf44790f2e6eb488a655d20c1ca69519ca647684edbb2db35"><div class="ttname"><a href="namespacearmnn.html#a8e72227ebe5ac505cf44790f2e6eb488a655d20c1ca69519ca647684edbb2db35">armnn::QosExecPriority::High</a></div><div class="ttdeci">@ High</div></div>
<div class="ttc" id="anamespacearmnn_html_a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875"><div class="ttname"><a href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">armnn::LogSeverity::Info</a></div><div class="ttdeci">@ Info</div></div>
<div class="ttc" id="anamespacearmnn_html_a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d"><div class="ttname"><a href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a></div><div class="ttdeci">@ BoundedReLu</div><div class="ttdoc">min(a, max(b, input)) ReLu1 &amp; ReLu6.</div></div>
<div class="ttc" id="astructarmnn_1_1minimum_html"><div class="ttname"><a href="structarmnn_1_1minimum.html">armnn::minimum</a></div><div class="ttdef"><b>Definition:</b> <a href="_minimum_8hpp_source.html#l00012">Minimum.hpp:12</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_ae0b1382e3af141896a46531c50e8863f"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#ae0b1382e3af141896a46531c50e8863f">armnn::optimizations::PermuteAsReshape</a></div><div class="ttdeci">OptimizeForType&lt; PermuteLayer, PermuteAsReshapeImpl &gt; PermuteAsReshape</div><div class="ttdef"><b>Definition:</b> <a href="_permute_as_reshape_8hpp_source.html#l00066">PermuteAsReshape.hpp:66</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db"><div class="ttname"><a href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">armnn::DataType::QSymmS8</a></div><div class="ttdeci">@ QSymmS8</div></div>
<div class="ttc" id="anamespacearmnn_html_a070307e9ee0f7969f7d4320145d1dddb"><div class="ttname"><a href="namespacearmnn.html#a070307e9ee0f7969f7d4320145d1dddb">armnn::ReportWarning</a></div><div class="ttdeci">void ReportWarning(const std::string &amp;warningMessage, Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; warningMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l00774">Network.cpp:774</a></div></div>
<div class="ttc" id="anamespacearmnn_utils_html_af3c74017185773dd61d8ca6662d65d43"><div class="ttname"><a href="namespacearmnn_utils.html#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a></div><div class="ttdeci">void Permute(const armnn::TensorShape &amp;dstShape, const armnn::PermutationVector &amp;mappings, const void *src, void *dst, size_t dataTypeSize)</div><div class="ttdef"><b>Definition:</b> <a href="_permute_8cpp_source.html#l00164">Permute.cpp:164</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a0b49aa352b84d572942185ce72cef751"><div class="ttname"><a href="namespacearmnn.html#a0b49aa352b84d572942185ce72cef751">armnn::Half</a></div><div class="ttdeci">half_float::half Half</div><div class="ttdef"><b>Definition:</b> <a href="_half_8hpp_source.html#l00022">Half.hpp:22</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a855760e957668804d33c0691a802496e"><div class="ttname"><a href="namespacearmnn.html#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.html#l00261">ArmComputeUtils.hpp:261</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling3d_descriptor_html_a5164336f6a1b15be0d434a6bbf7289da"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.html#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.html#l00497">Descriptors.hpp:497</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ac845f99ae84c2fcf016b676769da7c51"><div class="ttname"><a href="namespacearmnn.html#ac845f99ae84c2fcf016b676769da7c51">armnn::CreateClContext</a></div><div class="ttdeci">flatbuffers::Offset&lt; ClContext &gt; CreateClContext(flatbuffers::FlatBufferBuilder &amp;_fbb, flatbuffers::Offset&lt; flatbuffers::Vector&lt; flatbuffers::Offset&lt; armnn::Program &gt;&gt;&gt; programs=0)</div><div class="ttdef"><b>Definition:</b> <a href="_cl_context_schema__generated_8h_source.html#l00057">ClContextSchema_generated.h:57</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ae4b69405416c09ee6878e01d27c9450b"><div class="ttname"><a href="namespacearmnn.html#ae4b69405416c09ee6878e01d27c9450b">armnn::FoldPadLayer</a></div><div class="ttdeci">LayerType * FoldPadLayer(OptimizationViews &amp;optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, PadLayer *padLayer)</div><div class="ttdef"><b>Definition:</b> <a href="_subgraph_utils_8hpp_source.html#l00234">SubgraphUtils.hpp:234</a></div></div>
<div class="ttc" id="anamespacearmnn_utils_html_abeaf4f6785039866fd075f4569ba8e84"><div class="ttname"><a href="namespacearmnn_utils.html#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a></div><div class="ttdeci">armnn::TensorShape Permuted(const armnn::TensorShape &amp;srcShape, const armnn::PermutationVector &amp;mappings)</div><div class="ttdef"><b>Definition:</b> <a href="_permute_8cpp_source.html#l00125">Permute.cpp:125</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a80bf40fafb5d10cd4d2a27c515052e2e"><div class="ttname"><a href="namespacearmnn.html#a80bf40fafb5d10cd4d2a27c515052e2e">armnn::CopyArmComputeClTensorData</a></div><div class="ttdeci">void CopyArmComputeClTensorData(arm_compute::CLTensor &amp;dstTensor, const T *srcData)</div><div class="ttdef"><b>Definition:</b> <a href="_cl_workload_utils_8hpp_source.html#l00064">ClWorkloadUtils.hpp:64</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling2d_descriptor_html_a6d8fb685cc1ff224f25aa127fcf62c86"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.html#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.html#l00415">Descriptors.hpp:415</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ac245fda400649db10eed0dc96c1b5c37"><div class="ttname"><a href="namespacearmnn.html#ac245fda400649db10eed0dc96c1b5c37">armnn::Stack</a></div><div class="ttdeci">void Stack(const StackQueueDescriptor &amp;data, std::vector&lt; std::unique_ptr&lt; Decoder&lt; float &gt;&gt;&gt; &amp;inputs, Encoder&lt; float &gt; &amp;output, const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo)</div><div class="ttdef"><b>Definition:</b> <a href="_stack_8cpp_source.html#l00012">Stack.cpp:12</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd"><div class="ttname"><a href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd">armnn::UnaryOperation::Neg</a></div><div class="ttdeci">@ Neg</div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a17d1279f5f8e3b92c328b1ed3b6fd549"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a17d1279f5f8e3b92c328b1ed3b6fd549">armnn::optimizations::PermuteAndBatchToSpaceAsDepthToSpace</a></div><div class="ttdeci">OptimizeForConnection&lt; PermuteLayer, BatchToSpaceNdLayer, PermuteAndBatchToSpaceAsDepthToSpaceImpl&lt; PermuteLayer &gt; &gt; PermuteAndBatchToSpaceAsDepthToSpace</div><div class="ttdef"><b>Definition:</b> <a href="_permute_and_batch_to_space_as_depth_to_space_8hpp_source.html#l00102">PermuteAndBatchToSpaceAsDepthToSpace.hpp:102</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ae97f6a405add803682188eecea9b021d"><div class="ttname"><a href="namespacearmnn.html#ae97f6a405add803682188eecea9b021d">armnn::BatchToSpaceNd</a></div><div class="ttdeci">void BatchToSpaceNd(const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, const BatchToSpaceNdDescriptor &amp;params, Decoder&lt; float &gt; &amp;inputData, Encoder&lt; float &gt; &amp;outputData)</div><div class="ttdef"><b>Definition:</b> <a href="_batch_to_space_nd_8cpp_source.html#l00050">BatchToSpaceNd.cpp:50</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling3d_descriptor_html_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.html#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.html#l00503">Descriptors.hpp:503</a></div></div>
<div class="ttc" id="anamespacearmnn_html_aa093207ea7c4e7a9c9abe40d2f57995b"><div class="ttname"><a href="namespacearmnn.html#aa093207ea7c4e7a9c9abe40d2f57995b">armnn::GetActivationFunctionAsCString</a></div><div class="ttdeci">constexpr char const * GetActivationFunctionAsCString(ActivationFunction activation)</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.html#l00031">TypesUtils.hpp:31</a></div></div>
<div class="ttc" id="astructarmnn_1_1_batch_to_space_nd_descriptor_html_a3941f674c071c9503e00d2b59e92e454"><div class="ttname"><a href="structarmnn_1_1_batch_to_space_nd_descriptor.html#a3941f674c071c9503e00d2b59e92e454">armnn::BatchToSpaceNdDescriptor::m_Crops</a></div><div class="ttdeci">std::vector&lt; std::pair&lt; unsigned int, unsigned int &gt; &gt; m_Crops</div><div class="ttdoc">The values to crop from the input dimension.</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.html#l00900">Descriptors.hpp:900</a></div></div>
<div class="ttc" id="a_lstm_utils_8cpp_html_a00d8a623c04f1120f6fee3fe38d1cee9"><div class="ttname"><a href="_lstm_utils_8cpp.html#a00d8a623c04f1120f6fee3fe38d1cee9">CopyVector</a></div><div class="ttdeci">void CopyVector(armnn::Decoder&lt; float &gt; &amp;vector, uint32_t vSize, armnn::Encoder&lt; float &gt; &amp;outResult)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.html#l00244">LstmUtils.cpp:244</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a58a79c101b088880733afee089a1ec7f"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a58a79c101b088880733afee089a1ec7f">armnn::optimizations::PermuteDepthwiseConv2dWeights</a></div><div class="ttdeci">OptimizeForType&lt; Layer, PermuteDepthwiseConv2dWeightsImpl &gt; PermuteDepthwiseConv2dWeights</div><div class="ttdef"><b>Definition:</b> <a href="_permute_depthwise_conv2d_weights_8hpp_source.html#l00078">PermuteDepthwiseConv2dWeights.hpp:78</a></div></div>
<div class="ttc" id="anamespacearmnn_html_acbf7c9a630f03ece800f807d946239ab"><div class="ttname"><a href="namespacearmnn.html#acbf7c9a630f03ece800f807d946239ab">armnn::SelectTensorHandleStrategy</a></div><div class="ttdeci">OptimizationResult SelectTensorHandleStrategy(Graph &amp;optGraph, BackendsMap &amp;backends, TensorHandleFactoryRegistry &amp;registry, bool importEnabled, bool exportEnabled, Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01821">Network.cpp:1821</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ab6b4f5f3473b0ce4b241d454f8cbdd26"><div class="ttname"><a href="namespacearmnn.html#ab6b4f5f3473b0ce4b241d454f8cbdd26">armnn::IsNCHW</a></div><div class="ttdeci">bool IsNCHW(armnn::Layer &amp;layer)</div><div class="ttdef"><b>Definition:</b> <a href="_subgraph_utils_8hpp_source.html#l00213">SubgraphUtils.hpp:213</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282"><div class="ttname"><a href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">armnn::BoostLogSeverityMapping::error</a></div><div class="ttdeci">@ error</div></div>
<div class="ttc" id="astructarmnn_1_1_pooling3d_descriptor_html_aa9e49717ebdb741e8c767741647fc618"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.html#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.html#l00481">Descriptors.hpp:481</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ac6e86c1def7f674d3c4cb7f577874aa6"><div class="ttname"><a href="namespacearmnn.html#ac6e86c1def7f674d3c4cb7f577874aa6">armnn::Coordinates</a></div><div class="ttdeci">std::array&lt; unsigned int, MaxNumOfTensorDimensions &gt; Coordinates</div><div class="ttdef"><b>Definition:</b> <a href="_internal_types_8hpp_source.html#l00015">InternalTypes.hpp:15</a></div></div>
<div class="ttc" id="a_lstm_utils_8cpp_html_aca7bd1dff180b6a5de894537f8220793"><div class="ttname"><a href="_lstm_utils_8cpp.html#aca7bd1dff180b6a5de894537f8220793">Sub1Vector</a></div><div class="ttdeci">void Sub1Vector(armnn::Decoder&lt; float &gt; &amp;vector, uint32_t vSize, armnn::Encoder&lt; float &gt; &amp;result)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.html#l00173">LstmUtils.cpp:173</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_tensor_info_html_a945263e85c27f3216a8323cfc16d8919"><div class="ttname"><a href="classarmnn_1_1_tensor_info.html#a945263e85c27f3216a8323cfc16d8919">armnn::TensorInfo::IsConstant</a></div><div class="ttdeci">bool IsConstant() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.html#l00513">Tensor.cpp:513</a></div></div>
<div class="ttc" id="anamespacearmnn_html_abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d"><div class="ttname"><a href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">armnn::ReduceOperation::Mean</a></div><div class="ttdeci">@ Mean</div></div>
<div class="ttc" id="anamespacearmnn_html_a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186"><div class="ttname"><a href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186">armnn::ActivationFunction::HardSwish</a></div><div class="ttdeci">@ HardSwish</div></div>
<div class="ttc" id="anamespacearmnn_html_ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7"><div class="ttname"><a href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a></div><div class="ttdeci">@ QSymmS16</div></div>
<div class="ttc" id="anamespacearmnn_html_a56297e0f7b215eea46c818cb7528d9eaaf48cca1c6deaa6a1c34e4ee46954cf0b"><div class="ttname"><a href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaf48cca1c6deaa6a1c34e4ee46954cf0b">armnn::ActivationFunction::Gelu</a></div><div class="ttdeci">@ Gelu</div></div>
<div class="ttc" id="anamespacearmnn_html_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.html#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.html#l00035">NumericCast.hpp:35</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4a699bcffd93aff3022014b9efc9eaefd1"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a699bcffd93aff3022014b9efc9eaefd1">armnn::LayerType::ElementwiseBinary</a></div><div class="ttdeci">@ ElementwiseBinary</div></div>
<div class="ttc" id="anamespacearmnn_html_ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af"><div class="ttname"><a href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a></div><div class="ttdeci">@ BFloat16</div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_aafc70d5af99400ff5ea7991825658b2f"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#aafc70d5af99400ff5ea7991825658b2f">armnn::optimizations::MovePermuteUp</a></div><div class="ttdeci">OptimizeForConnection&lt; Layer, PermuteLayer, MovePermuteUpImpl &gt; MovePermuteUp</div><div class="ttdef"><b>Definition:</b> <a href="_move_permute_up_8hpp_source.html#l00083">MovePermuteUp.hpp:83</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a435f9350a94adfbb0d5b9abb5f430914"><div class="ttname"><a href="namespacearmnn.html#a435f9350a94adfbb0d5b9abb5f430914">armnn::FullyConnected</a></div><div class="ttdeci">void FullyConnected(const TensorShape &amp;rInputShape, Decoder&lt; float &gt; &amp;rInputDecoder, const TensorShape &amp;rOutputShape, Encoder&lt; float &gt; &amp;rOutputEncoder, const TensorShape &amp;rWeightsShape, Decoder&lt; float &gt; &amp;rWeightDecoder, Decoder&lt; float &gt; *pBiasDecoder, const bool biasEnabled, const unsigned int K, const bool transposeWeights)</div><div class="ttdoc">Performs a matrix multiplication and optionally adds a bias.</div><div class="ttdef"><b>Definition:</b> <a href="_fully_connected_8cpp_source.html#l00013">FullyConnected.cpp:13</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling3d_descriptor_html_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.html#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.html#l00495">Descriptors.hpp:495</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a1a9d718b48612b5817a3c369f9fd71ee"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a1a9d718b48612b5817a3c369f9fd71ee">armnn::optimizations::OptimizeInverseConversionsFp16</a></div><div class="ttdeci">OptimizeForConnection&lt; ConvertFp16ToFp32Layer, ConvertFp32ToFp16Layer, OptimizeInverseConversionsImpl &gt; OptimizeInverseConversionsFp16</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_inverse_conversions_8hpp_source.html#l00042">OptimizeInverseConversions.hpp:42</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a69acbef24cd1cc572b93fc3e1e6ac030"><div class="ttname"><a href="namespacearmnn.html#a69acbef24cd1cc572b93fc3e1e6ac030">armnn::Pooling3d</a></div><div class="ttdeci">void Pooling3d(Decoder&lt; float &gt; &amp;rInputDecoder, Encoder&lt; float &gt; &amp;rOutputEncoder, const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, const Pooling3dDescriptor &amp;params)</div><div class="ttdoc">Computes the Pooling3d operation.</div><div class="ttdef"><b>Definition:</b> <a href="_pooling3d_8cpp_source.html#l00172">Pooling3d.cpp:172</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_layer_html_a7ddf0cf6f620d59c10e63495ace795d0"><div class="ttname"><a href="classarmnn_1_1_layer.html#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.html#l00332">Layer.hpp:332</a></div></div>
<div class="ttc" id="anamespacearmnn_html_abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc"><div class="ttname"><a href="namespacearmnn.html#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">armnn::NormalizationAlgorithmChannel::Across</a></div><div class="ttdeci">@ Across</div></div>
<div class="ttc" id="anamespacearmnn_html_ab672391d036102ab6864bb181d4844d5"><div class="ttname"><a href="namespacearmnn.html#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.html#l00148">ClContextSchema_generated.h:148</a></div></div>
<div class="ttc" id="anamespacearmnn_html_adafb0fd0a3f6435c2bdf41f971761ecf"><div class="ttname"><a href="namespacearmnn.html#adafb0fd0a3f6435c2bdf41f971761ecf">armnn::GetOffset</a></div><div class="ttdeci">unsigned int GetOffset(const TensorShape &amp;shape, unsigned int b, unsigned int h, unsigned int w, unsigned int c, const DataLayoutIndexed &amp;dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="_space_to_batch_nd_8cpp_source.html#l00015">SpaceToBatchNd.cpp:15</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ae91e1849e95350c8e50912a217999eac"><div class="ttname"><a href="namespacearmnn.html#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.html#l00036">MemorySources.hpp:36</a></div></div>
<div class="ttc" id="aclassarmnn_utils_1_1_data_layout_indexed_html_a61c00316c443adc233c24e85c6c5b740"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.html#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.html#l00024">DataLayoutIndexed.hpp:24</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96"><div class="ttname"><a href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96">armnn::ComparisonOperation::NotEqual</a></div><div class="ttdeci">@ NotEqual</div></div>
<div class="ttc" id="anamespacearmnn_html_ae2f04a162585c0a5222a537efd5456ae"><div class="ttname"><a href="namespacearmnn.html#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.html#l00021">BackendId.hpp:21</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937"><div class="ttname"><a href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937">armnn::ComparisonOperation::GreaterOrEqual</a></div><div class="ttdeci">@ GreaterOrEqual</div></div>
<div class="ttc" id="anamespacearmnn_html_a52d63dc326ef2e2d373217b84ac4a402a6708d958187e663fd689cdad2b55b818"><div class="ttname"><a href="namespacearmnn.html#a52d63dc326ef2e2d373217b84ac4a402a6708d958187e663fd689cdad2b55b818">armnn::FusedKernelType::AddMulAdd</a></div><div class="ttdeci">@ AddMulAdd</div></div>
<div class="ttc" id="anamespacearmnn_utils_html_a1826e433f7e6817976a8175b4ef8296c"><div class="ttname"><a href="namespacearmnn_utils.html#a1826e433f7e6817976a8175b4ef8296c">armnnUtils::GetPerAxisParams</a></div><div class="ttdeci">std::pair&lt; unsigned int, std::vector&lt; float &gt; &gt; GetPerAxisParams(const armnn::TensorInfo &amp;info)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.html#l00280">TensorUtils.cpp:280</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd"><div class="ttname"><a href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">armnn::LogSeverity::Error</a></div><div class="ttdeci">@ Error</div></div>
<div class="ttc" id="aclassarmnn_1_1_exception_html_abf843cbb29dec939d0731e491bab6f70"><div class="ttname"><a href="classarmnn_1_1_exception.html#abf843cbb29dec939d0731e491bab6f70">armnn::Exception::what</a></div><div class="ttdeci">virtual const char * what() const noexcept override</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8cpp_source.html#l00032">Exceptions.cpp:32</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a8e72227ebe5ac505cf44790f2e6eb488a28d0edd045e05cf5af64e35ae0c4c6ef"><div class="ttname"><a href="namespacearmnn.html#a8e72227ebe5ac505cf44790f2e6eb488a28d0edd045e05cf5af64e35ae0c4c6ef">armnn::QosExecPriority::Low</a></div><div class="ttdeci">@ Low</div></div>
<div class="ttc" id="astructarmnn_1_1_optimization_result_html_a955b65059e7f9429a5d6041136bc1487"><div class="ttname"><a href="structarmnn_1_1_optimization_result.html#a955b65059e7f9429a5d6041136bc1487">armnn::OptimizationResult::IsOk</a></div><div class="ttdeci">bool IsOk() const</div><div class="ttdef"><b>Definition:</b> <a href="_network_8hpp_source.html#l00276">Network.hpp:276</a></div></div>
<div class="ttc" id="a_logging_8hpp_html_a7b6ad073975f437ec38ca7d20154727f"><div class="ttname"><a href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a></div><div class="ttdeci">#define ARMNN_LOG(severity)</div><div class="ttdef"><b>Definition:</b> <a href="_logging_8hpp_source.html#l00212">Logging.hpp:212</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef"><div class="ttname"><a href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">armnn::DataLayout::NDHWC</a></div><div class="ttdeci">@ NDHWC</div></div>
<div class="ttc" id="anamespacearmnn_html_aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852"><div class="ttname"><a href="namespacearmnn.html#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_html_a88bebdfe6309aa2cd6831cfa73c296f0"><div class="ttname"><a href="namespacearmnn.html#a88bebdfe6309aa2cd6831cfa73c296f0">armnn::Fill</a></div><div class="ttdeci">void Fill(Encoder&lt; float &gt; &amp;output, const TensorShape &amp;desiredOutputShape, const float value)</div><div class="ttdoc">Creates a tensor and fills it with a scalar value.</div><div class="ttdef"><b>Definition:</b> <a href="_fill_8cpp_source.html#l00013">Fill.cpp:13</a></div></div>
<div class="ttc" id="astructarmnn_1_1_views_descriptor_html_a3c1ab47a0a319413b3a4b5757ed5b80b"><div class="ttname"><a href="structarmnn_1_1_views_descriptor.html#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.html#l00347">Descriptors.cpp:347</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a2a0bcfb4df0a03357b4cbb8d9e89a3da"><div class="ttname"><a href="namespacearmnn.html#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.html#l00064">LayerSupportRules.hpp:64</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling3d_descriptor_html_a0031997bf43bd2747656c31e4977793a"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.html#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.html#l00473">Descriptors.hpp:473</a></div></div>
<div class="ttc" id="a_utils_gpu_fsa_8cpp_html_a5226333a123be03ae6c3609921886a07"><div class="ttname"><a href="_utils_gpu_fsa_8cpp.html#a5226333a123be03ae6c3609921886a07">CreateResizeAttributes</a></div><div class="ttdeci">arm_compute::experimental::dynamic_fusion::ResizeAttributes CreateResizeAttributes(const armnn::ResizeDescriptor &amp;descriptor)</div><div class="ttdoc">Utility function used to setup an arm_compute::ResizeDescriptor object from given descriptor.</div><div class="ttdef"><b>Definition:</b> <a href="_utils_gpu_fsa_8cpp_source.html#l00064">UtilsGpuFsa.cpp:64</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a1ec6b4c20ed294a96cf94c33c24caaf5"><div class="ttname"><a href="namespacearmnn.html#a1ec6b4c20ed294a96cf94c33c24caaf5">armnn::CreateSupportedBackends</a></div><div class="ttdeci">BackendsMap CreateSupportedBackends(TensorHandleFactoryRegistry &amp;handleFactoryRegistry, BackendSettings &amp;backendSettings)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01302">Network.cpp:1302</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a4c42dfd9db4a47e470b5800bb11a8374"><div class="ttname"><a href="namespacearmnn.html#a4c42dfd9db4a47e470b5800bb11a8374">armnn::ClReduceWorkloadValidate</a></div><div class="ttdeci">arm_compute::Status ClReduceWorkloadValidate(const TensorInfo &amp;input, const TensorInfo &amp;output, const ReduceDescriptor &amp;descriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_cl_reduce_workload_8cpp_source.html#l00018">ClReduceWorkload.cpp:18</a></div></div>
<div class="ttc" id="astructarmnn_1_1_space_to_batch_nd_descriptor_html_a85f98c94e11f65a6b73f831735c040f3"><div class="ttname"><a href="structarmnn_1_1_space_to_batch_nd_descriptor.html#a85f98c94e11f65a6b73f831735c040f3">armnn::SpaceToBatchNdDescriptor::m_PadList</a></div><div class="ttdeci">std::vector&lt; std::pair&lt; unsigned int, unsigned int &gt; &gt; m_PadList</div><div class="ttdoc">Specifies the padding values for the input dimension: heightPad{top, bottom} widthPad{left,...</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.html#l01069">Descriptors.hpp:1069</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_tensor_shape_html"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.html">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.html#l00020">Tensor.hpp:20</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a8caac207d532c38c3909d40c742d8c3f"><div class="ttname"><a href="namespacearmnn.html#a8caac207d532c38c3909d40c742d8c3f">armnn::ReverseV2</a></div><div class="ttdeci">void ReverseV2(const TensorInfo &amp;inputInfo, const TensorInfo &amp;axisInfo, Decoder&lt; float &gt; &amp;inputDecoder, Decoder&lt; int &gt; &amp;axisDecoder, Encoder&lt; float &gt; &amp;outputEncoder)</div><div class="ttdef"><b>Definition:</b> <a href="_reverse_v2_impl_8cpp_source.html#l00078">ReverseV2Impl.cpp:78</a></div></div>
<div class="ttc" id="astructarmnn_1_1_convolution3d_descriptor_html_a002bc30e590d78cbb4f4d12171055ca7"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.html#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.html#l00631">Descriptors.hpp:631</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a03ab984d93d0f240f31274499b72e6b0"><div class="ttname"><a href="namespacearmnn.html#a03ab984d93d0f240f31274499b72e6b0">armnn::ConvertReductionOperationToAcl</a></div><div class="ttdeci">arm_compute::ReductionOperation ConvertReductionOperationToAcl(const ReduceDescriptor &amp;descriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.html#l00306">ArmComputeUtils.hpp:306</a></div></div>
<div class="ttc" id="anamespacearmnn_html_aceb6d218204c4e0e7b4c968d6266917c"><div class="ttname"><a href="namespacearmnn.html#aceb6d218204c4e0e7b4c968d6266917c">armnn::NeonReduceWorkloadValidate</a></div><div class="ttdeci">arm_compute::Status NeonReduceWorkloadValidate(const TensorInfo &amp;input, const TensorInfo &amp;output, const ReduceDescriptor &amp;descriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_reduce_workload_8cpp_source.html#l00019">NeonReduceWorkload.cpp:19</a></div></div>
<div class="ttc" id="anamespacearmnn_html_abf6aad7bc221f8ad22b4d99cd020373b"><div class="ttname"><a href="namespacearmnn.html#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.html#l00029">DetectionPostProcess.cpp:29</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_backend_options_1_1_var_html_aba7f9d096eda6d34bc0c668ee44dd665"><div class="ttname"><a href="classarmnn_1_1_backend_options_1_1_var.html#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.html#l00113">BackendOptions.hpp:113</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ac4f8557279754ed7b3f749d55b0e3047a8321e79c278ec510f63675c040594892"><div class="ttname"><a href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a8321e79c278ec510f63675c040594892">armnn::BinaryOperation::Maximum</a></div><div class="ttdeci">@ Maximum</div></div>
<div class="ttc" id="anamespacearmnn_html_a4dc0adc6737b5944e7671bee71788407a04a75036e9d520bb983c5ed03b8d0182"><div class="ttname"><a href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407a04a75036e9d520bb983c5ed03b8d0182">armnn::BoostLogSeverityMapping::trace</a></div><div class="ttdeci">@ trace</div></div>
<div class="ttc" id="a_utils_gpu_fsa_8cpp_html_a9dca3adcd3c40a295f4055518b071dd5"><div class="ttname"><a href="_utils_gpu_fsa_8cpp.html#a9dca3adcd3c40a295f4055518b071dd5">CreatePool2dAttributes</a></div><div class="ttdeci">arm_compute::experimental::dynamic_fusion::Pool2dAttributes CreatePool2dAttributes(const Pooling2dDescriptor &amp;descriptor)</div><div class="ttdoc">Utility function used to setup an arm_compute::Pool2dAttributes object from given descriptor.</div><div class="ttdef"><b>Definition:</b> <a href="_utils_gpu_fsa_8cpp_source.html#l00045">UtilsGpuFsa.cpp:45</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55"><div class="ttname"><a href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a></div><div class="ttdeci">@ Float16</div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a226cef3d775179e25ee35d231f4e8fae"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a226cef3d775179e25ee35d231f4e8fae">armnn::optimizations::ConvertConstantsFloatToHalf</a></div><div class="ttdeci">ConvertConstants&lt; Float32ToFloat16, IsFloat16Layer &gt; ConvertConstantsFloatToHalf</div><div class="ttdef"><b>Definition:</b> <a href="_convert_constants_8hpp_source.html#l00099">ConvertConstants.hpp:99</a></div></div>
<div class="ttc" id="a_polymorphic_downcast_8hpp_html_a816fdb1ce84860c918a1915b3ea23459"><div class="ttname"><a href="_polymorphic_downcast_8hpp.html#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.html#l00027">PolymorphicDowncast.hpp:27</a></div></div>
<div class="ttc" id="anamespacearmnn_html_abd660675ae5a9df777dcdb30c50224f6"><div class="ttname"><a href="namespacearmnn.html#abd660675ae5a9df777dcdb30c50224f6">armnn::AttemptBackendAssignment</a></div><div class="ttdeci">OptimizationResult AttemptBackendAssignment(BackendSettings &amp;backendSettings, Graph &amp;graph, Layer *layer, BackendId backend, DataType dataTypeIn, DataType dataTypeOut, const std::vector&lt; BackendId &gt; &amp;availablePreferredBackends, std::string &amp;reasonIfUnsupported, Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l00844">Network.cpp:844</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling3d_descriptor_html_a6d8fb685cc1ff224f25aa127fcf62c86"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.html#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.html#l00487">Descriptors.hpp:487</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ac4f8557279754ed7b3f749d55b0e3047a2d17ea57d7f86acde5c60cef8e123a53"><div class="ttname"><a href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a2d17ea57d7f86acde5c60cef8e123a53">armnn::BinaryOperation::SqDiff</a></div><div class="ttdeci">@ SqDiff</div></div>
<div class="ttc" id="astructarmnn_1_1_pooling2d_descriptor_html_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.html#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.html#l00427">Descriptors.hpp:427</a></div></div>
<div class="ttc" id="astructarmnn_1_1_queue_descriptor_with_parameters_html_aad91b9bbf7aa365d304febe79a3d1333"><div class="ttname"><a href="structarmnn_1_1_queue_descriptor_with_parameters.html#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.html#l00066">WorkloadData.hpp:66</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4"><div class="ttname"><a href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4">armnn::UnaryOperation::Rsqrt</a></div><div class="ttdeci">@ Rsqrt</div></div>
<div class="ttc" id="anamespacearmnn_html_a65c912bfcf02b3096f36caf21fa175d0"><div class="ttname"><a href="namespacearmnn.html#a65c912bfcf02b3096f36caf21fa175d0">armnn::NeonDivisionWorkloadValidate</a></div><div class="ttdeci">arm_compute::Status NeonDivisionWorkloadValidate(const TensorInfo &amp;input0, const TensorInfo &amp;input1, const TensorInfo &amp;output, const ActivationDescriptor *activationDescriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_division_workload_8cpp_source.html#l00018">NeonDivisionWorkload.cpp:18</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_tensor_shape_html_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.html#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.html#l00174">Tensor.cpp:174</a></div></div>
<div class="ttc" id="astructarmnn_1_1_depthwise_convolution2d_descriptor_html_a302b688d88dd73cde0fb1faef6679907"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.html#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.html#l00706">Descriptors.hpp:706</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b"><div class="ttname"><a href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b">armnn::ComparisonOperation::Less</a></div><div class="ttdeci">@ Less</div></div>
<div class="ttc" id="a_utils_gpu_fsa_8cpp_html_a6fb30c0d325066e78619d5e5a5611973"><div class="ttname"><a href="_utils_gpu_fsa_8cpp.html#a6fb30c0d325066e78619d5e5a5611973">CreateConv2dAttributes</a></div><div class="ttdeci">Conv2dAttributes CreateConv2dAttributes(const Convolution2dDescriptor &amp;descriptor)</div><div class="ttdoc">Utility function used to setup an arm_compute::Conv2dAttributes object from given descriptor.</div><div class="ttdef"><b>Definition:</b> <a href="_utils_gpu_fsa_8cpp_source.html#l00014">UtilsGpuFsa.cpp:14</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc"><div class="ttname"><a href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc">armnn::UnaryOperation::LogicalNot</a></div><div class="ttdeci">@ LogicalNot</div></div>
<div class="ttc" id="astructarmnn_1_1_pooling2d_descriptor_html_aa9e49717ebdb741e8c767741647fc618"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.html#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.html#l00413">Descriptors.hpp:413</a></div></div>
<div class="ttc" id="anamespacearmnn_html_afce94270d9c4a51cd0c4ac6a58af4e26"><div class="ttname"><a href="namespacearmnn.html#afce94270d9c4a51cd0c4ac6a58af4e26">armnn::ForEachLayerInput</a></div><div class="ttdeci">void ForEachLayerInput(LayerSelectionInfo::LayerInfoContainer &amp;layerInfos, LayerSelectionInfo &amp;layerInfo, Delegate function)</div><div class="ttdef"><b>Definition:</b> <a href="_subgraph_view_selector_8cpp_source.html#l00277">SubgraphViewSelector.cpp:277</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a044ea0cc993d4d1fbe4ec877b17b8d39"><div class="ttname"><a href="namespacearmnn.html#a044ea0cc993d4d1fbe4ec877b17b8d39">armnn::Slice</a></div><div class="ttdeci">void Slice(const TensorInfo &amp;inputInfo, const SliceDescriptor &amp;descriptor, const void *inputData, void *outputData, unsigned int dataTypeSize)</div><div class="ttdef"><b>Definition:</b> <a href="_slice_8cpp_source.html#l00014">Slice.cpp:14</a></div></div>
<div class="ttc" id="astructarmnn_1_1_views_descriptor_html_a109d4dc452ce677b1e0791cb2a6b781e"><div class="ttname"><a href="structarmnn_1_1_views_descriptor.html#a109d4dc452ce677b1e0791cb2a6b781e">armnn::ViewsDescriptor::GetAxis</a></div><div class="ttdeci">int32_t GetAxis() const</div><div class="ttdoc">Get the axis value.</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.html#l00382">Descriptors.cpp:382</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling3d_descriptor_html_a8c29d6ea9b4186d69aad5961c910939c"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.html#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.html#l00501">Descriptors.hpp:501</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling2d_descriptor_html_a002bc30e590d78cbb4f4d12171055ca7"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.html#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.html#l00409">Descriptors.hpp:409</a></div></div>
<div class="ttc" id="a_utils_gpu_fsa_8cpp_html_a54d1f7200479dad24822853a1e1da500"><div class="ttname"><a href="_utils_gpu_fsa_8cpp.html#a54d1f7200479dad24822853a1e1da500">CreateDWConv2dAttributes</a></div><div class="ttdeci">arm_compute::experimental::dynamic_fusion::DepthwiseConv2dAttributes CreateDWConv2dAttributes(const DepthwiseConvolution2dDescriptor &amp;descriptor, const unsigned int aclDepthMultiplier)</div><div class="ttdoc">Utility function used to setup an arm_compute::DepthwiseConv2dAttributes object from given descriptor...</div><div class="ttdef"><b>Definition:</b> <a href="_utils_gpu_fsa_8cpp_source.html#l00029">UtilsGpuFsa.cpp:29</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a947e07902b1b5d98b57eeae34053146b"><div class="ttname"><a href="namespacearmnn.html#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.html#l00012">MockTensorHandleFactory.cpp:12</a></div></div>
<div class="ttc" id="a_exceptions_8hpp_html_a31e4268013316d114e8927e4c0035ec5"><div class="ttname"><a href="_exceptions_8hpp.html#a31e4268013316d114e8927e4c0035ec5">ARMNN_THROW_INVALIDARG_IF_FALSE</a></div><div class="ttdeci">#define ARMNN_THROW_INVALIDARG_IF_FALSE(_cond)</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.html#l00212">Exceptions.hpp:212</a></div></div>
<div class="ttc" id="anamespacearmnn_html_abf625e50a5eaeafce5b39580dc95a9d3"><div class="ttname"><a href="namespacearmnn.html#abf625e50a5eaeafce5b39580dc95a9d3">armnn::InsertConvertFp32ToFp16LayersAfter</a></div><div class="ttdeci">std::vector&lt; ConvertFp32ToFp16Layer * &gt; InsertConvertFp32ToFp16LayersAfter(Graph &amp;graph, Layer &amp;layer)</div><div class="ttdef"><b>Definition:</b> <a href="_network_utils_8cpp_source.html#l00079">NetworkUtils.cpp:79</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a8a0d9d6566aa1e098f6988b2ee98bf00"><div class="ttname"><a href="namespacearmnn.html#a8a0d9d6566aa1e098f6988b2ee98bf00">armnn::ReverseRelocateIdx</a></div><div class="ttdeci">unsigned int ReverseRelocateIdx(unsigned int idx, unsigned int inputRank, std::vector&lt; bool &gt; &amp;axisFlag, std::vector&lt; unsigned int &gt; &amp;dimSize, std::vector&lt; unsigned int &gt; &amp;elementNumInner)</div><div class="ttdef"><b>Definition:</b> <a href="_reverse_v2_impl_8cpp_source.html#l00049">ReverseV2Impl.cpp:49</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0"><div class="ttname"><a href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0">armnn::UnaryOperation::Exp</a></div><div class="ttdeci">@ Exp</div></div>
<div class="ttc" id="a_profiling_8hpp_html_a5ccc65e2c464ac05ce311fdae7ede03a"><div class="ttname"><a href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a></div><div class="ttdeci">#define ARMNN_SCOPED_PROFILING_EVENT(backendId, name)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_8hpp_source.html#l00220">Profiling.hpp:220</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_backend_options_1_1_var_html_a7c412f98489e7d252ef40ed053a3908c"><div class="ttname"><a href="classarmnn_1_1_backend_options_1_1_var.html#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.html#l00116">BackendOptions.hpp:116</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad441be836a142e8935e0413f4a22c9ec"><div class="ttname"><a href="namespacearmnn.html#ad441be836a142e8935e0413f4a22c9ec">armnn::ArgMinMax</a></div><div class="ttdeci">void ArgMinMax(Decoder&lt; float &gt; &amp;in, OUT *out, const TensorInfo &amp;inputTensorInfo, const TensorInfo &amp;outputTensorInfo, ArgMinMaxFunction function, int axis)</div><div class="ttdef"><b>Definition:</b> <a href="_arg_min_max_8cpp_source.html#l00017">ArgMinMax.cpp:17</a></div></div>
<div class="ttc" id="astructarmnn_1_1_convolution3d_descriptor_html_a16543bce17aa2e4d6e81c88f74227192"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.html#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.html#l00651">Descriptors.hpp:651</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a14fcd7f88d11cea0a018269dca5f9277a966e13d8aabbff3966a5cd28d67b4846"><div class="ttname"><a href="namespacearmnn.html#a14fcd7f88d11cea0a018269dca5f9277a966e13d8aabbff3966a5cd28d67b4846">armnn::MemorySource::DmaBuf</a></div><div class="ttdeci">@ DmaBuf</div></div>
<div class="ttc" id="anamespacearmnn_html_a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6"><div class="ttname"><a href="namespacearmnn.html#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="astructarmnn_1_1_empty_optional_html"><div class="ttname"><a href="structarmnn_1_1_empty_optional.html">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.html#l00032">Optional.hpp:32</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ac40d3e4035af5fbe68d9e126a8d6367c"><div class="ttname"><a href="namespacearmnn.html#ac40d3e4035af5fbe68d9e126a8d6367c">armnn::CalculateGatherNdKeyIndices</a></div><div class="ttdeci">std::map&lt; std::string, unsigned int &gt; CalculateGatherNdKeyIndices(TensorInfo inputInfo0, TensorInfo inputInfo1)</div><div class="ttdoc">Calculates the key index values needed for GatherNd: N, ND, K, W, C (N is always 1)</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.html#l00313">WorkloadUtils.cpp:313</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ae9f7ce777fbcab84555a1e80ab03c13a"><div class="ttname"><a href="namespacearmnn.html#ae9f7ce777fbcab84555a1e80ab03c13a">armnn::ReverseGetMultIdx</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; ReverseGetMultIdx(const unsigned int idx, unsigned int inputRank, std::vector&lt; unsigned int &gt; &amp;elementNumInner)</div><div class="ttdef"><b>Definition:</b> <a href="_reverse_v2_impl_8cpp_source.html#l00016">ReverseV2Impl.cpp:16</a></div></div>
<div class="ttc" id="aclassarmnn_utils_1_1_floating_point_converter_html_ac1f1568f02163a68906a0030e0ba9871"><div class="ttname"><a href="classarmnn_utils_1_1_floating_point_converter.html#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.html#l00043">FloatingPointConverter.cpp:43</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad8ed01ff3ff33333d8e19db4d2818bb6"><div class="ttname"><a href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a></div><div class="ttdeci">DataType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.html#l00048">Types.hpp:48</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a3cf1cee98e0ed8b54263ec7279f6ec69"><div class="ttname"><a href="namespacearmnn.html#a3cf1cee98e0ed8b54263ec7279f6ec69">armnn::ReportError</a></div><div class="ttdeci">void ReportError(const std::string &amp;errorMessage, Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; errorMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l00762">Network.cpp:762</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0">armnn::LayerType::Softmax</a></div><div class="ttdeci">@ Softmax</div></div>
<div class="ttc" id="anamespacearmnn_html_aa52ce4f1fab044ad0c73f9613e2ef6ce"><div class="ttname"><a href="namespacearmnn.html#aa52ce4f1fab044ad0c73f9613e2ef6ce">armnn::CheckFp16Support</a></div><div class="ttdeci">bool CheckFp16Support(BackendsMap &amp;backends, const std::vector&lt; BackendId &gt; &amp;availablePreferredBackends)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01026">Network.cpp:1026</a></div></div>
<div class="ttc" id="anamespacearmnn_html_aa4e89c644c511e255f6a7ecbd5d14686"><div class="ttname"><a href="namespacearmnn.html#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.html#l00074">PolymorphicDowncast.hpp:74</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a8e1f31031ad31cd8cc22d7c9daa32681af60357a8d17e45793298323f1b372a74"><div class="ttname"><a href="namespacearmnn.html#a8e1f31031ad31cd8cc22d7c9daa32681af60357a8d17e45793298323f1b372a74">armnn::Dimensionality::Scalar</a></div><div class="ttdeci">@ Scalar</div></div>
<div class="ttc" id="anamespacearmnn_html_a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d"><div class="ttname"><a href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d">armnn::ActivationFunction::Elu</a></div><div class="ttdeci">@ Elu</div></div>
<div class="ttc" id="anamespacearmnn_html_a336dd839b81ad6a1d803c306b40f9af2"><div class="ttname"><a href="namespacearmnn.html#a336dd839b81ad6a1d803c306b40f9af2">armnn::IsSequenceLayerType</a></div><div class="ttdeci">bool IsSequenceLayerType(Layer &amp;layer, BinaryOperation type)</div><div class="ttdef"><b>Definition:</b> <a href="_subgraph_utils_8hpp_source.html#l00367">SubgraphUtils.hpp:367</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ac2807505b850738bc8a1991ce669dd47"><div class="ttname"><a href="namespacearmnn.html#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a></div><div class="ttdeci">BackendRegistry &amp; BackendRegistryInstance()</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8cpp_source.html#l00015">BackendRegistry.cpp:15</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a3888429b6ebc79f9a7df549e5e4d9a2faad301514192636ad34210adce598a45a"><div class="ttname"><a href="namespacearmnn.html#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_html_a536bd930213ea3fd689fc28c8589fc4a"><div class="ttname"><a href="namespacearmnn.html#a536bd930213ea3fd689fc28c8589fc4a">armnn::IndexToCoordinates</a></div><div class="ttdeci">std::vector&lt; uint32_t &gt; IndexToCoordinates(std::vector&lt; uint32_t &gt; &amp;shape, uint32_t index)</div><div class="ttdef"><b>Definition:</b> <a href="_tile_8cpp_source.html#l00016">Tile.cpp:16</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_invalid_argument_exception_html"><div class="ttname"><a href="classarmnn_1_1_invalid_argument_exception.html">armnn::InvalidArgumentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.html#l00080">Exceptions.hpp:80</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd"><div class="ttname"><a href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd">armnn::UnaryOperation::Sin</a></div><div class="ttdeci">@ Sin</div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_ad668074369437a111649f51296ff8959"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#ad668074369437a111649f51296ff8959">armnn::optimizations::FusePermuteIntoConstLayer</a></div><div class="ttdeci">OptimizeForConnection&lt; ConstantLayer, PermuteLayer, ConvertConstPermuteLayersToConstLayers &gt; FusePermuteIntoConstLayer</div><div class="ttdef"><b>Definition:</b> <a href="_convert_const_permute_layers_to_const_layers_8hpp_source.html#l00124">ConvertConstPermuteLayersToConstLayers.hpp:124</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ab8cf8f9fb6792e654c2d8d8382f6f01b"><div class="ttname"><a href="namespacearmnn.html#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.html#l00309">Types.hpp:309</a></div></div>
<div class="ttc" id="anamespacearmnn_html_aa1e93ef5f9ee3dbb5e7faa9578f180ae"><div class="ttname"><a href="namespacearmnn.html#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.html#l00118">ArmComputeUtils.hpp:118</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a855293b1be0581fb61ef6a1c5b027d0f"><div class="ttname"><a href="namespacearmnn.html#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.html#l00048">TypesUtils.cpp:48</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b"><div class="ttname"><a href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b">armnn::ActivationFunction::Linear</a></div><div class="ttdeci">@ Linear</div></div>
<div class="ttc" id="astructarmnn_1_1_convolution3d_descriptor_html_ac18546ebbebbb32fe0a03baa9bf2c600"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.html#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.html#l00629">Descriptors.hpp:629</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a7f8325a4bc02f2f687ba1968b595ec0a"><div class="ttname"><a href="namespacearmnn.html#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.html#l00191">Logging.cpp:191</a></div></div>
<div class="ttc" id="anamespacearmnn_html_aa7427025a851113a492de0b68b23d22a"><div class="ttname"><a href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">armnn::MakeOptimizations</a></div><div class="ttdeci">Optimizer::Optimizations MakeOptimizations(Args &amp;&amp;... args)</div><div class="ttdef"><b>Definition:</b> <a href="_optimizer_8hpp_source.html#l00043">Optimizer.hpp:43</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_backend_options_1_1_var_html_ac488187ef67bf8905cbe686daab95183"><div class="ttname"><a href="classarmnn_1_1_backend_options_1_1_var.html#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.html#l00119">BackendOptions.hpp:119</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_decoder_html_aafe0168dd5ece89e7c62e8d83a4e57cd"><div class="ttname"><a href="classarmnn_1_1_decoder.html#aafe0168dd5ece89e7c62e8d83a4e57cd">armnn::Decoder::DecodeTensor</a></div><div class="ttdeci">virtual std::vector&lt; float &gt; DecodeTensor(const TensorShape &amp;tensorShape, bool isDepthwise=false)=0</div></div>
<div class="ttc" id="astructarmnn_1_1_convolution3d_descriptor_html_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.html#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.html#l00643">Descriptors.hpp:643</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ae86f1ca23eaa764da9e589cc8e39a969"><div class="ttname"><a href="namespacearmnn.html#ae86f1ca23eaa764da9e589cc8e39a969">armnn::ReducedOutputOffset</a></div><div class="ttdeci">unsigned int ReducedOutputOffset(const unsigned int numDims, const armnn::TensorShape &amp;dims, std::vector&lt; unsigned int &gt; &amp;index, const unsigned int numAxis, const std::vector&lt; unsigned int &gt; &amp;axis)</div><div class="ttdef"><b>Definition:</b> <a href="_reduce_8cpp_source.html#l00040">Reduce.cpp:40</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4"><div class="ttname"><a href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4">armnn::LogSeverity::Fatal</a></div><div class="ttdeci">@ Fatal</div></div>
<div class="ttc" id="anamespacearmnn_html_abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5"><div class="ttname"><a href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">armnn::ReduceOperation::Sum</a></div><div class="ttdeci">@ Sum</div></div>
<div class="ttc" id="anamespacearmnn_html_a5ee4a1cca55f69b31e625c786655ed1a"><div class="ttname"><a href="namespacearmnn.html#a5ee4a1cca55f69b31e625c786655ed1a">armnn::RequiresCopy</a></div><div class="ttdeci">bool RequiresCopy(ITensorHandleFactory::FactoryId src, ITensorHandleFactory::FactoryId dst, TensorHandleFactoryRegistry &amp;registry)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01454">Network.cpp:1454</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f">armnn::LayerType::Addition</a></div><div class="ttdeci">@ Addition</div></div>
<div class="ttc" id="a_numeric_cast_8hpp_html_a242e8e7e20f157c7301f4babcc120750"><div class="ttname"><a href="_numeric_cast_8hpp.html#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.html#l00025">NumericCast.hpp:25</a></div></div>
<div class="ttc" id="anamespacearmnn_html_aa02b9e06fb20fa3c13da0427e6ee5ab2"><div class="ttname"><a href="namespacearmnn.html#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.html#l00182">TypesUtils.hpp:182</a></div></div>
<div class="ttc" id="anamespacearmnn_html_aa999ff2585ad75b95954a9323f63c32b"><div class="ttname"><a href="namespacearmnn.html#aa999ff2585ad75b95954a9323f63c32b">armnn::Softmax</a></div><div class="ttdeci">void Softmax(Decoder&lt; float &gt; &amp;in, Encoder&lt; float &gt; &amp;out, const TensorInfo &amp;inputTensorInfo, float beta, int axis)</div><div class="ttdoc">Computes the softmax function on some inputs, into outputs, with a shape given by tensorInfo.</div><div class="ttdef"><b>Definition:</b> <a href="_softmax_8cpp_source.html#l00017">Softmax.cpp:17</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7"><div class="ttname"><a href="namespacearmnn.html#a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7">armnn::MemBlockStrategyType::SingleAxisPacking</a></div><div class="ttdeci">@ SingleAxisPacking</div></div>
<div class="ttc" id="anamespacearmnn_html_aeee4e55e6ad4fe12b2168f9fd1e88141"><div class="ttname"><a href="namespacearmnn.html#aeee4e55e6ad4fe12b2168f9fd1e88141">armnn::ReturnWithError</a></div><div class="ttdeci">OptimizationResult ReturnWithError(OptimizationResult res, const Layer *layer, const BackendSettings &amp;backendSettings, Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l00786">Network.cpp:786</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a5e1dc69443b64ad16b669388a6023f7a"><div class="ttname"><a href="namespacearmnn.html#a5e1dc69443b64ad16b669388a6023f7a">armnn::SpaceToDepth</a></div><div class="ttdeci">void SpaceToDepth(const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, const SpaceToDepthDescriptor &amp;params, Decoder&lt; float &gt; &amp;inputData, Encoder&lt; float &gt; &amp;outputData)</div><div class="ttdef"><b>Definition:</b> <a href="_space_to_depth_8cpp_source.html#l00036">SpaceToDepth.cpp:36</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a8d4ef1958eb8b75e33ff5f9e1682c9a8"><div class="ttname"><a href="namespacearmnn.html#a8d4ef1958eb8b75e33ff5f9e1682c9a8">armnn::ReverseGetFlatIdx</a></div><div class="ttdeci">unsigned int ReverseGetFlatIdx(const std::vector&lt; unsigned int &gt; &amp;idxList, unsigned int inputRank, std::vector&lt; unsigned int &gt; &amp;elementNumInner)</div><div class="ttdef"><b>Definition:</b> <a href="_reverse_v2_impl_8cpp_source.html#l00034">ReverseV2Impl.cpp:34</a></div></div>
<div class="ttc" id="astructarmnn_1_1_convolution3d_descriptor_html_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.html#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.html#l00641">Descriptors.hpp:641</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_permutation_vector_html"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.html">armnn::PermutationVector</a></div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.html#l00314">Types.hpp:314</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38"><div class="ttname"><a href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Status::Success</a></div><div class="ttdeci">@ Success</div></div>
<div class="ttc" id="anamespacearmnn_html_ab40e30cea5a328a3c35aa32f9b7db1c1"><div class="ttname"><a href="namespacearmnn.html#ab40e30cea5a328a3c35aa32f9b7db1c1">armnn::SetNeonSliceData</a></div><div class="ttdeci">auto SetNeonSliceData(const std::vector&lt; unsigned int &gt; &amp;m_begin, const std::vector&lt; unsigned int &gt; &amp;m_size)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_workload_utils_8hpp_source.html#l00160">NeonWorkloadUtils.hpp:160</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc"><div class="ttname"><a href="namespacearmnn.html#a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc">armnn::Dimensionality::NotSpecified</a></div><div class="ttdeci">@ NotSpecified</div></div>
<div class="ttc" id="aclassarmnn_1_1_exception_html"><div class="ttname"><a href="classarmnn_1_1_exception.html">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.html#l00046">Exceptions.hpp:46</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528"><div class="ttname"><a href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528">armnn::GraphEvent::LayerErased</a></div><div class="ttdeci">@ LayerErased</div></div>
<div class="ttc" id="aclassarmnn_utils_1_1_data_layout_indexed_html_a414e6f95548e6f7a01d5028b55ad3941"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.html#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.html#l00025">DataLayoutIndexed.hpp:25</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a4a180e425d4c19b2cdea4ce5760180e1"><div class="ttname"><a href="namespacearmnn.html#a4a180e425d4c19b2cdea4ce5760180e1">armnn::SpaceToBatchNd</a></div><div class="ttdeci">void SpaceToBatchNd(const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, const SpaceToBatchNdDescriptor &amp;params, Decoder&lt; float &gt; &amp;inputData, Encoder&lt; float &gt; &amp;outputData)</div><div class="ttdef"><b>Definition:</b> <a href="_space_to_batch_nd_8cpp_source.html#l00048">SpaceToBatchNd.cpp:48</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad701d0d29baa4266ab4d33b090aa661c"><div class="ttname"><a href="namespacearmnn.html#ad701d0d29baa4266ab4d33b090aa661c">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &amp;actDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.html#l00087">ArmComputeUtils.hpp:87</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_runtime_exception_html"><div class="ttname"><a href="classarmnn_1_1_runtime_exception.html">armnn::RuntimeException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.html#l00120">Exceptions.hpp:120</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad773a034fb9983e15f3094b4c5c7c30c"><div class="ttname"><a href="namespacearmnn.html#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.html#l00030">TypesUtils.cpp:30</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a0c99a284637e7c8d3547dac8686bed3a"><div class="ttname"><a href="namespacearmnn.html#a0c99a284637e7c8d3547dac8686bed3a">armnn::IsLayerSupported</a></div><div class="ttdeci">bool IsLayerSupported(const armnn::Layer &amp;layer)</div><div class="ttdef"><b>Definition:</b> <a href="_mock_backend_8cpp_source.html#l00083">MockBackend.cpp:83</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f"><div class="ttname"><a href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">armnn::ResizeMethod::NearestNeighbor</a></div><div class="ttdeci">@ NearestNeighbor</div></div>
<div class="ttc" id="anamespacearmnn_html_a2b8ec686784330e8f20e4444f1ed7e98"><div class="ttname"><a href="namespacearmnn.html#a2b8ec686784330e8f20e4444f1ed7e98">armnn::GetLayerInOutDatatype</a></div><div class="ttdeci">std::vector&lt; DataType &gt; GetLayerInOutDatatype(const Layer *layer)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01017">Network.cpp:1017</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling2d_descriptor_html_ac18546ebbebbb32fe0a03baa9bf2c600"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.html#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.html#l00407">Descriptors.hpp:407</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a56297e0f7b215eea46c818cb7528d9ea"><div class="ttname"><a href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9ea">armnn::ActivationFunction</a></div><div class="ttdeci">ActivationFunction</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.html#l00086">Types.hpp:86</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div><div class="ttdeci">@ info</div></div>
<div class="ttc" id="anamespacearmnn_html_ac4f8557279754ed7b3f749d55b0e3047add4fe0cc913f704600b97d1f5dd285de"><div class="ttname"><a href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047add4fe0cc913f704600b97d1f5dd285de">armnn::BinaryOperation::Power</a></div><div class="ttdeci">@ Power</div></div>
<div class="ttc" id="astructarmnn_1_1_pooling3d_descriptor_html_a83ca447892f460dabaa2f87d3dc3db61"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.html#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.html#l00483">Descriptors.hpp:483</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ab24d74259a053475f6040dd701a01952ac7fdc1b70472b8558fdba30db193d58f"><div class="ttname"><a href="namespacearmnn.html#ab24d74259a053475f6040dd701a01952ac7fdc1b70472b8558fdba30db193d58f">armnn::BackendCapability::AsyncExecution</a></div><div class="ttdeci">@ AsyncExecution</div><div class="ttdoc">Asynchronous Execution.</div></div>
<div class="ttc" id="anamespacearmnn_html_a92c91193007aa49f4732d6dba5397f8d"><div class="ttname"><a href="namespacearmnn.html#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.html#l00046">WorkloadUtils.hpp:46</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ae789852d4625b71ca83474fe12c511e8"><div class="ttname"><a href="namespacearmnn.html#ae789852d4625b71ca83474fe12c511e8">armnn::Tile</a></div><div class="ttdeci">void Tile(const TileDescriptor &amp;params, const TensorInfo &amp;inputInfo, Decoder&lt; float &gt; &amp;inputDecoder, Encoder&lt; float &gt; &amp;outputEncoder)</div><div class="ttdef"><b>Definition:</b> <a href="_tile_8cpp_source.html#l00045">Tile.cpp:45</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ac1438a97bbc2aee5cd8470d9d2a3aebc"><div class="ttname"><a href="namespacearmnn.html#ac1438a97bbc2aee5cd8470d9d2a3aebc">armnn::ConvertComparisonOperationToAcl</a></div><div class="ttdeci">arm_compute::ComparisonOperation ConvertComparisonOperationToAcl(const ComparisonDescriptor &amp;descriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.html#l00141">ArmComputeUtils.hpp:141</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021"><div class="ttname"><a href="namespacearmnn.html#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">armnn::PoolingAlgorithm::Average</a></div><div class="ttdeci">@ Average</div></div>
<div class="ttc" id="anamespacearmnn_html_a2055c78ee5627c32252387746d552ade"><div class="ttname"><a href="namespacearmnn.html#a2055c78ee5627c32252387746d552ade">armnn::ScatterNd</a></div><div class="ttdeci">void ScatterNd(const TensorInfo &amp;inputInfo, const TensorInfo &amp;indicesInfo, const TensorInfo &amp;updatesInfo, Decoder&lt; float &gt; &amp;input, Decoder&lt; int &gt; &amp;indices, Decoder&lt; float &gt; &amp;updates, Encoder&lt; float &gt; &amp;output, ScatterNdDescriptor descriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_scatter_nd_8cpp_source.html#l00041">ScatterNd.cpp:41</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_decoder_html_ac729108381e2340bea12877971713ecb"><div class="ttname"><a href="classarmnn_1_1_decoder.html#ac729108381e2340bea12877971713ecb">armnn::Decoder::Get</a></div><div class="ttdeci">virtual IType Get() const =0</div></div>
<div class="ttc" id="anamespacearmnn_html_ae7c459566269bf22b16513d61865272b"><div class="ttname"><a href="namespacearmnn.html#ae7c459566269bf22b16513d61865272b">armnn::SetClSliceData</a></div><div class="ttdeci">auto SetClSliceData(const std::vector&lt; unsigned int &gt; &amp;m_begin, const std::vector&lt; unsigned int &gt; &amp;m_size)</div><div class="ttdef"><b>Definition:</b> <a href="_cl_workload_utils_8hpp_source.html#l00100">ClWorkloadUtils.hpp:100</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7"><div class="ttname"><a href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a></div><div class="ttdeci">@ Signed32</div></div>
<div class="ttc" id="anamespacearmnn_html_a1cfaa710db2a54673b21d2ea2da757c8ab95a01ffffa8fcdd2a9af961937c097c"><div class="ttname"><a href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8ab95a01ffffa8fcdd2a9af961937c097c">armnn::UnaryOperation::Ceil</a></div><div class="ttdeci">@ Ceil</div></div>
<div class="ttc" id="a_lstm_utils_8cpp_html_a4c20bc573b70e89327b334f924da97b5"><div class="ttname"><a href="_lstm_utils_8cpp.html#a4c20bc573b70e89327b334f924da97b5">ZeroVector</a></div><div class="ttdeci">void ZeroVector(armnn::Encoder&lt; float &gt; &amp;vector, uint32_t vSize)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.html#l00076">LstmUtils.cpp:76</a></div></div>
<div class="ttc" id="anamespacearmnn_html_adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1"><div class="ttname"><a href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">armnn::ShapeInferenceMethod::ValidateOnly</a></div><div class="ttdeci">@ ValidateOnly</div><div class="ttdoc">Validate all output shapes.</div></div>
<div class="ttc" id="anamespacearmnn_html_adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb"><div class="ttname"><a href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">armnn::ShapeInferenceMethod::InferAndValidate</a></div><div class="ttdeci">@ InferAndValidate</div><div class="ttdoc">Infer missing output shapes and validate all output shapes.</div></div>
<div class="ttc" id="anamespacearmnn_html_abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd"><div class="ttname"><a href="namespacearmnn.html#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">armnn::ReduceOperation::Prod</a></div><div class="ttdeci">@ Prod</div></div>
<div class="ttc" id="anamespacearmnn_html_a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6"><div class="ttname"><a href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">armnn::ActivationFunction::Abs</a></div><div class="ttdeci">@ Abs</div></div>
<div class="ttc" id="aclassarmnn_1_1_backend_options_1_1_var_html_a5e3562cda960da001597e7dd5679b140"><div class="ttname"><a href="classarmnn_1_1_backend_options_1_1_var.html#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.html#l00123">BackendOptions.hpp:123</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d"><div class="ttname"><a href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a></div><div class="ttdeci">@ QAsymmS8</div></div>
<div class="ttc" id="anamespacearmnn_html_a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389"><div class="ttname"><a href="namespacearmnn.html#a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389">armnn::CapabilityClass::PaddingRequired</a></div><div class="ttdeci">@ PaddingRequired</div></div>
<div class="ttc" id="astructarmnn_1_1_pooling3d_descriptor_html_a002bc30e590d78cbb4f4d12171055ca7"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.html#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.html#l00477">Descriptors.hpp:477</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f"><div class="ttname"><a href="namespacearmnn.html#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">armnn::ResizeMethod::Bilinear</a></div><div class="ttdeci">@ Bilinear</div></div>
<div class="ttc" id="a_utils_8hpp_html_abbf421eb1186af0d505648ed2ea54a00"><div class="ttname"><a href="_utils_8hpp.html#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a></div><div class="ttdeci">#define ARMNN_FALLTHROUGH</div><div class="ttdef"><b>Definition:</b> <a href="_utils_8hpp_source.html#l00036">Utils.hpp:36</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2"><div class="ttname"><a href="namespacearmnn.html#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">armnn::ArgMinMaxFunction::Min</a></div><div class="ttdeci">@ Min</div></div>
<div class="ttc" id="anamespacearmnn_html_a3c62b52d21e28088f040a4b6c2a06022"><div class="ttname"><a href="namespacearmnn.html#a3c62b52d21e28088f040a4b6c2a06022">armnn::Pad</a></div><div class="ttdeci">void Pad(const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, const ITensorHandle *inputHandle, ITensorHandle *outputHandle, const PadQueueDescriptor &amp;data)</div><div class="ttdef"><b>Definition:</b> <a href="_pad_8cpp_source.html#l00039">Pad.cpp:39</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4a33cae35d37c1b558ecd35dd5e37dd80f"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a33cae35d37c1b558ecd35dd5e37dd80f">armnn::LayerType::LastLayer</a></div><div class="ttdeci">@ LastLayer</div></div>
<div class="ttc" id="anamespacearmnn_html_a3cf63e1c930f73db7f917203fe15f503"><div class="ttname"><a href="namespacearmnn.html#a3cf63e1c930f73db7f917203fe15f503">armnn::roundf</a></div><div class="ttdeci">float roundf(float value)</div><div class="ttdef"><b>Definition:</b> <a href="_utils_8hpp_source.html#l00043">Utils.hpp:43</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling2d_descriptor_html_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.html#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.html#l00419">Descriptors.hpp:419</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a4e2dd387ba6f0dc5164b4cdf8de3262aaf7a45ae663528701f33ee482ce67af62"><div class="ttname"><a href="namespacearmnn.html#a4e2dd387ba6f0dc5164b4cdf8de3262aaf7a45ae663528701f33ee482ce67af62">armnn::JsonObjectType::ExecObjectDesc</a></div><div class="ttdeci">@ ExecObjectDesc</div></div>
<div class="ttc" id="anamespacearmnn_html_a3170fdd696155a247ecd81d445c0e2e1"><div class="ttname"><a href="namespacearmnn.html#a3170fdd696155a247ecd81d445c0e2e1">armnn::ReshapeWeightsForAcl</a></div><div class="ttdeci">void ReshapeWeightsForAcl(TensorInfo &amp;weightInfo, DataLayout dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.html#l00048">WorkloadUtils.cpp:48</a></div></div>
<div class="ttc" id="astructarmnn_1_1_space_to_depth_descriptor_html_a6c6b8957f1e176867e5fb05b1a1a1486"><div class="ttname"><a href="structarmnn_1_1_space_to_depth_descriptor.html#a6c6b8957f1e176867e5fb05b1a1a1486">armnn::SpaceToDepthDescriptor::m_BlockSize</a></div><div class="ttdeci">unsigned int m_BlockSize</div><div class="ttdoc">Scalar specifying the input block size. It must be &gt;= 1.</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.html#l01092">Descriptors.hpp:1092</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a8b5472bb95f8226e5c82b95c1de1dab0"><div class="ttname"><a href="namespacearmnn.html#a8b5472bb95f8226e5c82b95c1de1dab0">armnn::CoordinatesToIndex</a></div><div class="ttdeci">uint32_t CoordinatesToIndex(TensorShape &amp;shape, std::vector&lt; uint32_t &gt; &amp;coordinates)</div><div class="ttdef"><b>Definition:</b> <a href="_tile_8cpp_source.html#l00032">Tile.cpp:32</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68"><div class="ttname"><a href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68">armnn::TuningLevel::Rapid</a></div><div class="ttdeci">@ Rapid</div></div>
<div class="ttc" id="anamespacearmnn_html_a4e2dd387ba6f0dc5164b4cdf8de3262aaa4ecfc70574394990cf17bd83df499f7"><div class="ttname"><a href="namespacearmnn.html#a4e2dd387ba6f0dc5164b4cdf8de3262aaa4ecfc70574394990cf17bd83df499f7">armnn::JsonObjectType::Event</a></div><div class="ttdeci">@ Event</div></div>
<div class="ttc" id="ainclude_2armnn_2_version_8hpp_html_a50bf0553d5c4b76d18a3d37e155b4d11"><div class="ttname"><a href="include_2armnn_2_version_8hpp.html#a50bf0553d5c4b76d18a3d37e155b4d11">ARMNN_VERSION</a></div><div class="ttdeci">#define ARMNN_VERSION</div><div class="ttdoc">ARMNN_VERSION: &quot;X.Y.Z&quot; where: X = Major version number Y = Minor version number Z = Patch version num...</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2_version_8hpp_source.html#l00022">Version.hpp:22</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b"><div class="ttname"><a href="namespacearmnn.html#a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b">armnn::UnaryOperation::Log</a></div><div class="ttdeci">@ Log</div></div>
<div class="ttc" id="anamespacearmnn_html_a181ecb133401da6ff2916c192ca04d48"><div class="ttname"><a href="namespacearmnn.html#a181ecb133401da6ff2916c192ca04d48">armnn::Debug</a></div><div class="ttdeci">void Debug(const TensorInfo &amp;inputInfo, const T *inputData, LayerGuid guid, const std::string &amp;layerName, unsigned int slotIndex, bool outputsToFile)</div><div class="ttdef"><b>Definition:</b> <a href="_debug_8cpp_source.html#l00097">Debug.cpp:97</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling3d_descriptor_html_a5699e8606c37d18c03910b242cd1b010"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.html#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.html#l00489">Descriptors.hpp:489</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55"><div class="ttname"><a href="namespacearmnn.html#a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55">armnn::LogicalBinaryOperation::LogicalAnd</a></div><div class="ttdeci">@ LogicalAnd</div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_ae1509d340bc981b11101c3316ee8afd6"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#ae1509d340bc981b11101c3316ee8afd6">armnn::optimizations::OptimizeInverseConversionsFp32</a></div><div class="ttdeci">OptimizeForConnection&lt; ConvertFp32ToFp16Layer, ConvertFp16ToFp32Layer, OptimizeInverseConversionsImpl &gt; OptimizeInverseConversionsFp32</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_inverse_conversions_8hpp_source.html#l00044">OptimizeInverseConversions.hpp:44</a></div></div>
<div class="ttc" id="astructarmnn_1_1_backend_options_html"><div class="ttname"><a href="structarmnn_1_1_backend_options.html">armnn::BackendOptions</a></div><div class="ttdoc">Struct for the users to pass backend specific options.</div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.html#l00022">BackendOptions.hpp:22</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0"><div class="ttname"><a href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0">armnn::TuningLevel::Normal</a></div><div class="ttdeci">@ Normal</div></div>
<div class="ttc" id="aclassarmnn_1_1_layer_html_ad8e15c530c929ab823d89ae9fd2d3f11"><div class="ttname"><a href="classarmnn_1_1_layer.html#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.html#l00286">Layer.hpp:286</a></div></div>
<div class="ttc" id="anamespacearmnn_html_aaa168a41b648cda82a2c8b9f2b91ec04"><div class="ttname"><a href="namespacearmnn.html#aaa168a41b648cda82a2c8b9f2b91ec04">armnn::Resize</a></div><div class="ttdeci">void Resize(Decoder&lt; float &gt; &amp;in, const TensorInfo &amp;inputInfo, Encoder&lt; float &gt; &amp;out, const TensorInfo &amp;outputInfo, DataLayoutIndexed dataLayout, ResizeMethod resizeMethod, bool alignCorners, bool halfPixelCenters)</div><div class="ttdef"><b>Definition:</b> <a href="_resize_8cpp_source.html#l00065">Resize.cpp:65</a></div></div>
<div class="ttc" id="a_neon_layer_support_8cpp_html_af0383f6bb43d6d5df6f3265367b6ebf9"><div class="ttname"><a href="_neon_layer_support_8cpp.html#af0383f6bb43d6d5df6f3265367b6ebf9">FORWARD_WORKLOAD_VALIDATE_FUNC</a></div><div class="ttdeci">#define FORWARD_WORKLOAD_VALIDATE_FUNC(func, reasonIfUnsupported,...)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_layer_support_8cpp_source.html#l00166">NeonLayerSupport.cpp:166</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a2d299363c9fc33334c571fa29ca4f58c"><div class="ttname"><a href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58c">armnn::ComparisonOperation</a></div><div class="ttdeci">ComparisonOperation</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.html#l00109">Types.hpp:109</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a7d4e24d8e296ccced976d626e08b742a"><div class="ttname"><a href="namespacearmnn.html#a7d4e24d8e296ccced976d626e08b742a">armnn::ExtractJsonObjects</a></div><div class="ttdeci">void ExtractJsonObjects(unsigned int inferenceIndex, const Event *parentEvent, JsonChildObject &amp;parentObject, std::map&lt; const Event *, std::vector&lt; const Event * &gt;&gt; descendantsMap)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_8cpp_source.html#l00314">Profiling.cpp:314</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a8e1f31031ad31cd8cc22d7c9daa32681ab4b379bf7ded74c07595ccb85bc6fdc3"><div class="ttname"><a href="namespacearmnn.html#a8e1f31031ad31cd8cc22d7c9daa32681ab4b379bf7ded74c07595ccb85bc6fdc3">armnn::Dimensionality::Specified</a></div><div class="ttdeci">@ Specified</div></div>
<div class="ttc" id="anamespacearmnn_html_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.html#l00042">Types.hpp:42</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling3d_descriptor_html_a11d5c25face9b54e90f79ee8bdc1d0fb"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.html#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.html#l00485">Descriptors.hpp:485</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_ad1aaeee71293f34d9f65d2dd2792830d"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#ad1aaeee71293f34d9f65d2dd2792830d">armnn::optimizations::TransposeAsReshape</a></div><div class="ttdeci">OptimizeForType&lt; TransposeLayer, TransposeAsReshapeImpl &gt; TransposeAsReshape</div><div class="ttdef"><b>Definition:</b> <a href="_transpose_as_reshape_8hpp_source.html#l00077">TransposeAsReshape.hpp:77</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ae060224135f57f926cbda9d2732a2b1fa566666dfc3a9a82da0d7b0816b19f278"><div class="ttname"><a href="namespacearmnn.html#ae060224135f57f926cbda9d2732a2b1fa566666dfc3a9a82da0d7b0816b19f278">armnn::ProfilingDetailsMethod::DetailsOnly</a></div><div class="ttdeci">@ DetailsOnly</div></div>
<div class="ttc" id="aclassarmnn_1_1_backend_options_1_1_var_html_aec3bdef27fa2d4de29db82d2334ad2d8"><div class="ttname"><a href="classarmnn_1_1_backend_options_1_1_var.html#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.html#l00112">BackendOptions.hpp:112</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling3d_descriptor_html_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.html#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.html#l00493">Descriptors.hpp:493</a></div></div>
<div class="ttc" id="anamespacearmnn_utils_html_af57864f5e03358d14c2988edae912b8b"><div class="ttname"><a href="namespacearmnn_utils.html#af57864f5e03358d14c2988edae912b8b">armnnUtils::GetNumElementsBetween</a></div><div class="ttdeci">unsigned int GetNumElementsBetween(const armnn::TensorShape &amp;shape, unsigned int firstAxisInclusive, unsigned int lastAxisExclusive)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.html#l00209">TensorUtils.cpp:209</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4"><div class="ttname"><a href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4">armnn::BoostLogSeverityMapping::fatal</a></div><div class="ttdeci">@ fatal</div></div>
<div class="ttc" id="astructarmnn_1_1_pooling3d_descriptor_html_ac18546ebbebbb32fe0a03baa9bf2c600"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.html#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.html#l00475">Descriptors.hpp:475</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_tensor_info_html_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.html#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.html#l00193">Tensor.hpp:193</a></div></div>
<div class="ttc" id="astructarmnn_1_1_convolution3d_descriptor_html_a11d5c25face9b54e90f79ee8bdc1d0fb"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.html#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.html#l00639">Descriptors.hpp:639</a></div></div>
<div class="ttc" id="a_deprecated_8hpp_html_ad762b11b48e5c1d1c1743f529485728a"><div class="ttname"><a href="_deprecated_8hpp.html#ad762b11b48e5c1d1c1743f529485728a">ARMNN_NO_DEPRECATE_WARN_END</a></div><div class="ttdeci">#define ARMNN_NO_DEPRECATE_WARN_END</div><div class="ttdef"><b>Definition:</b> <a href="_deprecated_8hpp_source.html#l00034">Deprecated.hpp:34</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ac70a495c61526a0500b33b23db86ca27"><div class="ttname"><a href="namespacearmnn.html#ac70a495c61526a0500b33b23db86ca27">armnn::Offset</a></div><div class="ttdeci">unsigned int Offset(const TensorShape &amp;shape, unsigned int batch, unsigned int height, unsigned int width, unsigned int channels, const DataLayoutIndexed &amp;dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="_batch_to_space_nd_8cpp_source.html#l00015">BatchToSpaceNd.cpp:15</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_layer_html_a46fc3fdd4b2a5dd6d184e57983cf20bc"><div class="ttname"><a href="classarmnn_1_1_layer.html#a46fc3fdd4b2a5dd6d184e57983cf20bc">armnn::Layer::ExecuteStrategy</a></div><div class="ttdeci">void ExecuteStrategy(IStrategy &amp;strategy) const override</div><div class="ttdoc">Apply a visitor to this layer.</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8cpp_source.html#l00571">Layer.cpp:571</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d"><div class="ttname"><a href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d">armnn::BoostLogSeverityMapping::debug</a></div><div class="ttdeci">@ debug</div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a8a81178ddcebb93ec0c35b6e6284273c"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a8a81178ddcebb93ec0c35b6e6284273c">armnn::optimizations::FuseBatchNormIntoConvolution2DFloat16</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; Convolution2dLayer, BatchNormalizationLayer, FuseBatchNorm&lt; Convolution2dLayer, armnn::DataType::Float16 &gt; &gt; FuseBatchNormIntoConvolution2DFloat16</div><div class="ttdef"><b>Definition:</b> <a href="_fuse_batch_norm_8hpp_source.html#l00227">FuseBatchNorm.hpp:227</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a637fea04314a9870c1dc4355c1bed429"><div class="ttname"><a href="namespacearmnn.html#a637fea04314a9870c1dc4355c1bed429">armnn::StrEqual</a></div><div class="ttdeci">constexpr bool StrEqual(const char *strA, const char(&amp;strB)[N])</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.html#l00201">TypesUtils.hpp:201</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_b_float16_html"><div class="ttname"><a href="classarmnn_1_1_b_float16.html">armnn::BFloat16</a></div><div class="ttdef"><b>Definition:</b> <a href="_b_float16_8hpp_source.html#l00015">BFloat16.hpp:15</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.html#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.html#l00014">IgnoreUnused.hpp:14</a></div></div>
<div class="ttc" id="anamespacearmnn_html_adf5a024ace0dbe2af2d5b1a1b9623771"><div class="ttname"><a href="namespacearmnn.html#adf5a024ace0dbe2af2d5b1a1b9623771">armnn::ConvertPaddingModeToAcl</a></div><div class="ttdeci">arm_compute::PaddingMode ConvertPaddingModeToAcl(const PaddingMode &amp;paddingMode)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.html#l00295">ArmComputeUtils.hpp:295</a></div></div>
<div class="ttc" id="astructarmnn_1_1_views_descriptor_html_a78e8266be865fdd92cadd04d6e25ae1f"><div class="ttname"><a href="structarmnn_1_1_views_descriptor.html#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.html#l00307">Descriptors.cpp:307</a></div></div>
<div class="ttc" id="anamespacearmnn_html_aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189"><div class="ttname"><a href="namespacearmnn.html#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_html_ad69ffa576a596b9eb20ab6a41420c541"><div class="ttname"><a href="namespacearmnn.html#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.html#l00299">WorkloadUtils.cpp:299</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a0ea4ff80d0075ff847e96dc12e734368"><div class="ttname"><a href="namespacearmnn.html#a0ea4ff80d0075ff847e96dc12e734368">armnn::AssignBackends</a></div><div class="ttdeci">OptimizationResult AssignBackends(OptimizedNetworkImpl *optNetObjPtr, BackendSettings &amp;backendSettings, SubgraphView &amp;subgraph, Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01288">Network.cpp:1288</a></div></div>
<div class="ttc" id="a_types_8hpp_html_ac6d0779b576215649c2610ef2bd1903f"><div class="ttname"><a href="_types_8hpp.html#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.html#l00408">Types.hpp:408</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a75ca90884e15396a70b0cb722a877b4aa06933067aafd48425d67bcb01bba5cb6"><div class="ttname"><a href="namespacearmnn.html#a75ca90884e15396a70b0cb722a877b4aa06933067aafd48425d67bcb01bba5cb6">armnn::ScatterNdFunction::Update</a></div><div class="ttdeci">@ Update</div></div>
<div class="ttc" id="anamespacearmnn_html_a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa"><div class="ttname"><a href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">armnn::LogSeverity::Warning</a></div><div class="ttdeci">@ Warning</div></div>
<div class="ttc" id="anamespacearmnn_html_ac4f8557279754ed7b3f749d55b0e3047aa1d0ec6d56f8833a078b5a7ac4caf2d4"><div class="ttname"><a href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047aa1d0ec6d56f8833a078b5a7ac4caf2d4">armnn::BinaryOperation::Minimum</a></div><div class="ttdeci">@ Minimum</div></div>
<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">armnn::LayerType::Map</a></div><div class="ttdeci">@ Map</div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_ab40bb51feca46649eb9d00522bfe51f6"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#ab40bb51feca46649eb9d00522bfe51f6">armnn::optimizations::FuseBatchNormIntoDepthwiseConvolution2DFloat16</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; DepthwiseConvolution2dLayer, BatchNormalizationLayer, FuseBatchNorm&lt; DepthwiseConvolution2dLayer, armnn::DataType::Float16 &gt; &gt; FuseBatchNormIntoDepthwiseConvolution2DFloat16</div><div class="ttdef"><b>Definition:</b> <a href="_fuse_batch_norm_8hpp_source.html#l00237">FuseBatchNorm.hpp:237</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad44c007f21af2d0375e3ef9400a1b275"><div class="ttname"><a href="namespacearmnn.html#ad44c007f21af2d0375e3ef9400a1b275">armnn::IsQuantizedType</a></div><div class="ttdeci">constexpr bool IsQuantizedType()</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.html#l00311">TypesUtils.hpp:311</a></div></div>
<div class="ttc" id="astructarmnn_1_1_convolution3d_descriptor_html_a302b688d88dd73cde0fb1faef6679907"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.html#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.html#l00649">Descriptors.hpp:649</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a9173495a61a0092b5f38b855f02c3585"><div class="ttname"><a href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">armnn::BackendsMap</a></div><div class="ttdeci">std::map&lt; BackendId, std::unique_ptr&lt; class IBackendInternal &gt; &gt; BackendsMap</div><div class="ttdef"><b>Definition:</b> <a href="_network_8hpp_source.html#l00285">Network.hpp:285</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1"><div class="ttname"><a href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a></div><div class="ttdeci">@ CpuAcc</div><div class="ttdoc">CPU Execution: NEON: ArmCompute.</div></div>
<div class="ttc" id="a_lstm_utils_8cpp_html_a2e653f948d93f4177f267a7b1b4ed47d"><div class="ttname"><a href="_lstm_utils_8cpp.html#a2e653f948d93f4177f267a7b1b4ed47d">VectorVectorCwiseProductAccumulate</a></div><div class="ttdeci">void VectorVectorCwiseProductAccumulate(armnn::Decoder&lt; float &gt; &amp;vector1, armnn::Decoder&lt; float &gt; &amp;vector2, uint32_t vSize, armnn::Encoder&lt; float &gt; &amp;outResult)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.html#l00204">LstmUtils.cpp:204</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ae060224135f57f926cbda9d2732a2b1fa497ab261a562e316736c2cb59b839d32"><div class="ttname"><a href="namespacearmnn.html#ae060224135f57f926cbda9d2732a2b1fa497ab261a562e316736c2cb59b839d32">armnn::ProfilingDetailsMethod::DetailsWithEvents</a></div><div class="ttdeci">@ DetailsWithEvents</div></div>
<div class="ttc" id="anamespacearmnn_html_a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559"><div class="ttname"><a href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">armnn::ActivationFunction::ReLu</a></div><div class="ttdeci">@ ReLu</div></div>
<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b">armnn::LayerType::MemCopy</a></div><div class="ttdeci">@ MemCopy</div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_aba7b0ca6192b8b58ecd517a82b4f378e"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#aba7b0ca6192b8b58ecd517a82b4f378e">armnn::optimizations::SquashEqualTransposeSiblings</a></div><div class="ttdeci">OptimizeForConnection&lt; Layer, TransposeLayer, SquashEqualSiblingsImpl&lt; TransposeLayer &gt; &gt; SquashEqualTransposeSiblings</div><div class="ttdef"><b>Definition:</b> <a href="_squash_equal_siblings_8hpp_source.html#l00069">SquashEqualSiblings.hpp:69</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_tensor_info_html_abe8889e8150beef5fd204b2d87b49298"><div class="ttname"><a href="classarmnn_1_1_tensor_info.html#abe8889e8150beef5fd204b2d87b49298">armnn::TensorInfo::SetShape</a></div><div class="ttdeci">void SetShape(const TensorShape &amp;newShape)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.html#l00195">Tensor.hpp:195</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a138ca3929b888fa8d9088c076e9de48c"><div class="ttname"><a href="namespacearmnn.html#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.html#l00062">MockBackend.cpp:62</a></div></div>
<div class="ttc" id="anamespacearmnn_html"><div class="ttname"><a href="namespacearmnn.html">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.html#l00006">01_00_quick_start.dox:6</a></div></div>
<div class="ttc" id="aclassarmnn_utils_1_1_data_layout_indexed_html_a861b2621ee46e4b63379988b360b8cd9"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.html#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.html#l00023">DataLayoutIndexed.hpp:23</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a06cac66872538895dd6b59cdf39173d2"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a06cac66872538895dd6b59cdf39173d2">armnn::optimizations::ConvertConstantsHalfToFloat</a></div><div class="ttdeci">ConvertConstants&lt; Float16ToFloat32, IsFloat32Layer &gt; ConvertConstantsHalfToFloat</div><div class="ttdef"><b>Definition:</b> <a href="_convert_constants_8hpp_source.html#l00098">ConvertConstants.hpp:98</a></div></div>
<div class="ttc" id="astructarmnn_1_1_convolution3d_descriptor_html_a5164336f6a1b15be0d434a6bbf7289da"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.html#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.html#l00645">Descriptors.hpp:645</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ab023d9a7687e35c0f108458a094c1f56"><div class="ttname"><a href="namespacearmnn.html#ab023d9a7687e35c0f108458a094c1f56">armnn::DepthToSpace</a></div><div class="ttdeci">void DepthToSpace(const TensorInfo &amp;inputInfo, const DepthToSpaceDescriptor &amp;descriptor, const void *inputData, void *outputData, unsigned int dataTypeSize)</div><div class="ttdef"><b>Definition:</b> <a href="_depth_to_space_8cpp_source.html#l00016">DepthToSpace.cpp:16</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a2748f45e58b1c612d473043f711d1434"><div class="ttname"><a href="namespacearmnn.html#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.html#l00023">DetectionPostProcess.cpp:23</a></div></div>
<div class="ttc" id="astructarmnn_1_1_views_descriptor_html_a35546e7b56e6e972a495b48748478ede"><div class="ttname"><a href="structarmnn_1_1_views_descriptor.html#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.html#l00302">Descriptors.cpp:302</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a86d7a7168ac00b75b4971f9aad623698"><div class="ttname"><a href="namespacearmnn.html#a86d7a7168ac00b75b4971f9aad623698">armnn::StridedSlice</a></div><div class="ttdeci">void StridedSlice(const TensorInfo &amp;inputInfo, const StridedSliceDescriptor &amp;params, const void *inputData, void *outputData, unsigned int dataTypeSize)</div><div class="ttdef"><b>Definition:</b> <a href="_strided_slice_8cpp_source.html#l00086">StridedSlice.cpp:86</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a64ddffb38fbe5b78ec92b753cd4bd0ba"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a64ddffb38fbe5b78ec92b753cd4bd0ba">armnn::optimizations::SquashEqualPermuteSiblings</a></div><div class="ttdeci">OptimizeForConnection&lt; Layer, PermuteLayer, SquashEqualSiblingsImpl&lt; PermuteLayer &gt; &gt; SquashEqualPermuteSiblings</div><div class="ttdef"><b>Definition:</b> <a href="_squash_equal_siblings_8hpp_source.html#l00067">SquashEqualSiblings.hpp:67</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd"><div class="ttname"><a href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">armnn::BoostLogSeverityMapping::warning</a></div><div class="ttdeci">@ warning</div></div>
<div class="ttc" id="anamespacearmnn_html_a9d43aa01b882d8776ab9403eea3cf779"><div class="ttname"><a href="namespacearmnn.html#a9d43aa01b882d8776ab9403eea3cf779">armnn::ComputeReductionTensorShape</a></div><div class="ttdeci">const TensorInfo ComputeReductionTensorShape(const armnn::TensorInfo &amp;input, const std::vector&lt; uint32_t &gt; &amp;vAxis, const bool keepDims)</div><div class="ttdoc">Function to compute the output tensor shape based on the axes and if keepDims is set.</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.html#l00320">ArmComputeUtils.hpp:320</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304"><div class="ttname"><a href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304">armnn::ActivationFunction::Square</a></div><div class="ttdeci">@ Square</div></div>
<div class="ttc" id="a_lstm_utils_8cpp_html_afc83b9418e9721cee21de245cb8533de"><div class="ttname"><a href="_lstm_utils_8cpp.html#afc83b9418e9721cee21de245cb8533de">SetActivationParameters</a></div><div class="ttdeci">void SetActivationParameters(uint32_t activation, armnn::ActivationFunction &amp;outArmnnActivation, float &amp;outA, float &amp;outB)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.html#l00258">LstmUtils.cpp:258</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">armnn::LayerType::Input</a></div><div class="ttdeci">@ Input</div></div>
<div class="ttc" id="anamespacearmnn_html_ac8c641d4a69c9a85c487cfbc7ea4d73c"><div class="ttname"><a href="namespacearmnn.html#ac8c641d4a69c9a85c487cfbc7ea4d73c">armnn::NonMaxSuppression</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; NonMaxSuppression(unsigned int numBoxes, const std::vector&lt; float &gt; &amp;boxCorners, const std::vector&lt; float &gt; &amp;scores, float nmsScoreThreshold, unsigned int maxDetection, float nmsIouThreshold)</div><div class="ttdef"><b>Definition:</b> <a href="_detection_post_process_8cpp_source.html#l00048">DetectionPostProcess.cpp:48</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a5b6893cda5b69359a4244c06054da18f"><div class="ttname"><a href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">armnn::ModelOptions</a></div><div class="ttdeci">std::vector&lt; BackendOptions &gt; ModelOptions</div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.html#l00018">BackendOptions.hpp:18</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a227e9ab5e488aa90ba462790ba0e5aec"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a227e9ab5e488aa90ba462790ba0e5aec">armnn::optimizations::FoldPadIntoDepthwiseConvolution2d</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; PadLayer, DepthwiseConvolution2dLayer, pad_fold::FoldPadIntoDepthwiseConvolution2dImpl &gt; FoldPadIntoDepthwiseConvolution2d</div><div class="ttdef"><b>Definition:</b> <a href="_fold_pad_into_layer2d_8hpp_source.html#l00281">FoldPadIntoLayer2d.hpp:281</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a707090747256af276c389e0cf1cb0a9a"><div class="ttname"><a href="namespacearmnn.html#a707090747256af276c389e0cf1cb0a9a">armnn::TuningLevel</a></div><div class="ttdeci">TuningLevel</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_tuning_utils_8hpp_source.html#l00018">ArmComputeTuningUtils.hpp:18</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a7636fbbc4f8ea2d0cf9f3ac2d12a4c62"><div class="ttname"><a href="namespacearmnn.html#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.html#l00013">Activation.cpp:13</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a7e4811ef91f499424bca36e98a2fbd96"><div class="ttname"><a href="namespacearmnn.html#a7e4811ef91f499424bca36e98a2fbd96">armnn::FuseLayer</a></div><div class="ttdeci">LayerType * FuseLayer(OptimizationViews &amp;optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &amp;activationDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_subgraph_utils_8hpp_source.html#l00053">ArmComputeSubgraphUtils.hpp:53</a></div></div>
<div class="ttc" id="anamespacearmnn_html_aa91b61cfa806ac6c8cd326f02dd993d5"><div class="ttname"><a href="namespacearmnn.html#aa91b61cfa806ac6c8cd326f02dd993d5">armnn::NeonElementwiseBinaryWorkloadValidate</a></div><div class="ttdeci">arm_compute::Status NeonElementwiseBinaryWorkloadValidate(const TensorInfo &amp;input0, const TensorInfo &amp;input1, const TensorInfo &amp;output, const ElementwiseBinaryDescriptor &amp;descriptor, const ActivationDescriptor *activationDescriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_elementwise_binary_workload_8cpp_source.html#l00020">NeonElementwiseBinaryWorkload.cpp:20</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a10c50bc964cc8cc559eebcd7df5a8af3a280957607e14bb2ccc1155ae6569aee1"><div class="ttname"><a href="namespacearmnn.html#a10c50bc964cc8cc559eebcd7df5a8af3a280957607e14bb2ccc1155ae6569aee1">armnn::CapabilityClass::CapabilityClassMax</a></div><div class="ttdeci">@ CapabilityClassMax</div></div>
<div class="ttc" id="anamespacearmnn_utils_1_1_filesystem_html_a0477efb2c6f5b41fbfe937fef6db312d"><div class="ttname"><a href="namespacearmnn_utils_1_1_filesystem.html#a0477efb2c6f5b41fbfe937fef6db312d">armnnUtils::Filesystem::CreateDirectory</a></div><div class="ttdeci">std::string CreateDirectory(std::string sPath)</div><div class="ttdoc">Returns full path to temporary folder.</div><div class="ttdef"><b>Definition:</b> <a href="_filesystem_8cpp_source.html#l00047">Filesystem.cpp:47</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a8c88a8a91827e9ccc3cf3ce6b14fcd17"><div class="ttname"><a href="namespacearmnn.html#a8c88a8a91827e9ccc3cf3ce6b14fcd17">armnn::SetValueChecked</a></div><div class="ttdeci">void SetValueChecked(Optional&lt; T &amp; &gt; optionalRef, V &amp;&amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_support_common_8hpp_source.html#l00017">LayerSupportCommon.hpp:17</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_abc1cdfdd0c890de85bfd7eaac1292ffe"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#abc1cdfdd0c890de85bfd7eaac1292ffe">armnn::optimizations::MaxMinIntoBoundedRelu</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; ElementwiseBinaryLayer, ElementwiseBinaryLayer, MaxMinIntoBoundedReluImpl &gt; MaxMinIntoBoundedRelu</div><div class="ttdef"><b>Definition:</b> <a href="_max_min_into_bounded_relu_8hpp_source.html#l00134">MaxMinIntoBoundedRelu.hpp:134</a></div></div>
<div class="ttc" id="anamespacearmnn_utils_html_acee63cd08da47910fc166a1990988fa8"><div class="ttname"><a href="namespacearmnn_utils.html#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.html#l00040">TensorUtils.cpp:40</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a29f8d97b2d74f99c88298881cd1d825b"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a29f8d97b2d74f99c88298881cd1d825b">armnn::optimizations::SquashEqualReshapeSiblings</a></div><div class="ttdeci">OptimizeForConnection&lt; Layer, ReshapeLayer, SquashEqualSiblingsImpl&lt; ReshapeLayer &gt; &gt; SquashEqualReshapeSiblings</div><div class="ttdef"><b>Definition:</b> <a href="_squash_equal_siblings_8hpp_source.html#l00070">SquashEqualSiblings.hpp:70</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a93a3ba385cad27c4774e5fe64c025d3d"><div class="ttname"><a href="namespacearmnn.html#a93a3ba385cad27c4774e5fe64c025d3d">armnn::LogSeverity</a></div><div class="ttdeci">LogSeverity</div><div class="ttdef"><b>Definition:</b> <a href="_utils_8hpp_source.html#l00013">Utils.hpp:13</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ac4f8557279754ed7b3f749d55b0e3047a43d11850893d2fe84a1e618121c1cc0a"><div class="ttname"><a href="namespacearmnn.html#ac4f8557279754ed7b3f749d55b0e3047a43d11850893d2fe84a1e618121c1cc0a">armnn::BinaryOperation::Div</a></div><div class="ttdeci">@ Div</div></div>
<div class="ttc" id="anamespacearmnn_html_adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb"><div class="ttname"><a href="namespacearmnn.html#adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb">armnn::OutputShapeRounding::Ceiling</a></div><div class="ttdeci">@ Ceiling</div></div>
<div class="ttc" id="anamespacearmnn_html_ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d"><div class="ttname"><a href="namespacearmnn.html#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">armnn::DataType::Signed64</a></div><div class="ttdeci">@ Signed64</div></div>
<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a">armnn::LayerType::Convolution2d</a></div><div class="ttdeci">@ Convolution2d</div></div>
<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4ae66a93a31fb93839c8369265cd44695c"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4ae66a93a31fb93839c8369265cd44695c">armnn::LayerType::FirstLayer</a></div><div class="ttdeci">@ FirstLayer</div></div>
<div class="ttc" id="anamespacearmnn_html_a6bab17bfd45c2fa4592c431bc25ad10e"><div class="ttname"><a href="namespacearmnn.html#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.html#l00034">BackendId.hpp:34</a></div></div>
<div class="ttc" id="anamespacearmnn_html_aa42e128b41f4e966fc901f9bf42c5a1c"><div class="ttname"><a href="namespacearmnn.html#aa42e128b41f4e966fc901f9bf42c5a1c">armnn::Optimize</a></div><div class="ttdeci">IOptimizedNetworkPtr Optimize(const INetwork &amp;network, const std::vector&lt; BackendId &gt; &amp;backendPreferences, const IDeviceSpec &amp;deviceSpec, const OptimizerOptionsOpaque &amp;options=OptimizerOptionsOpaque(), Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; messages=EmptyOptional())</div><div class="ttdoc">Create an optimized version of the network.</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l02145">Network.cpp:2145</a></div></div>
<div class="ttc" id="astructarmnn_1_1_batch_to_space_nd_descriptor_html_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_batch_to_space_nd_descriptor.html#a6089e1ca91914015777ea780a513131a">armnn::BatchToSpaceNdDescriptor::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.html#l00902">Descriptors.hpp:902</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5"><div class="ttname"><a href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5">armnn::ComparisonOperation::Equal</a></div><div class="ttdeci">@ Equal</div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a2f9d1a13be2ac1c4213729a0ef181fc0"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a2f9d1a13be2ac1c4213729a0ef181fc0">armnn::optimizations::OptimizeInverseTransposes</a></div><div class="ttdeci">OptimizeForConnection&lt; TransposeLayer, TransposeLayer, OptimizeInversePermutesImpl&lt; TransposeLayer &gt; &gt; OptimizeInverseTransposes</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_inverse_permutes_8hpp_source.html#l00045">OptimizeInversePermutes.hpp:45</a></div></div>
<div class="ttc" id="aclassarmnn_utils_1_1_data_layout_indexed_html_a1e25d8623da985a43597b5756c73b206"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.html#a1e25d8623da985a43597b5756c73b206">armnnUtils::DataLayoutIndexed::GetIndex</a></div><div class="ttdeci">unsigned int GetIndex(const armnn::TensorShape &amp;shape, unsigned int batchIndex, unsigned int channelIndex, unsigned int heightIndex, unsigned int widthIndex) const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.html#l00028">DataLayoutIndexed.hpp:28</a></div></div>
<div class="ttc" id="astructarmnn_1_1_depthwise_convolution2d_descriptor_html_aa3c6a77a963a98ccb8ea7b8fd008a8c1"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.html#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.html#l00704">Descriptors.hpp:704</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad605d1661fa0d8c7fea651d82fbe11c9aa94d2fcabc6b001015aeddfa19266e6f"><div class="ttname"><a href="namespacearmnn.html#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_1_1optimizations_html_a4fc55afb4885278ad1510b2c4307af76"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a4fc55afb4885278ad1510b2c4307af76">armnn::optimizations::AddBroadcastReshapeLayer</a></div><div class="ttdeci">OptimizeForType&lt; Layer, AddBroadcastReshapeLayerImpl &gt; AddBroadcastReshapeLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_broadcast_reshape_layer_8hpp_source.html#l00094">AddBroadcastReshapeLayer.hpp:94</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling3d_descriptor_html_acc978b36fd5d949bc781d7638e6e08b9"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.html#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.html#l00491">Descriptors.hpp:491</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_null_pointer_exception_html"><div class="ttname"><a href="classarmnn_1_1_null_pointer_exception.html">armnn::NullPointerException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.html#l00146">Exceptions.hpp:146</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a686b8288a04b3ffff67d560eea53f6be"><div class="ttname"><a href="namespacearmnn.html#a686b8288a04b3ffff67d560eea53f6be">armnn::swap</a></div><div class="ttdeci">void swap(ViewsDescriptor &amp;first, ViewsDescriptor &amp;second)</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.html#l00366">Descriptors.cpp:366</a></div></div>
<div class="ttc" id="anamespacearmnn_utils_html_ab53d94ea22b51c6bcdf9584644bd67bb"><div class="ttname"><a href="namespacearmnn_utils.html#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.html#l00021">TensorUtils.cpp:21</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_tensor_shape_html_a5a212540c00931bd2a4b4041beda33ae"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.html#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.html#l00092">Tensor.hpp:92</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a56e54a818166a2f4b2c1a7f76a3629ff"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a56e54a818166a2f4b2c1a7f76a3629ff">armnn::optimizations::FuseBatchNormIntoDepthwiseConvolution2DFloat32</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; DepthwiseConvolution2dLayer, BatchNormalizationLayer, FuseBatchNorm&lt; DepthwiseConvolution2dLayer, armnn::DataType::Float32 &gt; &gt; FuseBatchNormIntoDepthwiseConvolution2DFloat32</div><div class="ttdef"><b>Definition:</b> <a href="_fuse_batch_norm_8hpp_source.html#l00232">FuseBatchNorm.hpp:232</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00"><div class="ttname"><a href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00">armnn::PaddingMode::Reflect</a></div><div class="ttdeci">@ Reflect</div></div>
<div class="ttc" id="anamespacearmnn_html_a1351e01f9fb983937caf79e353142b41"><div class="ttname"><a href="namespacearmnn.html#a1351e01f9fb983937caf79e353142b41">armnn::CopyArmComputeTensorData</a></div><div class="ttdeci">void CopyArmComputeTensorData(arm_compute::Tensor &amp;dstTensor, const T *srcData)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_workload_utils_8hpp_source.html#l00063">NeonWorkloadUtils.hpp:63</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4"><div class="ttname"><a href="namespacearmnn.html#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.html#l00491">Types.hpp:491</a></div></div>
<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a8341ca3512ebafb19d60eba44d40d9e4"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a8341ca3512ebafb19d60eba44d40d9e4">armnn::optimizations::OptimizeConsecutiveReshapes</a></div><div class="ttdeci">OptimizeForConnection&lt; ReshapeLayer, ReshapeLayer, OptimizeConsecutiveReshapesImpl &gt; OptimizeConsecutiveReshapes</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_consecutive_reshapes_8hpp_source.html#l00061">OptimizeConsecutiveReshapes.hpp:61</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ae2e0c1d8160fadce44d479379790718e"><div class="ttname"><a href="namespacearmnn.html#ae2e0c1d8160fadce44d479379790718e">armnn::ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a></div><div class="ttdeci">arm_compute::FullyConnectedLayerInfo ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo(const FullyConnectedDescriptor &amp;fullyConnectedDesc, const ActivationDescriptor *activationDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.html#l00194">ArmComputeUtils.hpp:194</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_tensor_shape_html_a8846406ac37fbd2204f0be16ee05d5b7"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.html#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.html#l00181">Tensor.cpp:181</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a41d0463c55ff6a85d84bfd94e5d25805"><div class="ttname"><a href="namespacearmnn.html#a41d0463c55ff6a85d84bfd94e5d25805">armnn::ScatterOperation</a></div><div class="ttdeci">float ScatterOperation(ScatterNdFunction operation, float input, float update)</div><div class="ttdef"><b>Definition:</b> <a href="_scatter_nd_8cpp_source.html#l00018">ScatterNd.cpp:18</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a8bf1222ae8931bf663fa076b3e3b6f0e"><div class="ttname"><a href="namespacearmnn.html#a8bf1222ae8931bf663fa076b3e3b6f0e">armnn::CheckScaleSetOnQuantizedType</a></div><div class="ttdeci">bool CheckScaleSetOnQuantizedType(Layer *layer, Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l00801">Network.cpp:801</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_optional_reference_switch_html_a77c7d528ac063d870b8c8426ec81c1c3"><div class="ttname"><a href="classarmnn_1_1_optional_reference_switch.html#a77c7d528ac063d870b8c8426ec81c1c3">armnn::OptionalReferenceSwitch&lt; std::is_reference&lt; T &gt;::value, T &gt;::value</a></div><div class="ttdeci">const T &amp; value() const</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.html#l00146">Optional.hpp:146</a></div></div>
<div class="ttc" id="anamespacearmnn_html_afdba36f125621d775d471f0daf613df2"><div class="ttname"><a href="namespacearmnn.html#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.html#l00062">ArmComputeUtils.hpp:62</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255"><div class="ttname"><a href="namespacearmnn.html#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">armnn::PaddingMode::Constant</a></div><div class="ttdeci">@ Constant</div></div>
<div class="ttc" id="anamespacearmnn_html_a44a3b98b37a25c995aa9e4dae7d7b456"><div class="ttname"><a href="namespacearmnn.html#a44a3b98b37a25c995aa9e4dae7d7b456">armnn::ComputeAclAxis</a></div><div class="ttdeci">int ComputeAclAxis(const int &amp;armnnAxis, const armnn::TensorInfo &amp;tensor)</div><div class="ttdoc">Function to convert ArmNN axis (left to right) to ACL axis (right to left) ranging from [-rank,...</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.html#l00246">ArmComputeUtils.hpp:246</a></div></div>
<div class="ttc" id="astructarmnn_1_1_pooling2d_descriptor_html_a0031997bf43bd2747656c31e4977793a"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.html#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.html#l00405">Descriptors.hpp:405</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086"><div class="ttname"><a href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">armnn::Status::Failure</a></div><div class="ttdeci">@ Failure</div></div>
<div class="ttc" id="anamespacearmnn_html_a562616feb340f23dbad3d86eb8706218"><div class="ttname"><a href="namespacearmnn.html#a562616feb340f23dbad3d86eb8706218">armnn::WrapClError</a></div><div class="ttdeci">RuntimeException WrapClError(const cl::Error &amp;clError, const CheckLocation &amp;location)</div><div class="ttdef"><b>Definition:</b> <a href="_cl_workload_utils_8hpp_source.html#l00159">ClWorkloadUtils.hpp:159</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a4f1a1b88b01d8dfda3803776e0778a49"><div class="ttname"><a href="namespacearmnn.html#a4f1a1b88b01d8dfda3803776e0778a49">armnn::Gather</a></div><div class="ttdeci">void Gather(const TensorInfo &amp;paramsInfo, const TensorInfo &amp;indicesInfo, const TensorInfo &amp;outputInfo, Decoder&lt; float &gt; &amp;params, const int32_t *indices, Encoder&lt; float &gt; &amp;output, const int32_t axis_int)</div><div class="ttdef"><b>Definition:</b> <a href="_gather_8cpp_source.html#l00015">Gather.cpp:15</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_optional_base_html_a86b749ce2c4bc627fa8a1fcfaf0e314f"><div class="ttname"><a href="classarmnn_1_1_optional_base.html#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.html#l00053">Optional.hpp:53</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">armnn::LayerType::Output</a></div><div class="ttdeci">@ Output</div></div>
<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">armnn::LayerType::Constant</a></div><div class="ttdeci">@ Constant</div></div>
<div class="ttc" id="anamespacearmnn_html_a71c3bdadfe1c69aba2cbf054bff47744"><div class="ttname"><a href="namespacearmnn.html#a71c3bdadfe1c69aba2cbf054bff47744">armnn::GetCapability</a></div><div class="ttdeci">Optional&lt; const BackendOptions::BackendOption &gt; GetCapability(const std::string &amp;backendCapabilityName, const BackendCapabilities &amp;capabilities)</div><div class="ttdoc">Returns a BackendCapability if the backend lists the capability The BackendCapability must then be in...</div><div class="ttdef"><b>Definition:</b> <a href="_backend_helper_8cpp_source.html#l00037">BackendHelper.cpp:37</a></div></div>
<div class="ttc" id="anamespacearmnn_html_ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f"><div class="ttname"><a href="namespacearmnn.html#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a></div><div class="ttdeci">@ NCHW</div></div>
<div class="ttc" id="aclassarmnn_1_1_i_optimized_network_html_a374d52340ec8dc02a819acc20fb5aa92"><div class="ttname"><a href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">armnn::IOptimizedNetwork::pOptimizedNetworkImpl</a></div><div class="ttdeci">std::unique_ptr&lt; OptimizedNetworkImpl &gt; pOptimizedNetworkImpl</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.html#l00953">INetwork.hpp:953</a></div></div>
<div class="ttc" id="anamespacearmnn_html_af52a698836d638d0a71263c6c1496a05"><div class="ttname"><a href="namespacearmnn.html#af52a698836d638d0a71263c6c1496a05">armnn::AssignBackendsIConnectable</a></div><div class="ttdeci">void AssignBackendsIConnectable(OptimizedNetworkImpl *optNetObjPtr, IConnectableLayer *it, Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages, OptimizationResult &amp;result, BackendSettings &amp;backendSettings, std::vector&lt; BackendId &gt; &amp;availablePreferredBackends)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01073">Network.cpp:1073</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4"><div class="ttname"><a href="namespacearmnn.html#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">armnn::ActivationFunction::Sigmoid</a></div><div class="ttdeci">@ Sigmoid</div></div>
<div class="ttc" id="a_exceptions_8hpp_html_a5b0cd1f24b12298894d6367f186ea6dc"><div class="ttname"><a href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a></div><div class="ttdeci">#define ARMNN_THROW_INVALIDARG_MSG_IF_FALSE(_cond, _str)</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.html#l00210">Exceptions.hpp:210</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a406399d2a16ead98e4e93cdd57adead4"><div class="ttname"><a href="namespacearmnn.html#a406399d2a16ead98e4e93cdd57adead4">armnn::HasMatchingCapability</a></div><div class="ttdeci">bool HasMatchingCapability(const BackendOptions::BackendOption &amp;capability, const BackendCapabilities &amp;capabilities)</div><div class="ttdoc">Convenience function to check if a given capability matches a capability in a BackendCapabilities str...</div><div class="ttdef"><b>Definition:</b> <a href="_backend_helper_8cpp_source.html#l00085">BackendHelper.cpp:85</a></div></div>
<div class="ttc" id="a_lstm_utils_8cpp_html_a8c4a96233c9b62c76d611316da11124b"><div class="ttname"><a href="_lstm_utils_8cpp.html#a8c4a96233c9b62c76d611316da11124b">VectorBatchVectorAssign</a></div><div class="ttdeci">void VectorBatchVectorAssign(armnn::Decoder&lt; float &gt; &amp;vector, uint32_t vSize, uint32_t nBatch, armnn::Encoder&lt; float &gt; &amp;outBatchVector)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.html#l00113">LstmUtils.cpp:113</a></div></div>
<div class="ttc" id="astructarmnn_1_1_space_to_depth_descriptor_html_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_space_to_depth_descriptor.html#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.html#l01095">Descriptors.hpp:1095</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a"><div class="ttname"><a href="namespacearmnn.html#a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a">armnn::ComparisonOperation::Greater</a></div><div class="ttdeci">@ Greater</div></div>
<div class="ttc" id="anamespacearmnn_html_a5826c31d9342002f512999ce89841073"><div class="ttname"><a href="namespacearmnn.html#a5826c31d9342002f512999ce89841073">armnn::DetectionPostProcess</a></div><div class="ttdeci">void DetectionPostProcess(const TensorInfo &amp;boxEncodingsInfo, const TensorInfo &amp;scoresInfo, const TensorInfo &amp;, const TensorInfo &amp;detectionBoxesInfo, const TensorInfo &amp;, const TensorInfo &amp;, const TensorInfo &amp;, const DetectionPostProcessDescriptor &amp;desc, Decoder&lt; float &gt; &amp;boxEncodings, Decoder&lt; float &gt; &amp;scores, Decoder&lt; float &gt; &amp;anchors, float *detectionBoxes, float *detectionClasses, float *detectionScores, float *numDetections)</div><div class="ttdef"><b>Definition:</b> <a href="_detection_post_process_8cpp_source.html#l00139">DetectionPostProcess.cpp:139</a></div></div>
<div class="ttc" id="anamespacearmnn_html_a869f740e9c2fcb8642350c6e3d0b3742"><div class="ttname"><a href="namespacearmnn.html#a869f740e9c2fcb8642350c6e3d0b3742">armnn::NextIndex</a></div><div class="ttdeci">bool NextIndex(const unsigned int numDims, const armnn::TensorShape &amp;dims, std::vector&lt; unsigned int &gt; &amp;current)</div><div class="ttdef"><b>Definition:</b> <a href="_reduce_8cpp_source.html#l00019">Reduce.cpp:19</a></div></div>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="namespacearmnn.html">armnn</a></li>
<li class="footer">Generated on Thu May 16 2024 09:31:54 for Arm NN by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
</ul>
</div>
</body>
</html>