<!-- 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: src/backends/gpuFsa/layers -&gt; aclCommon Relation</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('dir_6735d107a3ea44e973a098b746f1b3bd.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="contents">
<h3>layers &rarr; aclCommon Relation</h3><table class="dirtab"><tr class="dirtab"><th class="dirtab">File in src/backends/gpuFsa/layers</th><th class="dirtab">Includes file in src/backends/aclCommon</th></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="_gpu_fsa_activation_8cpp.html">GpuFsaActivation.cpp</a></td><td class="dirtab"><a class="el" href="_arm_compute_tensor_utils_8hpp.html">ArmComputeTensorUtils.hpp</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="_gpu_fsa_batch_mat_mul_8cpp.html">GpuFsaBatchMatMul.cpp</a></td><td class="dirtab"><a class="el" href="_arm_compute_tensor_utils_8hpp.html">ArmComputeTensorUtils.hpp</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="_gpu_fsa_cast_8cpp.html">GpuFsaCast.cpp</a></td><td class="dirtab"><a class="el" href="_arm_compute_tensor_utils_8hpp.html">ArmComputeTensorUtils.hpp</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="_gpu_fsa_convolution2d_8cpp.html">GpuFsaConvolution2d.cpp</a></td><td class="dirtab"><a class="el" href="_arm_compute_tensor_utils_8hpp.html">ArmComputeTensorUtils.hpp</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="_gpu_fsa_depthwise_convolution2d_8cpp.html">GpuFsaDepthwiseConvolution2d.cpp</a></td><td class="dirtab"><a class="el" href="_arm_compute_tensor_utils_8hpp.html">ArmComputeTensorUtils.hpp</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="_gpu_fsa_elementwise_binary_8cpp.html">GpuFsaElementwiseBinary.cpp</a></td><td class="dirtab"><a class="el" href="_arm_compute_tensor_utils_8hpp.html">ArmComputeTensorUtils.hpp</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="_gpu_fsa_pooling2d_8cpp.html">GpuFsaPooling2d.cpp</a></td><td class="dirtab"><a class="el" href="_arm_compute_tensor_utils_8hpp.html">ArmComputeTensorUtils.hpp</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="_gpu_fsa_reshape_8cpp.html">GpuFsaReshape.cpp</a></td><td class="dirtab"><a class="el" href="_arm_compute_tensor_utils_8hpp.html">ArmComputeTensorUtils.hpp</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="_gpu_fsa_resize_8cpp.html">GpuFsaResize.cpp</a></td><td class="dirtab"><a class="el" href="_arm_compute_tensor_utils_8hpp.html">ArmComputeTensorUtils.hpp</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="_gpu_fsa_softmax_8cpp.html">GpuFsaSoftmax.cpp</a></td><td class="dirtab"><a class="el" href="_arm_compute_tensor_utils_8hpp.html">ArmComputeTensorUtils.hpp</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="_gpu_fsa_softmax_8cpp.html">GpuFsaSoftmax.cpp</a></td><td class="dirtab"><a class="el" href="_arm_compute_utils_8hpp.html">ArmComputeUtils.hpp</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="_utils_gpu_fsa_8cpp.html">UtilsGpuFsa.cpp</a></td><td class="dirtab"><a class="el" href="_arm_compute_tensor_utils_8hpp.html">ArmComputeTensorUtils.hpp</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="_utils_gpu_fsa_8cpp.html">UtilsGpuFsa.cpp</a></td><td class="dirtab"><a class="el" href="_arm_compute_utils_8hpp.html">ArmComputeUtils.hpp</a></td></tr></table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_0f3cdec46afbc61a1ded8e1687c9c9a0.html">backends</a></li><li class="navelem"><a class="el" href="dir_dd5880bc3520e42c5318e86a9fdc97f6.html">gpuFsa</a></li><li class="navelem"><a class="el" href="dir_6735d107a3ea44e973a098b746f1b3bd.html">layers</a></li>
    <li class="footer">Generated on Thu May 16 2024 09:32:00 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>
