blob: 1a1c5226408c27ef1920c48bdcf6e370298e593c [file] [log] [blame]
<!-- HTML header for doxygen 1.8.15-->
<!-- Remember to use version doxygen 1.8.15 +-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.15"/>
<meta name="robots" content="NOINDEX, NOFOLLOW" /> <!-- Prevent indexing by search engines -->
<title>Compute Library: arm_compute/core/NEON/kernels/NEWinogradConvolutionLayerKernel.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(initResizable);
/* @license-end */</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="stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<img alt="Compute Library" src="https://raw.githubusercontent.com/ARM-software/ComputeLibrary/gh-pages/ACL_logo.png" style="max-width: 100%;margin-top: 15px;margin-left: 10px"/>
<td style="padding-left: 0.5em;">
<div id="projectname">
&#160;<span id="projectnumber">19.08</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.15 -->
<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('_n_e_winograd_convolution_layer_kernel_8h_source.xhtml','');});
/* @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="headertitle">
<div class="title">NEWinogradConvolutionLayerKernel.h</div> </div>
</div><!--header-->
<div class="contents">
<a href="_n_e_winograd_convolution_layer_kernel_8h.xhtml">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (c) 2017-2019 ARM Limited.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * SPDX-License-Identifier: MIT</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * of this software and associated documentation files (the &quot;Software&quot;), to</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * deal in the Software without restriction, including without limitation the</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * sell copies of the Software, and to permit persons to whom the Software is</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * furnished to do so, subject to the following conditions:</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included in all</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * copies or substantial portions of the Software.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> * SOFTWARE.</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#ifndef __ARM_COMPUTE_NEGEMMWINOGRADCONVOLUTIONLAYERKERNEL_H__</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#define __ARM_COMPUTE_NEGEMMWINOGRADCONVOLUTIONLAYERKERNEL_H__</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_i_n_e_kernel_8h.xhtml">arm_compute/core/NEON/INEKernel.h</a>&quot;</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &quot;arm_compute/core/NEON/kernels/convolution/common/convolution.hpp&quot;</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;arm_compute/core/NEON/kernels/convolution/common/tensor.hpp&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;arm_compute/core/NEON/kernels/convolution/winograd/winograd_layer.hpp&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacearm__compute.xhtml">arm_compute</a></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;{</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">class </span>ITensor;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel.xhtml"> 38</a></span>&#160;<span class="keyword">class </span><a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel.xhtml">INEWinogradLayerTransformInputKernel</a> : <span class="keyword">public</span> <a class="code" href="classarm__compute_1_1_i_c_p_p_kernel.xhtml">INEKernel</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="keyword">public</span>:</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel.xhtml#adf88b409a140a439b6e5479da2f4cb1f">get_working_space_size</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_threads) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel.xhtml#a1187b798595c88feeb65d15441a4f72f">get_input_storage_size</a>(<span class="keywordtype">int</span> num_batches, <span class="keywordtype">int</span> num_channels, <span class="keywordtype">int</span> num_rows, <span class="keywordtype">int</span> num_cols, <span class="keywordtype">bool</span> same_padding) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel.xhtml#ae25b6ed77179808984b17c39e078ad96">get_matrix_stride</a>(<span class="keyword">const</span> KernelShape &amp;kernel_shape, <span class="keyword">const</span> Tensor4DShape &amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a865514e30baa11b11c8fa65f944532fb">input_shape</a>, <span class="keyword">const</span> PaddingType padding_type) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel.xhtml#ae7ca946df6f3f9ab2649e0e328a8cde2">configure</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *input_nhwc, <span class="keyword">const</span> <span class="keywordtype">int</span> num_batches, <span class="keyword">const</span> <span class="keywordtype">int</span> num_rows, <span class="keyword">const</span> <span class="keywordtype">int</span> num_cols, <span class="keyword">const</span> <span class="keywordtype">int</span> num_channels,</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">const</span> PaddingType <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a735a025fce26c1ef147b54426df18181">padding</a>, <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *output, <span class="keyword">const</span> <span class="keywordtype">int</span> matrix_stride, <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *workspace) = 0;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel.xhtml#a57db7dcc6716d3a676a422bb2839036f"> 91</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel.xhtml#a57db7dcc6716d3a676a422bb2839036f">~INEWinogradLayerTransformInputKernel</a>()</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 class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keywordtype">int</span> OutputTileRows, <span class="keywordtype">int</span> OutputTileCols, <span class="keywordtype">int</span> KernelRows, <span class="keywordtype">int</span> KernelCols&gt;</div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml"> 98</a></span>&#160;<span class="keyword">class </span><a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml">NEWinogradLayerTransformInputKernel</a> : <span class="keyword">public</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel.xhtml">INEWinogradLayerTransformInputKernel</a>&lt;T&gt;</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="keyword">public</span>:</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a975ca7003dae590387fdf8546e1b08fd">NEWinogradLayerTransformInputKernel</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml">NEWinogradLayerTransformInputKernel</a> &amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml">NEWinogradLayerTransformInputKernel</a> &amp;<a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a899571657a22f26128c31b35588c8fb8">operator=</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml">NEWinogradLayerTransformInputKernel</a> &amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a975ca7003dae590387fdf8546e1b08fd">NEWinogradLayerTransformInputKernel</a>(<a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml">NEWinogradLayerTransformInputKernel</a> &amp;&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml">NEWinogradLayerTransformInputKernel</a> &amp;<a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a899571657a22f26128c31b35588c8fb8">operator=</a>(<a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml">NEWinogradLayerTransformInputKernel</a> &amp;&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#aad80a063ffa5b335ec0ba83d3116e2e3">~NEWinogradLayerTransformInputKernel</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a44ffbab5d0fe4ae10cbf84ddae1a90fe">get_input_storage_size</a>(</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordtype">int</span> num_batches,</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordtype">int</span> num_channels,</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordtype">int</span> num_rows,</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordtype">int</span> num_cols,</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordtype">bool</span> same_padding) <span class="keyword">const override</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a8ccc8c221f26d7e2ed0b5cfbe4dc1b83">get_working_space_size</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_threads) <span class="keyword">const override</span>;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#ae18e3efe8200578009c1f7a15a4a2fa0">get_matrix_stride</a>(<span class="keyword">const</span> KernelShape &amp;kernel_shape, <span class="keyword">const</span> Tensor4DShape &amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a865514e30baa11b11c8fa65f944532fb">input_shape</a>, <span class="keyword">const</span> PaddingType padding_type) <span class="keyword">const override</span>;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a975ca7003dae590387fdf8546e1b08fd">NEWinogradLayerTransformInputKernel</a>();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#ab5656bb5b6334bdbe6e606c715872828"> 155</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#ab5656bb5b6334bdbe6e606c715872828">name</a>()<span class="keyword"> const override</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;NEWinogradLayerTransformInputKernel&quot;</span>;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a2de2ab5ada4b5a360770b670af19b48d">configure</a>(</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *input_nhwc,</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> num_batches,</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> num_rows,</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> num_cols,</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> num_channels,</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keyword">const</span> PaddingType <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a735a025fce26c1ef147b54426df18181">padding</a>,</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *output,</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> matrix_stride,</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *workspace) <span class="keyword">override</span>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="comment">// Inherited methods overridden:</span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a112b35dd205c62ea6ed1447ef226da82">run</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_window.xhtml">Window</a> &amp;<a class="code" href="classarm__compute_1_1_i_kernel.xhtml#ad34a46f53686c12a5c5e717cc9617fb6">window</a>, <span class="keyword">const</span> <a class="code" href="structarm__compute_1_1_thread_info.xhtml">ThreadInfo</a> &amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a4f4125dba5283887b34f889b1c615c0c">info</a>) <span class="keyword">override</span>;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a1bc75fe67cfd09e90f240a935da92f54"> 187</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a1bc75fe67cfd09e90f240a935da92f54">WinogradBase</a> = winograd::WinogradGEMM&lt;OutputTileRows, OutputTileCols, KernelRows, KernelCols, winograd::WinogradRoots::Integers&gt;;</div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#af17b2792d63e38a0eea385635191e836"> 189</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#af17b2792d63e38a0eea385635191e836">WinogradConv</a> = <span class="keyword">typename</span> WinogradBase::template Convolution&lt;T, T&gt;;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keyword">static</span> <a class="code" href="classarm__compute_1_1_status.xhtml">Status</a> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a6d3d1d4d66f89908455bc5f05e259ce9">validate</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor_info.xhtml">ITensorInfo</a> *input, <span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor_info.xhtml">ITensorInfo</a> *output, <span class="keyword">const</span> <a class="code" href="structarm__compute_1_1_winograd_info.xhtml">WinogradInfo</a> &amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a809d18ccde99d938a68cb90ef53aa749">winograd_info</a>);</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="keyword">private</span>:</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keyword">using</span> InputTransform = <span class="keyword">typename</span> WinogradBase::template InputTransform&lt;T, T&gt;;</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; std::unique_ptr&lt;InputTransform&gt; _transform{ <span class="keyword">nullptr</span> };</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *_input_nhwc;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordtype">int</span> _num_batches; </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordtype">int</span> _num_rows; </div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordtype">int</span> _num_cols; </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordtype">int</span> _num_channels; </div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; PaddingType _padding; </div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *_output; </div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordtype">int</span> _matrix_stride; </div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordtype">int</span> _padding_top; </div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordtype">int</span> _padding_left; </div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordtype">int</span> _padding_right; </div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordtype">int</span> _padding_bottom; </div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *_workspace;</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="l00221"></a><span class="lineno"> 221</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel.xhtml"> 222</a></span>&#160;<span class="keyword">class </span><a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel.xhtml">INEWinogradLayerTransformOutputKernel</a> : <span class="keyword">public</span> <a class="code" href="classarm__compute_1_1_i_c_p_p_kernel.xhtml">INEKernel</a></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">public</span>:</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel.xhtml#adf88b409a140a439b6e5479da2f4cb1f">get_working_space_size</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_threads) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel.xhtml#a638d7da59618abe59378576a0ef76929">get_output_storage_size</a>(<span class="keywordtype">int</span> num_batches, <span class="keywordtype">int</span> num_rows, <span class="keywordtype">int</span> num_cols, <span class="keywordtype">int</span> num_output_channels, <span class="keywordtype">bool</span> same_padding) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel.xhtml#ae25b6ed77179808984b17c39e078ad96">get_matrix_stride</a>(<span class="keyword">const</span> KernelShape &amp;kernel_shape, <span class="keyword">const</span> Tensor4DShape &amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a865514e30baa11b11c8fa65f944532fb">input_shape</a>, <span class="keyword">const</span> PaddingType padding_type) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">virtual</span> Tensor4DShape <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel.xhtml#a10f4ee28637f13bfbfa0ec1f13972ac1">get_output_shape</a>(<span class="keyword">const</span> KernelShape &amp;kernel_shape, <span class="keyword">const</span> Tensor4DShape &amp;in_shape, <span class="keyword">const</span> PaddingType <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a735a025fce26c1ef147b54426df18181">padding</a>) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel.xhtml#ab8058b6dab77eab1e7554434f79d84b6">configure</a>(</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *biases,</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *transformed_output,</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> matrix_stride,</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *output_nhwc,</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> num_batches,</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> num_rows,</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> num_cols,</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> num_channels,</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *workspace) = 0;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel.xhtml#a0bda64948b232256769698cde90fcdb0"> 293</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel.xhtml#a0bda64948b232256769698cde90fcdb0">~INEWinogradLayerTransformOutputKernel</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; }</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="l00299"></a><span class="lineno"> 299</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keywordtype">int</span> OutputTileRows, <span class="keywordtype">int</span> OutputTileCols, <span class="keywordtype">int</span> KernelRows, <span class="keywordtype">int</span> KernelCols&gt;</div><div class="line"><a name="l00300"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml"> 300</a></span>&#160;<span class="keyword">class </span><a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml">NEWinogradLayerTransformOutputKernel</a> : <span class="keyword">public</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel.xhtml">INEWinogradLayerTransformOutputKernel</a>&lt;T&gt;</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="keyword">public</span>:</div><div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#ab5656bb5b6334bdbe6e606c715872828"> 303</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#ab5656bb5b6334bdbe6e606c715872828">name</a>()<span class="keyword"> const override</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;NEWinogradLayerTransformOutputKernel&quot;</span>;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#a938350d536f0350fd2fd9eacf5d5f243">NEWinogradLayerTransformOutputKernel</a>();</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#a938350d536f0350fd2fd9eacf5d5f243">NEWinogradLayerTransformOutputKernel</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml">NEWinogradLayerTransformOutputKernel</a> &amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml">NEWinogradLayerTransformOutputKernel</a> &amp;<a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#a751da38633e08a705df626b6146085b2">operator=</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml">NEWinogradLayerTransformOutputKernel</a> &amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#a938350d536f0350fd2fd9eacf5d5f243">NEWinogradLayerTransformOutputKernel</a>(<a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml">NEWinogradLayerTransformOutputKernel</a> &amp;&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml">NEWinogradLayerTransformOutputKernel</a> &amp;<a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#a751da38633e08a705df626b6146085b2">operator=</a>(<a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml">NEWinogradLayerTransformOutputKernel</a> &amp;&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#aa795257b6b83a37081c7c2b904a75512">~NEWinogradLayerTransformOutputKernel</a>() = <span class="keywordflow">default</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">// Inherited methods overridden:</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="comment"></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#ab62748ccdc2d0696bca7e8cddbbb33af">get_output_storage_size</a>(<span class="keywordtype">int</span> num_batches, <span class="keywordtype">int</span> num_rows, <span class="keywordtype">int</span> num_cols, <span class="keywordtype">int</span> num_output_channels, <span class="keywordtype">bool</span> same_padding) <span class="keyword">const override</span>;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#ae18e3efe8200578009c1f7a15a4a2fa0">get_matrix_stride</a>(<span class="keyword">const</span> KernelShape &amp;kernel_shape, <span class="keyword">const</span> Tensor4DShape &amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a865514e30baa11b11c8fa65f944532fb">input_shape</a>, <span class="keyword">const</span> PaddingType padding_type) <span class="keyword">const override</span>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; Tensor4DShape <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#acb7b954c56d087e3d2451f92e62eea60">get_output_shape</a>(<span class="keyword">const</span> KernelShape &amp;kernel_shape, <span class="keyword">const</span> Tensor4DShape &amp;in_shape, <span class="keyword">const</span> PaddingType <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a735a025fce26c1ef147b54426df18181">padding</a>) <span class="keyword">const override</span>;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#a8ccc8c221f26d7e2ed0b5cfbe4dc1b83">get_working_space_size</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_threads) <span class="keyword">const override</span>;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#ad19a40132fc8ebdb217819c865c5ad0d">configure</a>(</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *biases,</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *transformed_output,</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> matrix_stride,</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *output_nhwc,</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> num_batches,</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> num_rows,</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> num_cols,</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> num_channels,</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *workspace) <span class="keyword">override</span>;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#a112b35dd205c62ea6ed1447ef226da82">run</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_window.xhtml">Window</a> &amp;<a class="code" href="classarm__compute_1_1_i_kernel.xhtml#ad34a46f53686c12a5c5e717cc9617fb6">window</a>, <span class="keyword">const</span> <a class="code" href="structarm__compute_1_1_thread_info.xhtml">ThreadInfo</a> &amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a4f4125dba5283887b34f889b1c615c0c">info</a>) <span class="keyword">override</span>;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keyword">static</span> <a class="code" href="classarm__compute_1_1_status.xhtml">Status</a> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#a9ede996037a6406aca5217f9ad5e2f28">validate</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor_info.xhtml">ITensorInfo</a> *input, <span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor_info.xhtml">ITensorInfo</a> *<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a3a77be8aebd8e00522b32061d46ccdbd">bias</a>, <span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor_info.xhtml">ITensorInfo</a> *output, <span class="keyword">const</span> <a class="code" href="structarm__compute_1_1_winograd_info.xhtml">WinogradInfo</a> &amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a809d18ccde99d938a68cb90ef53aa749">winograd_info</a>);</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keyword">using</span> WinogradBase = winograd::WinogradGEMM&lt;OutputTileRows, OutputTileCols, KernelRows, KernelCols, winograd::WinogradRoots::Integers&gt;;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keyword">using</span> WinogradConv = <span class="keyword">typename</span> WinogradBase::template Convolution&lt;T, T&gt;;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keyword">using</span> OutputTransform = <span class="keyword">typename</span> WinogradBase::template OutputTransform&lt;T, T&gt;;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; std::unique_ptr&lt;OutputTransform&gt; _transform{ <span class="keyword">nullptr</span> };</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keyword">const</span> ITensor *_biases;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keyword">const</span> ITensor *_transformed_output;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; ITensor *_workspace;</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordtype">int</span> _matrix_stride;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordtype">int</span> _matrix_row_stride;</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; ITensor *_output_nhwc;</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordtype">int</span> _num_batches;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordtype">int</span> _num_rows;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordtype">int</span> _num_cols;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordtype">int</span> _num_channels;</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;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00422"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml"> 422</a></span>&#160;<span class="keyword">class </span><a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml">INEWinogradLayerTransformWeightsKernel</a> : <span class="keyword">public</span> <a class="code" href="classarm__compute_1_1_i_c_p_p_kernel.xhtml">INEKernel</a></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;<span class="keyword">public</span>:</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#aaadab47aee543f94771e81b16517b1d5">INEWinogradLayerTransformWeightsKernel</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml">INEWinogradLayerTransformWeightsKernel</a> &amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml">INEWinogradLayerTransformWeightsKernel</a> &amp;<a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#a3d5b0b60d79a31bba3c7ef17c265b447">operator=</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml">INEWinogradLayerTransformWeightsKernel</a> &amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#aaadab47aee543f94771e81b16517b1d5">INEWinogradLayerTransformWeightsKernel</a>(<a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml">INEWinogradLayerTransformWeightsKernel</a> &amp;&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml">INEWinogradLayerTransformWeightsKernel</a> &amp;<a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#a3d5b0b60d79a31bba3c7ef17c265b447">operator=</a>(<a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml">INEWinogradLayerTransformWeightsKernel</a> &amp;&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;</div><div class="line"><a name="l00434"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#aaadab47aee543f94771e81b16517b1d5"> 434</a></span>&#160; <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#aaadab47aee543f94771e81b16517b1d5">INEWinogradLayerTransformWeightsKernel</a>()</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; }</div><div class="line"><a name="l00437"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#a668729f636910fd5f425cee965efee6d"> 437</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#a668729f636910fd5f425cee965efee6d">~INEWinogradLayerTransformWeightsKernel</a>()</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; }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#ac87d8039da10e7380bcaf59169eb4558">get_weight_storage_size</a>(<span class="keywordtype">int</span> num_output_channels, <span class="keywordtype">int</span> num_input_channels) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#a0769fae1b815e5e48086ad25c1528dec">get_matrix_stride</a>(<span class="keyword">const</span> KernelShape &amp;kernel_shape) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#a779dc9599bd3a0aa390ba9d3a1d8d6d1">configure</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *weights_hwio, <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *output, <span class="keyword">const</span> <span class="keywordtype">int</span> matrix_stride, <span class="keyword">const</span> <span class="keywordtype">int</span> num_output_channels, <span class="keyword">const</span> <span class="keywordtype">int</span> num_input_channels) = 0;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keyword">static</span> <a class="code" href="classarm__compute_1_1_status.xhtml">Status</a> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#a8b4165c2e7c5c983b930a0f5f4df6acf">validate</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor_info.xhtml">ITensorInfo</a> *input, <span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor_info.xhtml">ITensorInfo</a> *<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a64a08a9fec5aeee8650e7182b6d171d0">weights</a>);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;};</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keywordtype">int</span> OutputTileRows, <span class="keywordtype">int</span> OutputTileCols, <span class="keywordtype">int</span> KernelRows, <span class="keywordtype">int</span> KernelCols&gt;</div><div class="line"><a name="l00480"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml"> 480</a></span>&#160;<span class="keyword">class </span><a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml">NEWinogradLayerTransformWeightsKernel</a> final : <span class="keyword">public</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml">INEWinogradLayerTransformWeightsKernel</a>&lt;T&gt;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;{</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#ad25daf413f7dd45f084ae22a25b8bbe5">NEWinogradLayerTransformWeightsKernel</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml">NEWinogradLayerTransformWeightsKernel</a> &amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml">NEWinogradLayerTransformWeightsKernel</a> &amp;<a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#ae43e71907cc8f09be3338c84c18701bb">operator=</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml">NEWinogradLayerTransformWeightsKernel</a> &amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#ad25daf413f7dd45f084ae22a25b8bbe5">NEWinogradLayerTransformWeightsKernel</a>(<a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml">NEWinogradLayerTransformWeightsKernel</a> &amp;&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml">NEWinogradLayerTransformWeightsKernel</a> &amp;<a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#ae43e71907cc8f09be3338c84c18701bb">operator=</a>(<a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml">NEWinogradLayerTransformWeightsKernel</a> &amp;&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#ab9a247b5c031e2501d6b962d2c1024cc">~NEWinogradLayerTransformWeightsKernel</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#ad25daf413f7dd45f084ae22a25b8bbe5">NEWinogradLayerTransformWeightsKernel</a>();</div><div class="line"><a name="l00496"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#ab5656bb5b6334bdbe6e606c715872828"> 496</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#ab5656bb5b6334bdbe6e606c715872828">name</a>()<span class="keyword"> const override</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;NEWinogradLayerTransformWeightsKernel&quot;</span>;</div><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;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keyword">static</span> <a class="code" href="classarm__compute_1_1_status.xhtml">Status</a> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#a6d3d1d4d66f89908455bc5f05e259ce9">validate</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor_info.xhtml">ITensorInfo</a> *input, <span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor_info.xhtml">ITensorInfo</a> *output, <span class="keyword">const</span> <a class="code" href="structarm__compute_1_1_winograd_info.xhtml">WinogradInfo</a> &amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a809d18ccde99d938a68cb90ef53aa749">winograd_info</a>);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="comment">// Inherited methods overridden:</span></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="preprocessor">#ifndef DOXYGEN_SKIP_THIS</span></div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#a779dc9599bd3a0aa390ba9d3a1d8d6d1">configure</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *weights_hwio, <a class="code" href="classarm__compute_1_1_i_tensor.xhtml">ITensor</a> *output, <span class="keyword">const</span> <span class="keywordtype">int</span> matrix_stride, <span class="keyword">const</span> <span class="keywordtype">int</span> num_output_channels, <span class="keyword">const</span> <span class="keywordtype">int</span> num_input_channels) <span class="keyword">override</span>;</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* DOXYGEN_SKIP_THIS */</span><span class="preprocessor"></span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#a87a7d4fe23da86c3682b79300d23f248">get_weight_storage_size</a>(<span class="keywordtype">int</span> num_output_channels, <span class="keywordtype">int</span> num_input_channels) <span class="keyword">const override</span>;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#a07a976f4d6b4b62e2ffcea8b0dab6d9f">get_matrix_stride</a>(<span class="keyword">const</span> KernelShape &amp;kernel_shape) <span class="keyword">const override</span>;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#a112b35dd205c62ea6ed1447ef226da82">run</a>(<span class="keyword">const</span> <a class="code" href="classarm__compute_1_1_window.xhtml">Window</a> &amp;<a class="code" href="classarm__compute_1_1_i_kernel.xhtml#ad34a46f53686c12a5c5e717cc9617fb6">window</a>, <span class="keyword">const</span> <a class="code" href="structarm__compute_1_1_thread_info.xhtml">ThreadInfo</a> &amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a4f4125dba5283887b34f889b1c615c0c">info</a>) <span class="keyword">override</span>;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#a4370ae5fda7bd455a171fc8ed4d3f283">is_parallelisable</a>() <span class="keyword">const override</span>;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keyword">using</span> WinogradBase = winograd::WinogradGEMM&lt;OutputTileRows, OutputTileCols, KernelRows, KernelCols, winograd::WinogradRoots::Integers&gt;;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keyword">using</span> WinogradConv = <span class="keyword">typename</span> WinogradBase::template Convolution&lt;T, T&gt;;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keyword">using</span> WeightsTransform = <span class="keyword">typename</span> WinogradBase::template WeightsTransform&lt;T, T&gt;;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; std::unique_ptr&lt;WeightsTransform&gt; _transform{ <span class="keyword">nullptr</span> };</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="keyword">const</span> ITensor *_weights_hwio;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; ITensor *_output;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="keywordtype">int</span> _matrix_stride;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keywordtype">int</span> _num_output_channels;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordtype">int</span> _num_input_channels;</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;};</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> TIn, <span class="keyword">typename</span> TOut, <span class="keywordtype">int</span> OutputTileRows, <span class="keywordtype">int</span> OutputTileCols, <span class="keywordtype">int</span> KernelRows, <span class="keywordtype">int</span> KernelCols&gt;</div><div class="line"><a name="l00561"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_n_e_winograd_layer_configuration.xhtml"> 561</a></span>&#160;<span class="keyword">class </span><a class="code" href="classarm__compute_1_1_n_e_winograd_layer_configuration.xhtml">NEWinogradLayerConfiguration</a></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;{</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00565"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_n_e_winograd_layer_configuration.xhtml#a1bc75fe67cfd09e90f240a935da92f54"> 565</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_configuration.xhtml#a1bc75fe67cfd09e90f240a935da92f54">WinogradBase</a> = winograd::WinogradGEMM&lt;OutputTileRows, OutputTileCols, KernelRows, KernelCols, winograd::WinogradRoots::Integers&gt;;</div><div class="line"><a name="l00568"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_n_e_winograd_layer_configuration.xhtml#acd8461f7d784d4c09b73447f357e6b1a"> 568</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_configuration.xhtml#acd8461f7d784d4c09b73447f357e6b1a">WinogradConv</a> = <span class="keyword">typename</span> WinogradBase::template Convolution&lt;TIn, TOut&gt;;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;</div><div class="line"><a name="l00570"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_n_e_winograd_layer_configuration.xhtml#afad7d48b2aacdab4c4d731e1aab98c6f"> 570</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml">TransformInputKernel</a> = <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml">NEWinogradLayerTransformInputKernel&lt;TIn, OutputTileRows, OutputTileCols, KernelRows, KernelCols&gt;</a>;</div><div class="line"><a name="l00571"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_n_e_winograd_layer_configuration.xhtml#a45de1f3c30be8d2ee7424ca42677d5d9"> 571</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml">TransformWeightsKernel</a> = <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml">NEWinogradLayerTransformWeightsKernel&lt;TIn, OutputTileRows, OutputTileCols, KernelRows, KernelCols&gt;</a>;</div><div class="line"><a name="l00572"></a><span class="lineno"><a class="line" href="classarm__compute_1_1_n_e_winograd_layer_configuration.xhtml#a3637009f3df69cdc77be902ee35b02a1"> 572</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml">TransformOutputKernel</a> = <a class="code" href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml">NEWinogradLayerTransformOutputKernel&lt;TOut, OutputTileRows, OutputTileCols, KernelRows, KernelCols&gt;</a>;</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;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;} <span class="comment">// namespace arm_compute</span></div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/*__ARM_COMPUTE_NEGEMMWINOGRADCONVOLUTIONLAYERKERNEL_H__*/</span><span class="preprocessor"></span></div><div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel_xhtml_a112b35dd205c62ea6ed1447ef226da82"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#a112b35dd205c62ea6ed1447ef226da82">arm_compute::NEWinogradLayerTransformWeightsKernel::run</a></div><div class="ttdeci">void run(const Window &amp;window, const ThreadInfo &amp;info) override</div><div class="ttdoc">Execute the kernel on the passed window.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00275">NEWinogradConvolutionLayerKernel.cpp:275</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel_xhtml_a3d5b0b60d79a31bba3c7ef17c265b447"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#a3d5b0b60d79a31bba3c7ef17c265b447">arm_compute::INEWinogradLayerTransformWeightsKernel::operator=</a></div><div class="ttdeci">INEWinogradLayerTransformWeightsKernel &amp; operator=(const INEWinogradLayerTransformWeightsKernel &amp;)=default</div><div class="ttdoc">Prevent instances of this class from being copied (As this class contains pointers)</div></div>
<div class="ttc" id="classarm__compute_1_1_i_kernel_xhtml_ad34a46f53686c12a5c5e717cc9617fb6"><div class="ttname"><a href="classarm__compute_1_1_i_kernel.xhtml#ad34a46f53686c12a5c5e717cc9617fb6">arm_compute::IKernel::window</a></div><div class="ttdeci">const Window &amp; window() const</div><div class="ttdoc">The maximum window the kernel can be executed on.</div><div class="ttdef"><b>Definition:</b> <a href="_i_kernel_8cpp_source.xhtml#l00028">IKernel.cpp:28</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel_xhtml_ae18e3efe8200578009c1f7a15a4a2fa0"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#ae18e3efe8200578009c1f7a15a4a2fa0">arm_compute::NEWinogradLayerTransformOutputKernel::get_matrix_stride</a></div><div class="ttdeci">int get_matrix_stride(const KernelShape &amp;kernel_shape, const Tensor4DShape &amp;input_shape, const PaddingType padding_type) const override</div><div class="ttdoc">Gets the stride between matrices in the output worspace.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00480">NEWinogradConvolutionLayerKernel.cpp:480</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel_xhtml_a07a976f4d6b4b62e2ffcea8b0dab6d9f"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#a07a976f4d6b4b62e2ffcea8b0dab6d9f">arm_compute::NEWinogradLayerTransformWeightsKernel::get_matrix_stride</a></div><div class="ttdeci">int get_matrix_stride(const KernelShape &amp;kernel_shape) const override</div><div class="ttdoc">Gets the stride between matrices in the input worspace.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00246">NEWinogradConvolutionLayerKernel.cpp:246</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel_xhtml_acb7b954c56d087e3d2451f92e62eea60"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#acb7b954c56d087e3d2451f92e62eea60">arm_compute::NEWinogradLayerTransformOutputKernel::get_output_shape</a></div><div class="ttdeci">Tensor4DShape get_output_shape(const KernelShape &amp;kernel_shape, const Tensor4DShape &amp;in_shape, const PaddingType padding) const override</div><div class="ttdoc">Get the output shape of a convolution.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00486">NEWinogradConvolutionLayerKernel.cpp:486</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel_xhtml"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml">arm_compute::NEWinogradLayerTransformOutputKernel</a></div><div class="ttdoc">NEON kernel to perform Winograd output transform.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00300">NEWinogradConvolutionLayerKernel.h:300</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel_xhtml_a44ffbab5d0fe4ae10cbf84ddae1a90fe"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a44ffbab5d0fe4ae10cbf84ddae1a90fe">arm_compute::NEWinogradLayerTransformInputKernel::get_input_storage_size</a></div><div class="ttdeci">unsigned int get_input_storage_size(int num_batches, int num_channels, int num_rows, int num_cols, bool same_padding) const override</div><div class="ttdoc">Determine how much memory (in units of TIn) to allocate for the transformed input.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00317">NEWinogradConvolutionLayerKernel.cpp:317</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_configuration_xhtml_acd8461f7d784d4c09b73447f357e6b1a"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_configuration.xhtml#acd8461f7d784d4c09b73447f357e6b1a">arm_compute::NEWinogradLayerConfiguration::WinogradConv</a></div><div class="ttdeci">typename WinogradBase::template Convolution&lt; TIn, TOut &gt; WinogradConv</div><div class="ttdoc">Winograd convolution kernel.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00568">NEWinogradConvolutionLayerKernel.h:568</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel_xhtml_a8ccc8c221f26d7e2ed0b5cfbe4dc1b83"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#a8ccc8c221f26d7e2ed0b5cfbe4dc1b83">arm_compute::NEWinogradLayerTransformOutputKernel::get_working_space_size</a></div><div class="ttdeci">unsigned int get_working_space_size(unsigned int num_threads) const override</div><div class="ttdoc">Get the working space required to perform the transformation.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00474">NEWinogradConvolutionLayerKernel.cpp:474</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel_xhtml_a6d3d1d4d66f89908455bc5f05e259ce9"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a6d3d1d4d66f89908455bc5f05e259ce9">arm_compute::NEWinogradLayerTransformInputKernel::validate</a></div><div class="ttdeci">static Status validate(const ITensorInfo *input, const ITensorInfo *output, const WinogradInfo &amp;winograd_info)</div><div class="ttdoc">Static function to check if given info will lead to a valid configuration of NEWinogradLayerTransform...</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00426">NEWinogradConvolutionLayerKernel.cpp:426</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_c_p_p_kernel_xhtml"><div class="ttname"><a href="classarm__compute_1_1_i_c_p_p_kernel.xhtml">arm_compute::ICPPKernel</a></div><div class="ttdoc">Common interface for all kernels implemented in C++.</div><div class="ttdef"><b>Definition:</b> <a href="_i_c_p_p_kernel_8h_source.xhtml#l00035">ICPPKernel.h:35</a></div></div>
<div class="ttc" id="structarm__compute_1_1_winograd_info_xhtml"><div class="ttname"><a href="structarm__compute_1_1_winograd_info.xhtml">arm_compute::WinogradInfo</a></div><div class="ttdoc">Winograd information.</div><div class="ttdef"><b>Definition:</b> <a href="arm__compute_2core_2_types_8h_source.xhtml#l02043">Types.h:2043</a></div></div>
<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a865514e30baa11b11c8fa65f944532fb"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a865514e30baa11b11c8fa65f944532fb">arm_compute::test::validation::input_shape</a></div><div class="ttdeci">input_shape</div><div class="ttdef"><b>Definition:</b> <a href="validation_2_c_l_2_convolution_layer_8cpp_source.xhtml#l00174">ConvolutionLayer.cpp:174</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel_xhtml_adf88b409a140a439b6e5479da2f4cb1f"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel.xhtml#adf88b409a140a439b6e5479da2f4cb1f">arm_compute::INEWinogradLayerTransformOutputKernel::get_working_space_size</a></div><div class="ttdeci">virtual unsigned int get_working_space_size(unsigned int num_threads) const =0</div><div class="ttdoc">Get the working space required to perform the transformation.</div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel_xhtml_a779dc9599bd3a0aa390ba9d3a1d8d6d1"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#a779dc9599bd3a0aa390ba9d3a1d8d6d1">arm_compute::INEWinogradLayerTransformWeightsKernel::configure</a></div><div class="ttdeci">virtual void configure(const ITensor *weights_hwio, ITensor *output, const int matrix_stride, const int num_output_channels, const int num_input_channels)=0</div><div class="ttdoc">Configure the weights transform kernel.</div></div>
<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a809d18ccde99d938a68cb90ef53aa749"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a809d18ccde99d938a68cb90ef53aa749">arm_compute::test::validation::winograd_info</a></div><div class="ttdeci">winograd_info</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_winograd_8cpp_source.xhtml#l00330">Winograd.cpp:330</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel_xhtml_ae25b6ed77179808984b17c39e078ad96"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel.xhtml#ae25b6ed77179808984b17c39e078ad96">arm_compute::INEWinogradLayerTransformOutputKernel::get_matrix_stride</a></div><div class="ttdeci">virtual int get_matrix_stride(const KernelShape &amp;kernel_shape, const Tensor4DShape &amp;input_shape, const PaddingType padding_type) const =0</div><div class="ttdoc">Gets the stride between matrices in the output worspace.</div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel_xhtml_ab5656bb5b6334bdbe6e606c715872828"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#ab5656bb5b6334bdbe6e606c715872828">arm_compute::NEWinogradLayerTransformWeightsKernel::name</a></div><div class="ttdeci">const char * name() const override</div><div class="ttdoc">Name of the kernel.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00496">NEWinogradConvolutionLayerKernel.h:496</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_tensor_info_xhtml"><div class="ttname"><a href="classarm__compute_1_1_i_tensor_info.xhtml">arm_compute::ITensorInfo</a></div><div class="ttdoc">Store the tensor's metadata.</div><div class="ttdef"><b>Definition:</b> <a href="_i_tensor_info_8h_source.xhtml#l00040">ITensorInfo.h:40</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel_xhtml_a975ca7003dae590387fdf8546e1b08fd"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a975ca7003dae590387fdf8546e1b08fd">arm_compute::NEWinogradLayerTransformInputKernel::NEWinogradLayerTransformInputKernel</a></div><div class="ttdeci">NEWinogradLayerTransformInputKernel()</div><div class="ttdoc">Default constructor.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00347">NEWinogradConvolutionLayerKernel.cpp:347</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel_xhtml_ae7ca946df6f3f9ab2649e0e328a8cde2"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel.xhtml#ae7ca946df6f3f9ab2649e0e328a8cde2">arm_compute::INEWinogradLayerTransformInputKernel::configure</a></div><div class="ttdeci">virtual void configure(const ITensor *input_nhwc, const int num_batches, const int num_rows, const int num_cols, const int num_channels, const PaddingType padding, ITensor *output, const int matrix_stride, ITensor *workspace)=0</div><div class="ttdoc">Configure the output transform kernel.</div></div>
<div class="ttc" id="classarm__compute_1_1_status_xhtml"><div class="ttname"><a href="classarm__compute_1_1_status.xhtml">arm_compute::Status</a></div><div class="ttdoc">Status class.</div><div class="ttdef"><b>Definition:</b> <a href="_error_8h_source.xhtml#l00052">Error.h:52</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_tensor_xhtml"><div class="ttname"><a href="classarm__compute_1_1_i_tensor.xhtml">arm_compute::ITensor</a></div><div class="ttdoc">Interface for NEON tensor.</div><div class="ttdef"><b>Definition:</b> <a href="_i_tensor_8h_source.xhtml#l00036">ITensor.h:36</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel_xhtml_a0bda64948b232256769698cde90fcdb0"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel.xhtml#a0bda64948b232256769698cde90fcdb0">arm_compute::INEWinogradLayerTransformOutputKernel::~INEWinogradLayerTransformOutputKernel</a></div><div class="ttdeci">virtual ~INEWinogradLayerTransformOutputKernel()</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00293">NEWinogradConvolutionLayerKernel.h:293</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel_xhtml_ab9a247b5c031e2501d6b962d2c1024cc"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#ab9a247b5c031e2501d6b962d2c1024cc">arm_compute::NEWinogradLayerTransformWeightsKernel::~NEWinogradLayerTransformWeightsKernel</a></div><div class="ttdeci">~NEWinogradLayerTransformWeightsKernel()=default</div><div class="ttdoc">Default destructor.</div></div>
<div class="ttc" id="namespacearm__compute_xhtml"><div class="ttname"><a href="namespacearm__compute.xhtml">arm_compute</a></div><div class="ttdoc">Copyright (c) 2017-2018 ARM Limited.</div><div class="ttdef"><b>Definition:</b> <a href="00__introduction_8dox_source.xhtml#l00024">00_introduction.dox:24</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel_xhtml_a6d3d1d4d66f89908455bc5f05e259ce9"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#a6d3d1d4d66f89908455bc5f05e259ce9">arm_compute::NEWinogradLayerTransformWeightsKernel::validate</a></div><div class="ttdeci">static Status validate(const ITensorInfo *input, const ITensorInfo *output, const WinogradInfo &amp;winograd_info)</div><div class="ttdoc">Static function to check if given info will lead to a valid configuration of NEWinogradLayerTransform...</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00296">NEWinogradConvolutionLayerKernel.cpp:296</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel_xhtml_a8b4165c2e7c5c983b930a0f5f4df6acf"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#a8b4165c2e7c5c983b930a0f5f4df6acf">arm_compute::INEWinogradLayerTransformWeightsKernel::validate</a></div><div class="ttdeci">static Status validate(const ITensorInfo *input, const ITensorInfo *weights)</div><div class="ttdoc">Static function to check if given info will lead to a valid configuration of NEWinogradLayerTransform...</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00215">NEWinogradConvolutionLayerKernel.cpp:215</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel_xhtml_a4370ae5fda7bd455a171fc8ed4d3f283"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#a4370ae5fda7bd455a171fc8ed4d3f283">arm_compute::NEWinogradLayerTransformWeightsKernel::is_parallelisable</a></div><div class="ttdeci">bool is_parallelisable() const override</div><div class="ttdoc">Indicates whether or not the kernel is parallelisable.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00290">NEWinogradConvolutionLayerKernel.cpp:290</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel_xhtml"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml">arm_compute::INEWinogradLayerTransformWeightsKernel</a></div><div class="ttdoc">Interface for the NEON kernel to perform Winograd weights transform.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00422">NEWinogradConvolutionLayerKernel.h:422</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel_xhtml_a1187b798595c88feeb65d15441a4f72f"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel.xhtml#a1187b798595c88feeb65d15441a4f72f">arm_compute::INEWinogradLayerTransformInputKernel::get_input_storage_size</a></div><div class="ttdeci">virtual unsigned int get_input_storage_size(int num_batches, int num_channels, int num_rows, int num_cols, bool same_padding) const =0</div><div class="ttdoc">Determine how much memory (in units of TIn) to allocate for the transformed input.</div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel_xhtml_a899571657a22f26128c31b35588c8fb8"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a899571657a22f26128c31b35588c8fb8">arm_compute::NEWinogradLayerTransformInputKernel::operator=</a></div><div class="ttdeci">NEWinogradLayerTransformInputKernel &amp; operator=(const NEWinogradLayerTransformInputKernel &amp;)=delete</div><div class="ttdoc">Prevent instances of this class from being copied (As this class contains pointers)</div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel_xhtml_a8ccc8c221f26d7e2ed0b5cfbe4dc1b83"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a8ccc8c221f26d7e2ed0b5cfbe4dc1b83">arm_compute::NEWinogradLayerTransformInputKernel::get_working_space_size</a></div><div class="ttdeci">unsigned int get_working_space_size(unsigned int num_threads) const override</div><div class="ttdoc">Get the working space required to perform the transformation.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00334">NEWinogradConvolutionLayerKernel.cpp:334</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel_xhtml_ab5656bb5b6334bdbe6e606c715872828"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#ab5656bb5b6334bdbe6e606c715872828">arm_compute::NEWinogradLayerTransformOutputKernel::name</a></div><div class="ttdeci">const char * name() const override</div><div class="ttdoc">Name of the kernel.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00303">NEWinogradConvolutionLayerKernel.h:303</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel_xhtml_ac87d8039da10e7380bcaf59169eb4558"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#ac87d8039da10e7380bcaf59169eb4558">arm_compute::INEWinogradLayerTransformWeightsKernel::get_weight_storage_size</a></div><div class="ttdeci">virtual unsigned int get_weight_storage_size(int num_output_channels, int num_input_channels) const =0</div><div class="ttdoc">Determine how much memory (in units of T) to allocate for the transformed weights.</div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel_xhtml_a668729f636910fd5f425cee965efee6d"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#a668729f636910fd5f425cee965efee6d">arm_compute::INEWinogradLayerTransformWeightsKernel::~INEWinogradLayerTransformWeightsKernel</a></div><div class="ttdeci">virtual ~INEWinogradLayerTransformWeightsKernel()</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00437">NEWinogradConvolutionLayerKernel.h:437</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel_xhtml"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml">arm_compute::NEWinogradLayerTransformInputKernel</a></div><div class="ttdoc">NEON kernel to perform Winograd input transform.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00098">NEWinogradConvolutionLayerKernel.h:98</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel_xhtml_a57db7dcc6716d3a676a422bb2839036f"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel.xhtml#a57db7dcc6716d3a676a422bb2839036f">arm_compute::INEWinogradLayerTransformInputKernel::~INEWinogradLayerTransformInputKernel</a></div><div class="ttdeci">virtual ~INEWinogradLayerTransformInputKernel()</div><div class="ttdoc">Destructor.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00091">NEWinogradConvolutionLayerKernel.h:91</a></div></div>
<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a3a77be8aebd8e00522b32061d46ccdbd"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a3a77be8aebd8e00522b32061d46ccdbd">arm_compute::test::validation::bias</a></div><div class="ttdeci">CLTensor bias</div><div class="ttdef"><b>Definition:</b> <a href="validation_2_c_l_2_convolution_layer_8cpp_source.xhtml#l00181">ConvolutionLayer.cpp:181</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel_xhtml_a751da38633e08a705df626b6146085b2"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#a751da38633e08a705df626b6146085b2">arm_compute::NEWinogradLayerTransformOutputKernel::operator=</a></div><div class="ttdeci">NEWinogradLayerTransformOutputKernel &amp; operator=(const NEWinogradLayerTransformOutputKernel &amp;)=delete</div><div class="ttdoc">Prevent instances of this class from being copied (As this class contains pointers)</div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel_xhtml_ae25b6ed77179808984b17c39e078ad96"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel.xhtml#ae25b6ed77179808984b17c39e078ad96">arm_compute::INEWinogradLayerTransformInputKernel::get_matrix_stride</a></div><div class="ttdeci">virtual int get_matrix_stride(const KernelShape &amp;kernel_shape, const Tensor4DShape &amp;input_shape, const PaddingType padding_type) const =0</div><div class="ttdoc">Gets the stride between matrices in the input worspace.</div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel_xhtml_ae43e71907cc8f09be3338c84c18701bb"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#ae43e71907cc8f09be3338c84c18701bb">arm_compute::NEWinogradLayerTransformWeightsKernel::operator=</a></div><div class="ttdeci">NEWinogradLayerTransformWeightsKernel &amp; operator=(const NEWinogradLayerTransformWeightsKernel &amp;)=delete</div><div class="ttdoc">Prevent instances of this class from being copied (As this class contains pointers)</div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel_xhtml_a0769fae1b815e5e48086ad25c1528dec"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#a0769fae1b815e5e48086ad25c1528dec">arm_compute::INEWinogradLayerTransformWeightsKernel::get_matrix_stride</a></div><div class="ttdeci">virtual int get_matrix_stride(const KernelShape &amp;kernel_shape) const =0</div><div class="ttdoc">Gets the stride between matrices in the kernel worspace.</div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel_xhtml_aad80a063ffa5b335ec0ba83d3116e2e3"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#aad80a063ffa5b335ec0ba83d3116e2e3">arm_compute::NEWinogradLayerTransformInputKernel::~NEWinogradLayerTransformInputKernel</a></div><div class="ttdeci">~NEWinogradLayerTransformInputKernel()=default</div><div class="ttdoc">Default destructor.</div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel_xhtml"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel.xhtml">arm_compute::INEWinogradLayerTransformOutputKernel</a></div><div class="ttdoc">Interface for the NEON kernel to perform Winograd output transform.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00222">NEWinogradConvolutionLayerKernel.h:222</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel_xhtml_ad25daf413f7dd45f084ae22a25b8bbe5"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#ad25daf413f7dd45f084ae22a25b8bbe5">arm_compute::NEWinogradLayerTransformWeightsKernel::NEWinogradLayerTransformWeightsKernel</a></div><div class="ttdeci">NEWinogradLayerTransformWeightsKernel()</div><div class="ttdoc">Default constructor.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00240">NEWinogradConvolutionLayerKernel.cpp:240</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel_xhtml"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml">arm_compute::NEWinogradLayerTransformWeightsKernel</a></div><div class="ttdoc">NEON kernel to perform Winograd weights transform.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00480">NEWinogradConvolutionLayerKernel.h:480</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel_xhtml_a112b35dd205c62ea6ed1447ef226da82"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a112b35dd205c62ea6ed1447ef226da82">arm_compute::NEWinogradLayerTransformInputKernel::run</a></div><div class="ttdeci">void run(const Window &amp;window, const ThreadInfo &amp;info) override</div><div class="ttdoc">Execute the kernel on the passed window.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00400">NEWinogradConvolutionLayerKernel.cpp:400</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel_xhtml_aa795257b6b83a37081c7c2b904a75512"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#aa795257b6b83a37081c7c2b904a75512">arm_compute::NEWinogradLayerTransformOutputKernel::~NEWinogradLayerTransformOutputKernel</a></div><div class="ttdeci">~NEWinogradLayerTransformOutputKernel()=default</div><div class="ttdoc">Default destructor.</div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel_xhtml_af17b2792d63e38a0eea385635191e836"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#af17b2792d63e38a0eea385635191e836">arm_compute::NEWinogradLayerTransformInputKernel::WinogradConv</a></div><div class="ttdeci">typename WinogradBase::template Convolution&lt; T, T &gt; WinogradConv</div><div class="ttdoc">Winograd convolution kernel.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00189">NEWinogradConvolutionLayerKernel.h:189</a></div></div>
<div class="ttc" id="structarm__compute_1_1_thread_info_xhtml"><div class="ttname"><a href="structarm__compute_1_1_thread_info.xhtml">arm_compute::ThreadInfo</a></div><div class="ttdoc">Information about executing thread and CPU.</div><div class="ttdef"><b>Definition:</b> <a href="_c_p_p_types_8h_source.xhtml#l00225">CPPTypes.h:225</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel_xhtml_ab5656bb5b6334bdbe6e606c715872828"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#ab5656bb5b6334bdbe6e606c715872828">arm_compute::NEWinogradLayerTransformInputKernel::name</a></div><div class="ttdeci">const char * name() const override</div><div class="ttdoc">Name of the kernel.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00155">NEWinogradConvolutionLayerKernel.h:155</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel_xhtml_a10f4ee28637f13bfbfa0ec1f13972ac1"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel.xhtml#a10f4ee28637f13bfbfa0ec1f13972ac1">arm_compute::INEWinogradLayerTransformOutputKernel::get_output_shape</a></div><div class="ttdeci">virtual Tensor4DShape get_output_shape(const KernelShape &amp;kernel_shape, const Tensor4DShape &amp;in_shape, const PaddingType padding) const =0</div><div class="ttdoc">Get the output shape of a convolution.</div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel_xhtml_a938350d536f0350fd2fd9eacf5d5f243"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#a938350d536f0350fd2fd9eacf5d5f243">arm_compute::NEWinogradLayerTransformOutputKernel::NEWinogradLayerTransformOutputKernel</a></div><div class="ttdeci">NEWinogradLayerTransformOutputKernel()</div><div class="ttdoc">Constructor.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00467">NEWinogradConvolutionLayerKernel.cpp:467</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel_xhtml_ae18e3efe8200578009c1f7a15a4a2fa0"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#ae18e3efe8200578009c1f7a15a4a2fa0">arm_compute::NEWinogradLayerTransformInputKernel::get_matrix_stride</a></div><div class="ttdeci">int get_matrix_stride(const KernelShape &amp;kernel_shape, const Tensor4DShape &amp;input_shape, const PaddingType padding_type) const override</div><div class="ttdoc">Gets the stride between matrices in the input worspace.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00340">NEWinogradConvolutionLayerKernel.cpp:340</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel_xhtml_aaadab47aee543f94771e81b16517b1d5"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_weights_kernel.xhtml#aaadab47aee543f94771e81b16517b1d5">arm_compute::INEWinogradLayerTransformWeightsKernel::INEWinogradLayerTransformWeightsKernel</a></div><div class="ttdeci">INEWinogradLayerTransformWeightsKernel()</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00434">NEWinogradConvolutionLayerKernel.h:434</a></div></div>
<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a64a08a9fec5aeee8650e7182b6d171d0"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a64a08a9fec5aeee8650e7182b6d171d0">arm_compute::test::validation::weights</a></div><div class="ttdeci">CLTensor weights</div><div class="ttdef"><b>Definition:</b> <a href="validation_2_c_l_2_convolution_layer_8cpp_source.xhtml#l00180">ConvolutionLayer.cpp:180</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel_xhtml"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel.xhtml">arm_compute::INEWinogradLayerTransformInputKernel</a></div><div class="ttdoc">Interface for the NEON kernel to perform Winograd input transform.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00038">NEWinogradConvolutionLayerKernel.h:38</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel_xhtml_a87a7d4fe23da86c3682b79300d23f248"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_weights_kernel.xhtml#a87a7d4fe23da86c3682b79300d23f248">arm_compute::NEWinogradLayerTransformWeightsKernel::get_weight_storage_size</a></div><div class="ttdeci">unsigned int get_weight_storage_size(int num_output_channels, int num_input_channels) const override</div><div class="ttdoc">Determine how much memory (in units of T) to allocate for the transformed weights.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00231">NEWinogradConvolutionLayerKernel.cpp:231</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel_xhtml_ad19a40132fc8ebdb217819c865c5ad0d"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#ad19a40132fc8ebdb217819c865c5ad0d">arm_compute::NEWinogradLayerTransformOutputKernel::configure</a></div><div class="ttdeci">void configure(const ITensor *biases, const ITensor *transformed_output, const int matrix_stride, ITensor *output_nhwc, const int num_batches, const int num_rows, const int num_cols, const int num_channels, ITensor *workspace) override</div><div class="ttdoc">Configure the output transform kernel.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00493">NEWinogradConvolutionLayerKernel.cpp:493</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel_xhtml_a1bc75fe67cfd09e90f240a935da92f54"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a1bc75fe67cfd09e90f240a935da92f54">arm_compute::NEWinogradLayerTransformInputKernel::WinogradBase</a></div><div class="ttdeci">winograd::WinogradGEMM&lt; OutputTileRows, OutputTileCols, KernelRows, KernelCols, winograd::WinogradRoots::Integers &gt; WinogradBase</div><div class="ttdoc">Winograd base kernel.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00187">NEWinogradConvolutionLayerKernel.h:187</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_configuration_xhtml_a1bc75fe67cfd09e90f240a935da92f54"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_configuration.xhtml#a1bc75fe67cfd09e90f240a935da92f54">arm_compute::NEWinogradLayerConfiguration::WinogradBase</a></div><div class="ttdeci">winograd::WinogradGEMM&lt; OutputTileRows, OutputTileCols, KernelRows, KernelCols, winograd::WinogradRoots::Integers &gt; WinogradBase</div><div class="ttdoc">Winograd base kernel.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00565">NEWinogradConvolutionLayerKernel.h:565</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel_xhtml_ab62748ccdc2d0696bca7e8cddbbb33af"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#ab62748ccdc2d0696bca7e8cddbbb33af">arm_compute::NEWinogradLayerTransformOutputKernel::get_output_storage_size</a></div><div class="ttdeci">unsigned int get_output_storage_size(int num_batches, int num_rows, int num_cols, int num_output_channels, bool same_padding) const override</div><div class="ttdoc">Determine how much memory (in units of TOut) to allocate for the (Winograd domain) output.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00448">NEWinogradConvolutionLayerKernel.cpp:448</a></div></div>
<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a4f4125dba5283887b34f889b1c615c0c"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a4f4125dba5283887b34f889b1c615c0c">arm_compute::test::validation::info</a></div><div class="ttdeci">info</div><div class="ttdef"><b>Definition:</b> <a href="validation_2_c_l_2_convolution_layer_8cpp_source.xhtml#l00174">ConvolutionLayer.cpp:174</a></div></div>
<div class="ttc" id="_i_n_e_kernel_8h_xhtml"><div class="ttname"><a href="_i_n_e_kernel_8h.xhtml">INEKernel.h</a></div></div>
<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a735a025fce26c1ef147b54426df18181"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a735a025fce26c1ef147b54426df18181">arm_compute::test::validation::padding</a></div><div class="ttdeci">const PaddingSize padding</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_absolute_difference_8cpp_source.xhtml#l00113">AbsoluteDifference.cpp:113</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel_xhtml_a9ede996037a6406aca5217f9ad5e2f28"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#a9ede996037a6406aca5217f9ad5e2f28">arm_compute::NEWinogradLayerTransformOutputKernel::validate</a></div><div class="ttdeci">static Status validate(const ITensorInfo *input, const ITensorInfo *bias, const ITensorInfo *output, const WinogradInfo &amp;winograd_info)</div><div class="ttdoc">Static function to check if given info will lead to a valid configuration of NEWinogradLayerTransform...</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00548">NEWinogradConvolutionLayerKernel.cpp:548</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel_xhtml_adf88b409a140a439b6e5479da2f4cb1f"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_input_kernel.xhtml#adf88b409a140a439b6e5479da2f4cb1f">arm_compute::INEWinogradLayerTransformInputKernel::get_working_space_size</a></div><div class="ttdeci">virtual unsigned int get_working_space_size(unsigned int num_threads) const =0</div><div class="ttdoc">Get the working space required to perform the transformation.</div></div>
<div class="ttc" id="classarm__compute_1_1_window_xhtml"><div class="ttname"><a href="classarm__compute_1_1_window.xhtml">arm_compute::Window</a></div><div class="ttdoc">Describe a multidimensional execution window.</div><div class="ttdef"><b>Definition:</b> <a href="_window_8h_source.xhtml#l00039">Window.h:39</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_configuration_xhtml"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_configuration.xhtml">arm_compute::NEWinogradLayerConfiguration</a></div><div class="ttdoc">NEON kernel to perform Winograd.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8h_source.xhtml#l00561">NEWinogradConvolutionLayerKernel.h:561</a></div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel_xhtml_a2de2ab5ada4b5a360770b670af19b48d"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_input_kernel.xhtml#a2de2ab5ada4b5a360770b670af19b48d">arm_compute::NEWinogradLayerTransformInputKernel::configure</a></div><div class="ttdeci">void configure(const ITensor *input_nhwc, const int num_batches, const int num_rows, const int num_cols, const int num_channels, const PaddingType padding, ITensor *output, const int matrix_stride, ITensor *workspace) override</div><div class="ttdoc">Configure the output transform kernel.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00354">NEWinogradConvolutionLayerKernel.cpp:354</a></div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel_xhtml_ab8058b6dab77eab1e7554434f79d84b6"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel.xhtml#ab8058b6dab77eab1e7554434f79d84b6">arm_compute::INEWinogradLayerTransformOutputKernel::configure</a></div><div class="ttdeci">virtual void configure(const ITensor *biases, const ITensor *transformed_output, const int matrix_stride, ITensor *output_nhwc, const int num_batches, const int num_rows, const int num_cols, const int num_channels, ITensor *workspace)=0</div><div class="ttdoc">Configure the output transform kernel.</div></div>
<div class="ttc" id="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel_xhtml_a638d7da59618abe59378576a0ef76929"><div class="ttname"><a href="classarm__compute_1_1_i_n_e_winograd_layer_transform_output_kernel.xhtml#a638d7da59618abe59378576a0ef76929">arm_compute::INEWinogradLayerTransformOutputKernel::get_output_storage_size</a></div><div class="ttdeci">virtual unsigned int get_output_storage_size(int num_batches, int num_rows, int num_cols, int num_output_channels, bool same_padding) const =0</div><div class="ttdoc">Determine how much memory (in units of TOut) to allocate for the (Winograd domain) output.</div></div>
<div class="ttc" id="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel_xhtml_a112b35dd205c62ea6ed1447ef226da82"><div class="ttname"><a href="classarm__compute_1_1_n_e_winograd_layer_transform_output_kernel.xhtml#a112b35dd205c62ea6ed1447ef226da82">arm_compute::NEWinogradLayerTransformOutputKernel::run</a></div><div class="ttdeci">void run(const Window &amp;window, const ThreadInfo &amp;info) override</div><div class="ttdoc">Execute the kernel on the passed window.</div><div class="ttdef"><b>Definition:</b> <a href="_n_e_winograd_convolution_layer_kernel_8cpp_source.xhtml#l00525">NEWinogradConvolutionLayerKernel.cpp:525</a></div></div>
</div><!-- fragment --></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_214608ef36d61442cb2b0c1c4e9a7def.xhtml">arm_compute</a></li><li class="navelem"><a class="el" href="dir_1fb090f0c6070330bfaccc4236d3ca0d.xhtml">core</a></li><li class="navelem"><a class="el" href="dir_315f6cf1ec0b2df3ae747ff8286a19f5.xhtml">NEON</a></li><li class="navelem"><a class="el" href="dir_2c3c4cb85e732569e2614ad40a451d53.xhtml">kernels</a></li><li class="navelem"><a class="el" href="_n_e_winograd_convolution_layer_kernel_8h.xhtml">NEWinogradConvolutionLayerKernel.h</a></li>
<li class="footer">Generated on Mon Sep 2 2019 11:47:19 for Compute Library by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
</div>
</body>
</html>