blob: 4302b8ba81c9f54dd67d896962fbea4241ffb17e [file] [log] [blame]
Jenkins4ba87db2019-05-23 17:11:51 +01001<!-- HTML header for doxygen 1.8.15-->
2<!-- Remember to use version doxygen 1.8.15 +-->
3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4<html xmlns="http://www.w3.org/1999/xhtml">
5<head>
6<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
7<meta http-equiv="X-UA-Compatible" content="IE=9"/>
8<meta name="generator" content="Doxygen 1.8.15"/>
9<meta name="robots" content="NOINDEX, NOFOLLOW" /> <!-- Prevent indexing by search engines -->
10<title>Compute Library: src/core/CL/cl_kernels/fft.cl File Reference</title>
11<link href="tabs.css" rel="stylesheet" type="text/css"/>
12<script type="text/javascript" src="jquery.js"></script>
13<script type="text/javascript" src="dynsections.js"></script>
14<link href="navtree.css" rel="stylesheet" type="text/css"/>
15<script type="text/javascript" src="resize.js"></script>
16<script type="text/javascript" src="navtreedata.js"></script>
17<script type="text/javascript" src="navtree.js"></script>
18<script type="text/javascript">
19/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
20 $(document).ready(initResizable);
21/* @license-end */</script>
22<link href="search/search.css" rel="stylesheet" type="text/css"/>
23<script type="text/javascript" src="search/searchdata.js"></script>
24<script type="text/javascript" src="search/search.js"></script>
25<script type="text/x-mathjax-config">
26 MathJax.Hub.Config({
27 extensions: ["tex2jax.js"],
28 jax: ["input/TeX","output/HTML-CSS"],
29});
30</script><script type="text/javascript" async="async" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
31<link href="doxygen.css" rel="stylesheet" type="text/css" />
32<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
33</head>
34<body>
35<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
36<div id="titlearea">
37<table cellspacing="0" cellpadding="0">
38 <tbody>
39 <tr style="height: 56px;">
40 <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"/>
41 <td style="padding-left: 0.5em;">
42 <div id="projectname">
Jenkins7f09cf72020-01-22 18:08:16 +000043 &#160;<span id="projectnumber">19.11.1</span>
Jenkins4ba87db2019-05-23 17:11:51 +010044 </div>
45 </td>
46 </tr>
47 </tbody>
48</table>
49</div>
50<!-- end header part -->
51<!-- Generated by Doxygen 1.8.15 -->
52<script type="text/javascript">
53/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
54var searchBox = new SearchBox("searchBox", "search",false,'Search');
55/* @license-end */
56</script>
57<script type="text/javascript" src="menudata.js"></script>
58<script type="text/javascript" src="menu.js"></script>
59<script type="text/javascript">
60/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
61$(function() {
62 initMenu('',true,false,'search.php','Search');
63 $(document).ready(function() { init_search(); });
64});
65/* @license-end */</script>
66<div id="main-nav"></div>
67</div><!-- top -->
68<div id="side-nav" class="ui-resizable side-nav-resizable">
69 <div id="nav-tree">
70 <div id="nav-tree-contents">
71 <div id="nav-sync" class="sync"></div>
72 </div>
73 </div>
74 <div id="splitbar" style="-moz-user-select:none;"
75 class="ui-resizable-handle">
76 </div>
77</div>
78<script type="text/javascript">
79/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
80$(document).ready(function(){initNavTree('fft_8cl.xhtml','');});
81/* @license-end */
82</script>
83<div id="doc-content">
84<!-- window showing the filter options -->
85<div id="MSearchSelectWindow"
86 onmouseover="return searchBox.OnSearchSelectShow()"
87 onmouseout="return searchBox.OnSearchSelectHide()"
88 onkeydown="return searchBox.OnSearchSelectKey(event)">
89</div>
90
91<!-- iframe showing the search results (closed by default) -->
92<div id="MSearchResultsWindow">
93<iframe src="javascript:void(0)" frameborder="0"
94 name="MSearchResults" id="MSearchResults">
95</iframe>
96</div>
97
98<div class="header">
99 <div class="summary">
100<a href="#define-members">Macros</a> &#124;
101<a href="#func-members">Functions</a> </div>
102 <div class="headertitle">
103<div class="title">fft.cl File Reference</div> </div>
104</div><!--header-->
105<div class="contents">
106<div class="textblock"><code>#include &quot;<a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml">helpers.h</a>&quot;</code><br />
107</div>
108<p><a href="fft_8cl_source.xhtml">Go to the source code of this file.</a></p>
109<table class="memberdecls">
110<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
111Macros</h2></td></tr>
112<tr class="memitem:ad4dcc4a8b94f263cd19c59fdc2cec3d2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(phi, input)</td></tr>
113<tr class="memdesc:ad4dcc4a8b94f263cd19c59fdc2cec3d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates and applies the twiddle factor to a given input. <a href="#ad4dcc4a8b94f263cd19c59fdc2cec3d2">More...</a><br /></td></tr>
114<tr class="separator:ad4dcc4a8b94f263cd19c59fdc2cec3d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
115<tr class="memitem:a5a63ca1d5404d67d13382a90cfc9b6c3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a5a63ca1d5404d67d13382a90cfc9b6c3">DFT_2</a>(c0, c1)</td></tr>
116<tr class="memdesc:a5a63ca1d5404d67d13382a90cfc9b6c3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes radix-2 butterfly unit. <a href="#a5a63ca1d5404d67d13382a90cfc9b6c3">More...</a><br /></td></tr>
117<tr class="separator:a5a63ca1d5404d67d13382a90cfc9b6c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
118<tr class="memitem:adec4b7ab0397cf3774d5971cc1296d9f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#adec4b7ab0397cf3774d5971cc1296d9f">SQRT3DIV2</a>&#160;&#160;&#160;0.86602540378443f</td></tr>
119<tr class="separator:adec4b7ab0397cf3774d5971cc1296d9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
120<tr class="memitem:ac6ec77d2e41d56919c14c1483eee94ac"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#ac6ec77d2e41d56919c14c1483eee94ac">DFT_3</a>(c0, c1, c2)</td></tr>
121<tr class="memdesc:ac6ec77d2e41d56919c14c1483eee94ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes radix-3 butterfly unit. <a href="#ac6ec77d2e41d56919c14c1483eee94ac">More...</a><br /></td></tr>
122<tr class="separator:ac6ec77d2e41d56919c14c1483eee94ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
123<tr class="memitem:af97e6d43f8b70bcf009d521f8909db25"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#af97e6d43f8b70bcf009d521f8909db25">DFT_4</a>(c0, c1, c2, c3)</td></tr>
124<tr class="memdesc:af97e6d43f8b70bcf009d521f8909db25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes radix-4 butterfly unit. <a href="#af97e6d43f8b70bcf009d521f8909db25">More...</a><br /></td></tr>
125<tr class="separator:af97e6d43f8b70bcf009d521f8909db25"><td class="memSeparator" colspan="2">&#160;</td></tr>
126<tr class="memitem:a3ddea99343f4804c61e3d3376d3bedc1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a3ddea99343f4804c61e3d3376d3bedc1">W5_A</a>&#160;&#160;&#160;0.30901699437494f</td></tr>
127<tr class="separator:a3ddea99343f4804c61e3d3376d3bedc1"><td class="memSeparator" colspan="2">&#160;</td></tr>
128<tr class="memitem:aeb3e0b1f96e2ecec9df46338c274ab9f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#aeb3e0b1f96e2ecec9df46338c274ab9f">W5_B</a>&#160;&#160;&#160;0.95105651629515f</td></tr>
129<tr class="separator:aeb3e0b1f96e2ecec9df46338c274ab9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
130<tr class="memitem:add4ae9e98c446aeb95bb6bf312996eb0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#add4ae9e98c446aeb95bb6bf312996eb0">W5_C</a>&#160;&#160;&#160;0.80901699437494f</td></tr>
131<tr class="separator:add4ae9e98c446aeb95bb6bf312996eb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
132<tr class="memitem:a55263f2a15f045ec5f4673b5bdda9bc4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a55263f2a15f045ec5f4673b5bdda9bc4">W5_D</a>&#160;&#160;&#160;0.58778525229247f</td></tr>
133<tr class="separator:a55263f2a15f045ec5f4673b5bdda9bc4"><td class="memSeparator" colspan="2">&#160;</td></tr>
134<tr class="memitem:a565f17c6fe3e9462057bb523e0127280"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a565f17c6fe3e9462057bb523e0127280">DFT_5</a>(c0, c1, c2, c3, c4)</td></tr>
135<tr class="memdesc:a565f17c6fe3e9462057bb523e0127280"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes radix-5 butterfly unit. <a href="#a565f17c6fe3e9462057bb523e0127280">More...</a><br /></td></tr>
136<tr class="separator:a565f17c6fe3e9462057bb523e0127280"><td class="memSeparator" colspan="2">&#160;</td></tr>
137<tr class="memitem:ac2612396f1dc9f3037fa59f6efd4e759"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#ac2612396f1dc9f3037fa59f6efd4e759">W7_A</a>&#160;&#160;&#160;0.62348980185873f</td></tr>
138<tr class="separator:ac2612396f1dc9f3037fa59f6efd4e759"><td class="memSeparator" colspan="2">&#160;</td></tr>
139<tr class="memitem:ab07d9041b925e9a79b953d01d170145d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#ab07d9041b925e9a79b953d01d170145d">W7_B</a>&#160;&#160;&#160;0.78183148246802f</td></tr>
140<tr class="separator:ab07d9041b925e9a79b953d01d170145d"><td class="memSeparator" colspan="2">&#160;</td></tr>
141<tr class="memitem:a014e0a1952e8b2a95b66f244958adc86"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a014e0a1952e8b2a95b66f244958adc86">W7_C</a>&#160;&#160;&#160;0.22252093395631f</td></tr>
142<tr class="separator:a014e0a1952e8b2a95b66f244958adc86"><td class="memSeparator" colspan="2">&#160;</td></tr>
143<tr class="memitem:a2e8bd73ebc6280cb023a90bff4b4e595"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a2e8bd73ebc6280cb023a90bff4b4e595">W7_D</a>&#160;&#160;&#160;0.97492791218182f</td></tr>
144<tr class="separator:a2e8bd73ebc6280cb023a90bff4b4e595"><td class="memSeparator" colspan="2">&#160;</td></tr>
145<tr class="memitem:ad6991beebc37eaa9fec68f1a7ccf019f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#ad6991beebc37eaa9fec68f1a7ccf019f">W7_E</a>&#160;&#160;&#160;0.90096886790241f</td></tr>
146<tr class="separator:ad6991beebc37eaa9fec68f1a7ccf019f"><td class="memSeparator" colspan="2">&#160;</td></tr>
147<tr class="memitem:a2c2804f21de28bb28c360d8d5b8ab98b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a2c2804f21de28bb28c360d8d5b8ab98b">W7_F</a>&#160;&#160;&#160;0.43388373911755f</td></tr>
148<tr class="separator:a2c2804f21de28bb28c360d8d5b8ab98b"><td class="memSeparator" colspan="2">&#160;</td></tr>
149<tr class="memitem:ad04a4028658f997aaca067742c2e8a49"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#ad04a4028658f997aaca067742c2e8a49">DFT_7</a>(c0, c1, c2, c3, c4, c5, c6)</td></tr>
150<tr class="memdesc:ad04a4028658f997aaca067742c2e8a49"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes radix-7 butterfly unit. <a href="#ad04a4028658f997aaca067742c2e8a49">More...</a><br /></td></tr>
151<tr class="separator:ad04a4028658f997aaca067742c2e8a49"><td class="memSeparator" colspan="2">&#160;</td></tr>
152<tr class="memitem:a4c4ce3f10939dd4237d0adee00086a53"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a4c4ce3f10939dd4237d0adee00086a53">DFT_8</a>(c0, c1, c2, c3, c4, c5, c6, c7)</td></tr>
153<tr class="memdesc:a4c4ce3f10939dd4237d0adee00086a53"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes radix-8 butterfly unit. <a href="#a4c4ce3f10939dd4237d0adee00086a53">More...</a><br /></td></tr>
154<tr class="separator:a4c4ce3f10939dd4237d0adee00086a53"><td class="memSeparator" colspan="2">&#160;</td></tr>
155</table><table class="memberdecls">
156<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
157Functions</h2></td></tr>
158<tr class="memitem:aea16049f33aa1fa59ca48e7092238bf0"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#aea16049f33aa1fa59ca48e7092238bf0">fft_radix_2_first_stage_axis_0</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes)</td></tr>
159<tr class="memdesc:aea16049f33aa1fa59ca48e7092238bf0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the first stage of a radix-2 DFT on axis 0. <a href="#aea16049f33aa1fa59ca48e7092238bf0">More...</a><br /></td></tr>
160<tr class="separator:aea16049f33aa1fa59ca48e7092238bf0"><td class="memSeparator" colspan="2">&#160;</td></tr>
161<tr class="memitem:ae919967e7eb2349552a120bd0ab40eb2"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#ae919967e7eb2349552a120bd0ab40eb2">fft_radix_2_first_stage_axis_1</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes)</td></tr>
162<tr class="memdesc:ae919967e7eb2349552a120bd0ab40eb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the first stage of a radix-2 DFT on axis 1. <a href="#ae919967e7eb2349552a120bd0ab40eb2">More...</a><br /></td></tr>
163<tr class="separator:ae919967e7eb2349552a120bd0ab40eb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
164<tr class="memitem:a3a40d552a9d4c240e46db020bd606a2b"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a3a40d552a9d4c240e46db020bd606a2b">fft_radix_3_first_stage_axis_0</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes)</td></tr>
165<tr class="memdesc:a3a40d552a9d4c240e46db020bd606a2b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the first stage of a radix-3 DFT on axis 0. <a href="#a3a40d552a9d4c240e46db020bd606a2b">More...</a><br /></td></tr>
166<tr class="separator:a3a40d552a9d4c240e46db020bd606a2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
167<tr class="memitem:a45a776393b0fabafec290645e3d67010"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a45a776393b0fabafec290645e3d67010">fft_radix_3_first_stage_axis_1</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes)</td></tr>
168<tr class="memdesc:a45a776393b0fabafec290645e3d67010"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the first stage of a radix-3 DFT on axis 1. <a href="#a45a776393b0fabafec290645e3d67010">More...</a><br /></td></tr>
169<tr class="separator:a45a776393b0fabafec290645e3d67010"><td class="memSeparator" colspan="2">&#160;</td></tr>
170<tr class="memitem:a67f435359dc175539c7d04d27c4bebb4"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a67f435359dc175539c7d04d27c4bebb4">fft_radix_4_first_stage_axis_0</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes)</td></tr>
171<tr class="memdesc:a67f435359dc175539c7d04d27c4bebb4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the first stage of a radix-4 DFT on axis 0. <a href="#a67f435359dc175539c7d04d27c4bebb4">More...</a><br /></td></tr>
172<tr class="separator:a67f435359dc175539c7d04d27c4bebb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
173<tr class="memitem:aa9b7071c5ccacded46ca51f250807be5"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#aa9b7071c5ccacded46ca51f250807be5">fft_radix_4_first_stage_axis_1</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes)</td></tr>
174<tr class="memdesc:aa9b7071c5ccacded46ca51f250807be5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the first stage of a radix-4 DFT on axis 1. <a href="#aa9b7071c5ccacded46ca51f250807be5">More...</a><br /></td></tr>
175<tr class="separator:aa9b7071c5ccacded46ca51f250807be5"><td class="memSeparator" colspan="2">&#160;</td></tr>
176<tr class="memitem:a11794801d4e717905406446d14cd313b"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a11794801d4e717905406446d14cd313b">fft_radix_5_first_stage_axis_0</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes)</td></tr>
177<tr class="memdesc:a11794801d4e717905406446d14cd313b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the first stage of a radix-5 DFT on axis 0. <a href="#a11794801d4e717905406446d14cd313b">More...</a><br /></td></tr>
178<tr class="separator:a11794801d4e717905406446d14cd313b"><td class="memSeparator" colspan="2">&#160;</td></tr>
179<tr class="memitem:a6f8673fc7472554bb672ef796f6b91b7"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a6f8673fc7472554bb672ef796f6b91b7">fft_radix_5_first_stage_axis_1</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes)</td></tr>
180<tr class="memdesc:a6f8673fc7472554bb672ef796f6b91b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the first stage of a radix-5 DFT on axis 1. <a href="#a6f8673fc7472554bb672ef796f6b91b7">More...</a><br /></td></tr>
181<tr class="separator:a6f8673fc7472554bb672ef796f6b91b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
182<tr class="memitem:aba8f7b960aa49b876ac266447a78c416"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#aba8f7b960aa49b876ac266447a78c416">fft_radix_7_first_stage_axis_0</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes)</td></tr>
183<tr class="memdesc:aba8f7b960aa49b876ac266447a78c416"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the first stage of a radix-7 DFT on axis 0. <a href="#aba8f7b960aa49b876ac266447a78c416">More...</a><br /></td></tr>
184<tr class="separator:aba8f7b960aa49b876ac266447a78c416"><td class="memSeparator" colspan="2">&#160;</td></tr>
185<tr class="memitem:a3f65de85962b99e35c4bd9abcbc7e660"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a3f65de85962b99e35c4bd9abcbc7e660">fft_radix_7_first_stage_axis_1</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes)</td></tr>
186<tr class="memdesc:a3f65de85962b99e35c4bd9abcbc7e660"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the first stage of a radix-7 DFT on axis 1. <a href="#a3f65de85962b99e35c4bd9abcbc7e660">More...</a><br /></td></tr>
187<tr class="separator:a3f65de85962b99e35c4bd9abcbc7e660"><td class="memSeparator" colspan="2">&#160;</td></tr>
188<tr class="memitem:a008d11872b90493790f933f82c9f05b5"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a008d11872b90493790f933f82c9f05b5">fft_radix_8_first_stage_axis_0</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes)</td></tr>
189<tr class="memdesc:a008d11872b90493790f933f82c9f05b5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the first stage of a radix-8 DFT on axis 0. <a href="#a008d11872b90493790f933f82c9f05b5">More...</a><br /></td></tr>
190<tr class="separator:a008d11872b90493790f933f82c9f05b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
191<tr class="memitem:a76f788853ef70fc0220ae4bb55db6d11"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a76f788853ef70fc0220ae4bb55db6d11">fft_radix_8_first_stage_axis_1</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes)</td></tr>
192<tr class="memdesc:a76f788853ef70fc0220ae4bb55db6d11"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the first stage of a radix-8 DFT on axis 1. <a href="#a76f788853ef70fc0220ae4bb55db6d11">More...</a><br /></td></tr>
193<tr class="separator:a76f788853ef70fc0220ae4bb55db6d11"><td class="memSeparator" colspan="2">&#160;</td></tr>
194<tr class="memitem:a6d2d172d9e177ed439b6f6ddc0785b86"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a6d2d172d9e177ed439b6f6ddc0785b86">fft_radix_2_axis_0</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes, uint Nx, uint Ni, float exp_const)</td></tr>
195<tr class="memdesc:a6d2d172d9e177ed439b6f6ddc0785b86"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes a stage of a radix-2 FFT on axis 0. <a href="#a6d2d172d9e177ed439b6f6ddc0785b86">More...</a><br /></td></tr>
196<tr class="separator:a6d2d172d9e177ed439b6f6ddc0785b86"><td class="memSeparator" colspan="2">&#160;</td></tr>
197<tr class="memitem:ad4c7557777731327f741ef848e2b28c2"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#ad4c7557777731327f741ef848e2b28c2">fft_radix_2_axis_1</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes, uint Nx, uint Ni, float exp_const)</td></tr>
198<tr class="memdesc:ad4c7557777731327f741ef848e2b28c2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes a stage of a radix-2 FFT on axis 1. <a href="#ad4c7557777731327f741ef848e2b28c2">More...</a><br /></td></tr>
199<tr class="separator:ad4c7557777731327f741ef848e2b28c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
200<tr class="memitem:af5d6a654bacf45355b1dcaacc6441691"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#af5d6a654bacf45355b1dcaacc6441691">fft_radix_3_axis_0</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes, uint Nx, uint Ni, float exp_const)</td></tr>
201<tr class="memdesc:af5d6a654bacf45355b1dcaacc6441691"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes a stage of a radix-3 FFT on axis 0. <a href="#af5d6a654bacf45355b1dcaacc6441691">More...</a><br /></td></tr>
202<tr class="separator:af5d6a654bacf45355b1dcaacc6441691"><td class="memSeparator" colspan="2">&#160;</td></tr>
203<tr class="memitem:a6c378af2ec36adec6dd88b961151a057"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a6c378af2ec36adec6dd88b961151a057">fft_radix_3_axis_1</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes, uint Nx, uint Ni, float exp_const)</td></tr>
204<tr class="memdesc:a6c378af2ec36adec6dd88b961151a057"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes a stage of a radix-3 FFT on axis 1. <a href="#a6c378af2ec36adec6dd88b961151a057">More...</a><br /></td></tr>
205<tr class="separator:a6c378af2ec36adec6dd88b961151a057"><td class="memSeparator" colspan="2">&#160;</td></tr>
206<tr class="memitem:a2f47b83634d50eb65c421bb579c7f056"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a2f47b83634d50eb65c421bb579c7f056">fft_radix_4_axis_0</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes, uint Nx, uint Ni, float exp_const)</td></tr>
207<tr class="memdesc:a2f47b83634d50eb65c421bb579c7f056"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes a stage of a radix-4 FFT on axis 0. <a href="#a2f47b83634d50eb65c421bb579c7f056">More...</a><br /></td></tr>
208<tr class="separator:a2f47b83634d50eb65c421bb579c7f056"><td class="memSeparator" colspan="2">&#160;</td></tr>
209<tr class="memitem:a1ab2cb321d9d68ffb9158faf4f4694ff"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a1ab2cb321d9d68ffb9158faf4f4694ff">fft_radix_4_axis_1</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes, uint Nx, uint Ni, float exp_const)</td></tr>
210<tr class="memdesc:a1ab2cb321d9d68ffb9158faf4f4694ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes a stage of a radix-4 FFT on axis 1. <a href="#a1ab2cb321d9d68ffb9158faf4f4694ff">More...</a><br /></td></tr>
211<tr class="separator:a1ab2cb321d9d68ffb9158faf4f4694ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
212<tr class="memitem:a4eb2e93f73d6b6409b675b4b2f56dcd0"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a4eb2e93f73d6b6409b675b4b2f56dcd0">fft_radix_5_axis_0</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes, uint Nx, uint Ni, float exp_const)</td></tr>
213<tr class="memdesc:a4eb2e93f73d6b6409b675b4b2f56dcd0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes a stage of a radix-5 FFT on axis 0. <a href="#a4eb2e93f73d6b6409b675b4b2f56dcd0">More...</a><br /></td></tr>
214<tr class="separator:a4eb2e93f73d6b6409b675b4b2f56dcd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
215<tr class="memitem:abb1a1c12ab2c72bbb439051b7ff5481b"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#abb1a1c12ab2c72bbb439051b7ff5481b">fft_radix_5_axis_1</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes, uint Nx, uint Ni, float exp_const)</td></tr>
216<tr class="memdesc:abb1a1c12ab2c72bbb439051b7ff5481b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes a stage of a radix-5 FFT on axis 1. <a href="#abb1a1c12ab2c72bbb439051b7ff5481b">More...</a><br /></td></tr>
217<tr class="separator:abb1a1c12ab2c72bbb439051b7ff5481b"><td class="memSeparator" colspan="2">&#160;</td></tr>
218<tr class="memitem:ab6b1ce916618012474a0fa938fa69c6c"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#ab6b1ce916618012474a0fa938fa69c6c">fft_radix_7_axis_0</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes, uint Nx, uint Ni, float exp_const)</td></tr>
219<tr class="memdesc:ab6b1ce916618012474a0fa938fa69c6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes a stage of a radix-7 FFT on axis 0. <a href="#ab6b1ce916618012474a0fa938fa69c6c">More...</a><br /></td></tr>
220<tr class="separator:ab6b1ce916618012474a0fa938fa69c6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
221<tr class="memitem:a76f9319802469601e05d6624e9d8d67c"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a76f9319802469601e05d6624e9d8d67c">fft_radix_7_axis_1</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes, uint Nx, uint Ni, float exp_const)</td></tr>
222<tr class="memdesc:a76f9319802469601e05d6624e9d8d67c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes a stage of a radix-7 FFT on axis 1. <a href="#a76f9319802469601e05d6624e9d8d67c">More...</a><br /></td></tr>
223<tr class="separator:a76f9319802469601e05d6624e9d8d67c"><td class="memSeparator" colspan="2">&#160;</td></tr>
224<tr class="memitem:a73b5ddb25a62a1505d20c02aab7f69cd"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#a73b5ddb25a62a1505d20c02aab7f69cd">fft_radix_8_axis_0</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes, uint Nx, uint Ni, float exp_const)</td></tr>
225<tr class="memdesc:a73b5ddb25a62a1505d20c02aab7f69cd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes a stage of a radix-8 FFT on axis 0. <a href="#a73b5ddb25a62a1505d20c02aab7f69cd">More...</a><br /></td></tr>
226<tr class="separator:a73b5ddb25a62a1505d20c02aab7f69cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
227<tr class="memitem:aa056502bc3783dce7428acc17ce9ee94"><td class="memItemLeft" align="right" valign="top">kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fft_8cl.xhtml#aa056502bc3783dce7428acc17ce9ee94">fft_radix_8_axis_1</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_stride_z, uint input_step_z, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_stride_z, uint output_step_z, uint output_offset_first_element_in_bytes, uint Nx, uint Ni, float exp_const)</td></tr>
228<tr class="memdesc:aa056502bc3783dce7428acc17ce9ee94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes a stage of a radix-8 FFT on axis 1. <a href="#aa056502bc3783dce7428acc17ce9ee94">More...</a><br /></td></tr>
229<tr class="separator:aa056502bc3783dce7428acc17ce9ee94"><td class="memSeparator" colspan="2">&#160;</td></tr>
230</table>
231<h2 class="groupheader">Macro Definition Documentation</h2>
232<a id="a5a63ca1d5404d67d13382a90cfc9b6c3"></a>
233<h2 class="memtitle"><span class="permalink"><a href="#a5a63ca1d5404d67d13382a90cfc9b6c3">&#9670;&nbsp;</a></span>DFT_2</h2>
234
235<div class="memitem">
236<div class="memproto">
237 <table class="memname">
238 <tr>
239 <td class="memname">#define DFT_2</td>
240 <td>(</td>
241 <td class="paramtype">&#160;</td>
242 <td class="paramname">c0, </td>
243 </tr>
244 <tr>
245 <td class="paramkey"></td>
246 <td></td>
247 <td class="paramtype">&#160;</td>
248 <td class="paramname">c1&#160;</td>
249 </tr>
250 <tr>
251 <td></td>
252 <td>)</td>
253 <td></td><td></td>
254 </tr>
255 </table>
256</div><div class="memdoc">
257<b>Value:</b><div class="fragment"><div class="line">{ \</div><div class="line"> float2 v0; \</div><div class="line"> v0 = c0; \</div><div class="line"> c0 = v0 + c1; \</div><div class="line"> c1 = v0 - c1; \</div><div class="line"> }</div></div><!-- fragment -->
258<p>Computes radix-2 butterfly unit. </p>
259<dl class="params"><dt>Parameters</dt><dd>
260 <table class="params">
261 <tr><td class="paramdir">[in,out]</td><td class="paramname">c0</td><td>Complex input 0. </td></tr>
262 <tr><td class="paramdir">[in,out]</td><td class="paramname">c1</td><td>Complex input 1. </td></tr>
263 </table>
264 </dd>
265</dl>
266
267<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00046">46</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
268
269</div>
270</div>
271<a id="ac6ec77d2e41d56919c14c1483eee94ac"></a>
272<h2 class="memtitle"><span class="permalink"><a href="#ac6ec77d2e41d56919c14c1483eee94ac">&#9670;&nbsp;</a></span>DFT_3</h2>
273
274<div class="memitem">
275<div class="memproto">
276 <table class="memname">
277 <tr>
278 <td class="memname">#define DFT_3</td>
279 <td>(</td>
280 <td class="paramtype">&#160;</td>
281 <td class="paramname">c0, </td>
282 </tr>
283 <tr>
284 <td class="paramkey"></td>
285 <td></td>
286 <td class="paramtype">&#160;</td>
287 <td class="paramname">c1, </td>
288 </tr>
289 <tr>
290 <td class="paramkey"></td>
291 <td></td>
292 <td class="paramtype">&#160;</td>
293 <td class="paramname">c2&#160;</td>
294 </tr>
295 <tr>
296 <td></td>
297 <td>)</td>
298 <td></td><td></td>
299 </tr>
300 </table>
301</div><div class="memdoc">
302<b>Value:</b><div class="fragment"><div class="line">{ \</div><div class="line"> float2 v0 = c1 + c2; \</div><div class="line"> float2 v1 = c1 - c2; \</div><div class="line"> c1.x = c0.x - 0.5f * v0.x + v1.y * <a class="code" href="fft_8cl.xhtml#adec4b7ab0397cf3774d5971cc1296d9f">SQRT3DIV2</a>; \</div><div class="line"> c1.y = c0.y - 0.5f * v0.y - v1.x * <a class="code" href="fft_8cl.xhtml#adec4b7ab0397cf3774d5971cc1296d9f">SQRT3DIV2</a>; \</div><div class="line"> c2.x = c0.x - 0.5f * v0.x - v1.y * <a class="code" href="fft_8cl.xhtml#adec4b7ab0397cf3774d5971cc1296d9f">SQRT3DIV2</a>; \</div><div class="line"> c2.y = c0.y - 0.5f * v0.y + v1.x * <a class="code" href="fft_8cl.xhtml#adec4b7ab0397cf3774d5971cc1296d9f">SQRT3DIV2</a>; \</div><div class="line"> c0 = c0 + v0; \</div><div class="line"> }</div><div class="ttc" id="fft_8cl_xhtml_adec4b7ab0397cf3774d5971cc1296d9f"><div class="ttname"><a href="fft_8cl.xhtml#adec4b7ab0397cf3774d5971cc1296d9f">SQRT3DIV2</a></div><div class="ttdeci">#define SQRT3DIV2</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00055">fft.cl:55</a></div></div>
303</div><!-- fragment -->
304<p>Computes radix-3 butterfly unit. </p>
305<dl class="params"><dt>Parameters</dt><dd>
306 <table class="params">
307 <tr><td class="paramdir">[in,out]</td><td class="paramname">c0</td><td>Complex input 0. </td></tr>
308 <tr><td class="paramdir">[in,out]</td><td class="paramname">c1</td><td>Complex input 1. </td></tr>
309 <tr><td class="paramdir">[in,out]</td><td class="paramname">c2</td><td>Complex input 2. </td></tr>
310 </table>
311 </dd>
312</dl>
313
314<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00063">63</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
315
316</div>
317</div>
318<a id="af97e6d43f8b70bcf009d521f8909db25"></a>
319<h2 class="memtitle"><span class="permalink"><a href="#af97e6d43f8b70bcf009d521f8909db25">&#9670;&nbsp;</a></span>DFT_4</h2>
320
321<div class="memitem">
322<div class="memproto">
323 <table class="memname">
324 <tr>
325 <td class="memname">#define DFT_4</td>
326 <td>(</td>
327 <td class="paramtype">&#160;</td>
328 <td class="paramname">c0, </td>
329 </tr>
330 <tr>
331 <td class="paramkey"></td>
332 <td></td>
333 <td class="paramtype">&#160;</td>
334 <td class="paramname">c1, </td>
335 </tr>
336 <tr>
337 <td class="paramkey"></td>
338 <td></td>
339 <td class="paramtype">&#160;</td>
340 <td class="paramname">c2, </td>
341 </tr>
342 <tr>
343 <td class="paramkey"></td>
344 <td></td>
345 <td class="paramtype">&#160;</td>
346 <td class="paramname">c3&#160;</td>
347 </tr>
348 <tr>
349 <td></td>
350 <td>)</td>
351 <td></td><td></td>
352 </tr>
353 </table>
354</div><div class="memdoc">
355<b>Value:</b><div class="fragment"><div class="line">{ \</div><div class="line"> float2 v0, v1, v2, v3; \</div><div class="line"> v0 = c0 + c2; \</div><div class="line"> v1 = c1 + c3; \</div><div class="line"> v2 = c0 - c2; \</div><div class="line"> v3.x = c1.y - c3.y; \</div><div class="line"> v3.y = c3.x - c1.x; \</div><div class="line"> c0 = v0 + v1; \</div><div class="line"> c2 = v0 - v1; \</div><div class="line"> c1 = v2 + v3; \</div><div class="line"> c3 = v2 - v3; \</div><div class="line"> }</div></div><!-- fragment -->
356<p>Computes radix-4 butterfly unit. </p>
357<dl class="params"><dt>Parameters</dt><dd>
358 <table class="params">
359 <tr><td class="paramdir">[in,out]</td><td class="paramname">c0</td><td>Complex input 0. </td></tr>
360 <tr><td class="paramdir">[in,out]</td><td class="paramname">c1</td><td>Complex input 1. </td></tr>
361 <tr><td class="paramdir">[in,out]</td><td class="paramname">c2</td><td>Complex input 2. </td></tr>
362 <tr><td class="paramdir">[in,out]</td><td class="paramname">c3</td><td>Complex input 3. </td></tr>
363 </table>
364 </dd>
365</dl>
366
367<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00081">81</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
368
369</div>
370</div>
371<a id="a565f17c6fe3e9462057bb523e0127280"></a>
372<h2 class="memtitle"><span class="permalink"><a href="#a565f17c6fe3e9462057bb523e0127280">&#9670;&nbsp;</a></span>DFT_5</h2>
373
374<div class="memitem">
375<div class="memproto">
376 <table class="memname">
377 <tr>
378 <td class="memname">#define DFT_5</td>
379 <td>(</td>
380 <td class="paramtype">&#160;</td>
381 <td class="paramname">c0, </td>
382 </tr>
383 <tr>
384 <td class="paramkey"></td>
385 <td></td>
386 <td class="paramtype">&#160;</td>
387 <td class="paramname">c1, </td>
388 </tr>
389 <tr>
390 <td class="paramkey"></td>
391 <td></td>
392 <td class="paramtype">&#160;</td>
393 <td class="paramname">c2, </td>
394 </tr>
395 <tr>
396 <td class="paramkey"></td>
397 <td></td>
398 <td class="paramtype">&#160;</td>
399 <td class="paramname">c3, </td>
400 </tr>
401 <tr>
402 <td class="paramkey"></td>
403 <td></td>
404 <td class="paramtype">&#160;</td>
405 <td class="paramname">c4&#160;</td>
406 </tr>
407 <tr>
408 <td></td>
409 <td>)</td>
410 <td></td><td></td>
411 </tr>
412 </table>
413</div><div class="memdoc">
414<b>Value:</b><div class="fragment"><div class="line">{ \</div><div class="line"> float2 v0, v1, v2, v3, v4; \</div><div class="line"> v0 = c0; \</div><div class="line"> v1 = <a class="code" href="fft_8cl.xhtml#a3ddea99343f4804c61e3d3376d3bedc1">W5_A</a> * (c1 + c4) - <a class="code" href="fft_8cl.xhtml#add4ae9e98c446aeb95bb6bf312996eb0">W5_C</a> * (c2 + c3); \</div><div class="line"> v2 = <a class="code" href="fft_8cl.xhtml#add4ae9e98c446aeb95bb6bf312996eb0">W5_C</a> * (c1 + c4) - <a class="code" href="fft_8cl.xhtml#a3ddea99343f4804c61e3d3376d3bedc1">W5_A</a> * (c2 + c3); \</div><div class="line"> v3 = <a class="code" href="fft_8cl.xhtml#a55263f2a15f045ec5f4673b5bdda9bc4">W5_D</a> * (c1 - c4) - <a class="code" href="fft_8cl.xhtml#aeb3e0b1f96e2ecec9df46338c274ab9f">W5_B</a> * (c2 - c3); \</div><div class="line"> v4 = <a class="code" href="fft_8cl.xhtml#aeb3e0b1f96e2ecec9df46338c274ab9f">W5_B</a> * (c1 - c4) + <a class="code" href="fft_8cl.xhtml#a55263f2a15f045ec5f4673b5bdda9bc4">W5_D</a> * (c2 - c3); \</div><div class="line"> c0 = v0 + c1 + c2 + c3 + c4; \</div><div class="line"> c1 = v0 + v1 + (float2)(v4.y, -v4.x); \</div><div class="line"> c2 = v0 - v2 + (float2)(v3.y, -v3.x); \</div><div class="line"> c3 = v0 - v2 + (float2)(-v3.y, v3.x); \</div><div class="line"> c4 = v0 + v1 + (float2)(-v4.y, v4.x); \</div><div class="line"> }</div><div class="ttc" id="fft_8cl_xhtml_aeb3e0b1f96e2ecec9df46338c274ab9f"><div class="ttname"><a href="fft_8cl.xhtml#aeb3e0b1f96e2ecec9df46338c274ab9f">W5_B</a></div><div class="ttdeci">#define W5_B</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00097">fft.cl:97</a></div></div>
415<div class="ttc" id="fft_8cl_xhtml_a3ddea99343f4804c61e3d3376d3bedc1"><div class="ttname"><a href="fft_8cl.xhtml#a3ddea99343f4804c61e3d3376d3bedc1">W5_A</a></div><div class="ttdeci">#define W5_A</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00096">fft.cl:96</a></div></div>
416<div class="ttc" id="fft_8cl_xhtml_add4ae9e98c446aeb95bb6bf312996eb0"><div class="ttname"><a href="fft_8cl.xhtml#add4ae9e98c446aeb95bb6bf312996eb0">W5_C</a></div><div class="ttdeci">#define W5_C</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00098">fft.cl:98</a></div></div>
417<div class="ttc" id="fft_8cl_xhtml_a55263f2a15f045ec5f4673b5bdda9bc4"><div class="ttname"><a href="fft_8cl.xhtml#a55263f2a15f045ec5f4673b5bdda9bc4">W5_D</a></div><div class="ttdeci">#define W5_D</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00099">fft.cl:99</a></div></div>
418</div><!-- fragment -->
419<p>Computes radix-5 butterfly unit. </p>
420<dl class="params"><dt>Parameters</dt><dd>
421 <table class="params">
422 <tr><td class="paramdir">[in,out]</td><td class="paramname">c0</td><td>Complex input 0. </td></tr>
423 <tr><td class="paramdir">[in,out]</td><td class="paramname">c1</td><td>Complex input 1. </td></tr>
424 <tr><td class="paramdir">[in,out]</td><td class="paramname">c2</td><td>Complex input 2. </td></tr>
425 <tr><td class="paramdir">[in,out]</td><td class="paramname">c3</td><td>Complex input 3. </td></tr>
426 <tr><td class="paramdir">[in,out]</td><td class="paramname">c4</td><td>Complex input 4. </td></tr>
427 </table>
428 </dd>
429</dl>
430
431<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00109">109</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
432
433</div>
434</div>
435<a id="ad04a4028658f997aaca067742c2e8a49"></a>
436<h2 class="memtitle"><span class="permalink"><a href="#ad04a4028658f997aaca067742c2e8a49">&#9670;&nbsp;</a></span>DFT_7</h2>
437
438<div class="memitem">
439<div class="memproto">
440 <table class="memname">
441 <tr>
442 <td class="memname">#define DFT_7</td>
443 <td>(</td>
444 <td class="paramtype">&#160;</td>
445 <td class="paramname">c0, </td>
446 </tr>
447 <tr>
448 <td class="paramkey"></td>
449 <td></td>
450 <td class="paramtype">&#160;</td>
451 <td class="paramname">c1, </td>
452 </tr>
453 <tr>
454 <td class="paramkey"></td>
455 <td></td>
456 <td class="paramtype">&#160;</td>
457 <td class="paramname">c2, </td>
458 </tr>
459 <tr>
460 <td class="paramkey"></td>
461 <td></td>
462 <td class="paramtype">&#160;</td>
463 <td class="paramname">c3, </td>
464 </tr>
465 <tr>
466 <td class="paramkey"></td>
467 <td></td>
468 <td class="paramtype">&#160;</td>
469 <td class="paramname">c4, </td>
470 </tr>
471 <tr>
472 <td class="paramkey"></td>
473 <td></td>
474 <td class="paramtype">&#160;</td>
475 <td class="paramname">c5, </td>
476 </tr>
477 <tr>
478 <td class="paramkey"></td>
479 <td></td>
480 <td class="paramtype">&#160;</td>
481 <td class="paramname">c6&#160;</td>
482 </tr>
483 <tr>
484 <td></td>
485 <td>)</td>
486 <td></td><td></td>
487 </tr>
488 </table>
489</div><div class="memdoc">
490<b>Value:</b><div class="fragment"><div class="line">{ \</div><div class="line"> float2 v0, v1, v2, v3, v4, v5, v6; \</div><div class="line"> v0 = c0; \</div><div class="line"> v1 = <a class="code" href="fft_8cl.xhtml#ac2612396f1dc9f3037fa59f6efd4e759">W7_A</a> * (c1 + c6) - <a class="code" href="fft_8cl.xhtml#a014e0a1952e8b2a95b66f244958adc86">W7_C</a> * (c2 + c5) - <a class="code" href="fft_8cl.xhtml#ad6991beebc37eaa9fec68f1a7ccf019f">W7_E</a> * (c3 + c4); \</div><div class="line"> v2 = <a class="code" href="fft_8cl.xhtml#a014e0a1952e8b2a95b66f244958adc86">W7_C</a> * (c1 + c6) + <a class="code" href="fft_8cl.xhtml#ad6991beebc37eaa9fec68f1a7ccf019f">W7_E</a> * (c2 + c5) - <a class="code" href="fft_8cl.xhtml#ac2612396f1dc9f3037fa59f6efd4e759">W7_A</a> * (c3 + c4); \</div><div class="line"> v3 = <a class="code" href="fft_8cl.xhtml#ad6991beebc37eaa9fec68f1a7ccf019f">W7_E</a> * (c1 + c6) - <a class="code" href="fft_8cl.xhtml#ac2612396f1dc9f3037fa59f6efd4e759">W7_A</a> * (c2 + c5) + <a class="code" href="fft_8cl.xhtml#a014e0a1952e8b2a95b66f244958adc86">W7_C</a> * (c3 + c4); \</div><div class="line"> v4 = <a class="code" href="fft_8cl.xhtml#ab07d9041b925e9a79b953d01d170145d">W7_B</a> * (c1 - c6) + <a class="code" href="fft_8cl.xhtml#a2e8bd73ebc6280cb023a90bff4b4e595">W7_D</a> * (c2 - c5) + <a class="code" href="fft_8cl.xhtml#a2c2804f21de28bb28c360d8d5b8ab98b">W7_F</a> * (c3 - c4); \</div><div class="line"> v5 = <a class="code" href="fft_8cl.xhtml#a2e8bd73ebc6280cb023a90bff4b4e595">W7_D</a> * (c1 - c6) - <a class="code" href="fft_8cl.xhtml#a2c2804f21de28bb28c360d8d5b8ab98b">W7_F</a> * (c2 - c5) - <a class="code" href="fft_8cl.xhtml#ab07d9041b925e9a79b953d01d170145d">W7_B</a> * (c3 - c4); \</div><div class="line"> v6 = <a class="code" href="fft_8cl.xhtml#a2c2804f21de28bb28c360d8d5b8ab98b">W7_F</a> * (c1 - c6) - <a class="code" href="fft_8cl.xhtml#ab07d9041b925e9a79b953d01d170145d">W7_B</a> * (c2 - c5) + <a class="code" href="fft_8cl.xhtml#a2e8bd73ebc6280cb023a90bff4b4e595">W7_D</a> * (c3 - c4); \</div><div class="line"> c0 = v0 + c1 + c2 + c3 + c4 + c5 + c6; \</div><div class="line"> c1 = v0 + v1 + (float2)(v4.y, -v4.x); \</div><div class="line"> c2 = v0 - v2 + (float2)(v5.y, -v5.x); \</div><div class="line"> c3 = v0 - v3 + (float2)(v6.y, -v6.x); \</div><div class="line"> c4 = v0 - v3 + (float2)(-v6.y, v6.x); \</div><div class="line"> c5 = v0 - v2 + (float2)(-v5.y, v5.x); \</div><div class="line"> c6 = v0 + v1 + (float2)(-v4.y, v4.x); \</div><div class="line"> }</div><div class="ttc" id="fft_8cl_xhtml_ad6991beebc37eaa9fec68f1a7ccf019f"><div class="ttname"><a href="fft_8cl.xhtml#ad6991beebc37eaa9fec68f1a7ccf019f">W7_E</a></div><div class="ttdeci">#define W7_E</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00129">fft.cl:129</a></div></div>
491<div class="ttc" id="fft_8cl_xhtml_ac2612396f1dc9f3037fa59f6efd4e759"><div class="ttname"><a href="fft_8cl.xhtml#ac2612396f1dc9f3037fa59f6efd4e759">W7_A</a></div><div class="ttdeci">#define W7_A</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00125">fft.cl:125</a></div></div>
492<div class="ttc" id="fft_8cl_xhtml_a2c2804f21de28bb28c360d8d5b8ab98b"><div class="ttname"><a href="fft_8cl.xhtml#a2c2804f21de28bb28c360d8d5b8ab98b">W7_F</a></div><div class="ttdeci">#define W7_F</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00130">fft.cl:130</a></div></div>
493<div class="ttc" id="fft_8cl_xhtml_ab07d9041b925e9a79b953d01d170145d"><div class="ttname"><a href="fft_8cl.xhtml#ab07d9041b925e9a79b953d01d170145d">W7_B</a></div><div class="ttdeci">#define W7_B</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00126">fft.cl:126</a></div></div>
494<div class="ttc" id="fft_8cl_xhtml_a014e0a1952e8b2a95b66f244958adc86"><div class="ttname"><a href="fft_8cl.xhtml#a014e0a1952e8b2a95b66f244958adc86">W7_C</a></div><div class="ttdeci">#define W7_C</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00127">fft.cl:127</a></div></div>
495<div class="ttc" id="fft_8cl_xhtml_a2e8bd73ebc6280cb023a90bff4b4e595"><div class="ttname"><a href="fft_8cl.xhtml#a2e8bd73ebc6280cb023a90bff4b4e595">W7_D</a></div><div class="ttdeci">#define W7_D</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00128">fft.cl:128</a></div></div>
496</div><!-- fragment -->
497<p>Computes radix-7 butterfly unit. </p>
498<dl class="params"><dt>Parameters</dt><dd>
499 <table class="params">
500 <tr><td class="paramdir">[in,out]</td><td class="paramname">c0</td><td>Complex input 0. </td></tr>
501 <tr><td class="paramdir">[in,out]</td><td class="paramname">c1</td><td>Complex input 1. </td></tr>
502 <tr><td class="paramdir">[in,out]</td><td class="paramname">c2</td><td>Complex input 2. </td></tr>
503 <tr><td class="paramdir">[in,out]</td><td class="paramname">c3</td><td>Complex input 3. </td></tr>
504 <tr><td class="paramdir">[in,out]</td><td class="paramname">c4</td><td>Complex input 4. </td></tr>
505 <tr><td class="paramdir">[in,out]</td><td class="paramname">c5</td><td>Complex input 5. </td></tr>
506 <tr><td class="paramdir">[in,out]</td><td class="paramname">c6</td><td>Complex input 6. </td></tr>
507 </table>
508 </dd>
509</dl>
510
511<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00142">142</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
512
513</div>
514</div>
515<a id="a4c4ce3f10939dd4237d0adee00086a53"></a>
516<h2 class="memtitle"><span class="permalink"><a href="#a4c4ce3f10939dd4237d0adee00086a53">&#9670;&nbsp;</a></span>DFT_8</h2>
517
518<div class="memitem">
519<div class="memproto">
520 <table class="memname">
521 <tr>
522 <td class="memname">#define DFT_8</td>
523 <td>(</td>
524 <td class="paramtype">&#160;</td>
525 <td class="paramname">c0, </td>
526 </tr>
527 <tr>
528 <td class="paramkey"></td>
529 <td></td>
530 <td class="paramtype">&#160;</td>
531 <td class="paramname">c1, </td>
532 </tr>
533 <tr>
534 <td class="paramkey"></td>
535 <td></td>
536 <td class="paramtype">&#160;</td>
537 <td class="paramname">c2, </td>
538 </tr>
539 <tr>
540 <td class="paramkey"></td>
541 <td></td>
542 <td class="paramtype">&#160;</td>
543 <td class="paramname">c3, </td>
544 </tr>
545 <tr>
546 <td class="paramkey"></td>
547 <td></td>
548 <td class="paramtype">&#160;</td>
549 <td class="paramname">c4, </td>
550 </tr>
551 <tr>
552 <td class="paramkey"></td>
553 <td></td>
554 <td class="paramtype">&#160;</td>
555 <td class="paramname">c5, </td>
556 </tr>
557 <tr>
558 <td class="paramkey"></td>
559 <td></td>
560 <td class="paramtype">&#160;</td>
561 <td class="paramname">c6, </td>
562 </tr>
563 <tr>
564 <td class="paramkey"></td>
565 <td></td>
566 <td class="paramtype">&#160;</td>
567 <td class="paramname">c7&#160;</td>
568 </tr>
569 <tr>
570 <td></td>
571 <td>)</td>
572 <td></td><td></td>
573 </tr>
574 </table>
575</div><div class="memdoc">
576
577<p>Computes radix-8 butterfly unit. </p>
578<dl class="params"><dt>Parameters</dt><dd>
579 <table class="params">
580 <tr><td class="paramdir">[in,out]</td><td class="paramname">c0</td><td>Complex input 0. </td></tr>
581 <tr><td class="paramdir">[in,out]</td><td class="paramname">c1</td><td>Complex input 1. </td></tr>
582 <tr><td class="paramdir">[in,out]</td><td class="paramname">c2</td><td>Complex input 2. </td></tr>
583 <tr><td class="paramdir">[in,out]</td><td class="paramname">c3</td><td>Complex input 3. </td></tr>
584 <tr><td class="paramdir">[in,out]</td><td class="paramname">c4</td><td>Complex input 4. </td></tr>
585 <tr><td class="paramdir">[in,out]</td><td class="paramname">c5</td><td>Complex input 5. </td></tr>
586 <tr><td class="paramdir">[in,out]</td><td class="paramname">c6</td><td>Complex input 6. </td></tr>
587 <tr><td class="paramdir">[in,out]</td><td class="paramname">c7</td><td>Complex input 7. </td></tr>
588 </table>
589 </dd>
590</dl>
591
592<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00172">172</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
593
594</div>
595</div>
596<a id="adec4b7ab0397cf3774d5971cc1296d9f"></a>
597<h2 class="memtitle"><span class="permalink"><a href="#adec4b7ab0397cf3774d5971cc1296d9f">&#9670;&nbsp;</a></span>SQRT3DIV2</h2>
598
599<div class="memitem">
600<div class="memproto">
601 <table class="memname">
602 <tr>
603 <td class="memname">#define SQRT3DIV2&#160;&#160;&#160;0.86602540378443f</td>
604 </tr>
605 </table>
606</div><div class="memdoc">
607
608<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00055">55</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
609
610</div>
611</div>
612<a id="ad4dcc4a8b94f263cd19c59fdc2cec3d2"></a>
613<h2 class="memtitle"><span class="permalink"><a href="#ad4dcc4a8b94f263cd19c59fdc2cec3d2">&#9670;&nbsp;</a></span>TWIDDLE_FACTOR_MULTIPLICATION</h2>
614
615<div class="memitem">
616<div class="memproto">
617 <table class="memname">
618 <tr>
619 <td class="memname">#define TWIDDLE_FACTOR_MULTIPLICATION</td>
620 <td>(</td>
621 <td class="paramtype">&#160;</td>
622 <td class="paramname">phi, </td>
623 </tr>
624 <tr>
625 <td class="paramkey"></td>
626 <td></td>
627 <td class="paramtype">&#160;</td>
628 <td class="paramname">input&#160;</td>
629 </tr>
630 <tr>
631 <td></td>
632 <td>)</td>
633 <td></td><td></td>
634 </tr>
635 </table>
636</div><div class="memdoc">
Jenkins0e205f72019-11-28 16:53:35 +0000637<b>Value:</b><div class="fragment"><div class="line">{ \</div><div class="line"> float2 <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a1a367830ae09bf6138df822888ec1d71">w</a>, tmp; \</div><div class="line"> w.x = native_cos(phi); \</div><div class="line"> w.y = native_sin(phi); \</div><div class="line"> tmp.x = (<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a1a367830ae09bf6138df822888ec1d71">w</a>.x * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.x) - (<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a1a367830ae09bf6138df822888ec1d71">w</a>.y * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.y); \</div><div class="line"> tmp.y = (<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a1a367830ae09bf6138df822888ec1d71">w</a>.x * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.y) + (<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a1a367830ae09bf6138df822888ec1d71">w</a>.y * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.x); \</div><div class="line"> input = tmp; \</div><div class="line"> }</div><div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a1a367830ae09bf6138df822888ec1d71"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a1a367830ae09bf6138df822888ec1d71">arm_compute::test::validation::w</a></div><div class="ttdeci">SimpleTensor&lt; float &gt; w</div><div class="ttdef"><b>Definition:</b> <a href="_c_p_p_2_d_f_t_8cpp_source.xhtml#l00156">DFT.cpp:156</a></div></div>
638<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +0100639</div><!-- fragment -->
640<p>Calculates and applies the twiddle factor to a given input. </p>
641<dl class="params"><dt>Parameters</dt><dd>
642 <table class="params">
643 <tr><td class="paramdir">[in]</td><td class="paramname">phi</td><td>The angle. </td></tr>
644 <tr><td class="paramdir">[in,out]</td><td class="paramname">input</td><td>The input on which the factor should be applied. </td></tr>
645 </table>
646 </dd>
647</dl>
648
649<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00031">31</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
650
651</div>
652</div>
653<a id="a3ddea99343f4804c61e3d3376d3bedc1"></a>
654<h2 class="memtitle"><span class="permalink"><a href="#a3ddea99343f4804c61e3d3376d3bedc1">&#9670;&nbsp;</a></span>W5_A</h2>
655
656<div class="memitem">
657<div class="memproto">
658 <table class="memname">
659 <tr>
660 <td class="memname">#define W5_A&#160;&#160;&#160;0.30901699437494f</td>
661 </tr>
662 </table>
663</div><div class="memdoc">
664
665<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00096">96</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
666
667</div>
668</div>
669<a id="aeb3e0b1f96e2ecec9df46338c274ab9f"></a>
670<h2 class="memtitle"><span class="permalink"><a href="#aeb3e0b1f96e2ecec9df46338c274ab9f">&#9670;&nbsp;</a></span>W5_B</h2>
671
672<div class="memitem">
673<div class="memproto">
674 <table class="memname">
675 <tr>
676 <td class="memname">#define W5_B&#160;&#160;&#160;0.95105651629515f</td>
677 </tr>
678 </table>
679</div><div class="memdoc">
680
681<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00097">97</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
682
683</div>
684</div>
685<a id="add4ae9e98c446aeb95bb6bf312996eb0"></a>
686<h2 class="memtitle"><span class="permalink"><a href="#add4ae9e98c446aeb95bb6bf312996eb0">&#9670;&nbsp;</a></span>W5_C</h2>
687
688<div class="memitem">
689<div class="memproto">
690 <table class="memname">
691 <tr>
692 <td class="memname">#define W5_C&#160;&#160;&#160;0.80901699437494f</td>
693 </tr>
694 </table>
695</div><div class="memdoc">
696
697<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00098">98</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
698
699</div>
700</div>
701<a id="a55263f2a15f045ec5f4673b5bdda9bc4"></a>
702<h2 class="memtitle"><span class="permalink"><a href="#a55263f2a15f045ec5f4673b5bdda9bc4">&#9670;&nbsp;</a></span>W5_D</h2>
703
704<div class="memitem">
705<div class="memproto">
706 <table class="memname">
707 <tr>
708 <td class="memname">#define W5_D&#160;&#160;&#160;0.58778525229247f</td>
709 </tr>
710 </table>
711</div><div class="memdoc">
712
713<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00099">99</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
714
715</div>
716</div>
717<a id="ac2612396f1dc9f3037fa59f6efd4e759"></a>
718<h2 class="memtitle"><span class="permalink"><a href="#ac2612396f1dc9f3037fa59f6efd4e759">&#9670;&nbsp;</a></span>W7_A</h2>
719
720<div class="memitem">
721<div class="memproto">
722 <table class="memname">
723 <tr>
724 <td class="memname">#define W7_A&#160;&#160;&#160;0.62348980185873f</td>
725 </tr>
726 </table>
727</div><div class="memdoc">
728
729<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00125">125</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
730
731</div>
732</div>
733<a id="ab07d9041b925e9a79b953d01d170145d"></a>
734<h2 class="memtitle"><span class="permalink"><a href="#ab07d9041b925e9a79b953d01d170145d">&#9670;&nbsp;</a></span>W7_B</h2>
735
736<div class="memitem">
737<div class="memproto">
738 <table class="memname">
739 <tr>
740 <td class="memname">#define W7_B&#160;&#160;&#160;0.78183148246802f</td>
741 </tr>
742 </table>
743</div><div class="memdoc">
744
745<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00126">126</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
746
747</div>
748</div>
749<a id="a014e0a1952e8b2a95b66f244958adc86"></a>
750<h2 class="memtitle"><span class="permalink"><a href="#a014e0a1952e8b2a95b66f244958adc86">&#9670;&nbsp;</a></span>W7_C</h2>
751
752<div class="memitem">
753<div class="memproto">
754 <table class="memname">
755 <tr>
756 <td class="memname">#define W7_C&#160;&#160;&#160;0.22252093395631f</td>
757 </tr>
758 </table>
759</div><div class="memdoc">
760
761<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00127">127</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
762
763</div>
764</div>
765<a id="a2e8bd73ebc6280cb023a90bff4b4e595"></a>
766<h2 class="memtitle"><span class="permalink"><a href="#a2e8bd73ebc6280cb023a90bff4b4e595">&#9670;&nbsp;</a></span>W7_D</h2>
767
768<div class="memitem">
769<div class="memproto">
770 <table class="memname">
771 <tr>
772 <td class="memname">#define W7_D&#160;&#160;&#160;0.97492791218182f</td>
773 </tr>
774 </table>
775</div><div class="memdoc">
776
777<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00128">128</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
778
779</div>
780</div>
781<a id="ad6991beebc37eaa9fec68f1a7ccf019f"></a>
782<h2 class="memtitle"><span class="permalink"><a href="#ad6991beebc37eaa9fec68f1a7ccf019f">&#9670;&nbsp;</a></span>W7_E</h2>
783
784<div class="memitem">
785<div class="memproto">
786 <table class="memname">
787 <tr>
788 <td class="memname">#define W7_E&#160;&#160;&#160;0.90096886790241f</td>
789 </tr>
790 </table>
791</div><div class="memdoc">
792
793<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00129">129</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
794
795</div>
796</div>
797<a id="a2c2804f21de28bb28c360d8d5b8ab98b"></a>
798<h2 class="memtitle"><span class="permalink"><a href="#a2c2804f21de28bb28c360d8d5b8ab98b">&#9670;&nbsp;</a></span>W7_F</h2>
799
800<div class="memitem">
801<div class="memproto">
802 <table class="memname">
803 <tr>
804 <td class="memname">#define W7_F&#160;&#160;&#160;0.43388373911755f</td>
805 </tr>
806 </table>
807</div><div class="memdoc">
808
809<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00130">130</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
810
811</div>
812</div>
813<h2 class="groupheader">Function Documentation</h2>
814<a id="a6d2d172d9e177ed439b6f6ddc0785b86"></a>
815<h2 class="memtitle"><span class="permalink"><a href="#a6d2d172d9e177ed439b6f6ddc0785b86">&#9670;&nbsp;</a></span>fft_radix_2_axis_0()</h2>
816
817<div class="memitem">
818<div class="memproto">
819 <table class="memname">
820 <tr>
821 <td class="memname">kernel void fft_radix_2_axis_0 </td>
822 <td>(</td>
823 <td class="paramtype">__global uchar *&#160;</td>
824 <td class="paramname"><em>input_ptr</em>, </td>
825 </tr>
826 <tr>
827 <td class="paramkey"></td>
828 <td></td>
829 <td class="paramtype">uint&#160;</td>
830 <td class="paramname"><em>input_stride_x</em>, </td>
831 </tr>
832 <tr>
833 <td class="paramkey"></td>
834 <td></td>
835 <td class="paramtype">uint&#160;</td>
836 <td class="paramname"><em>input_step_x</em>, </td>
837 </tr>
838 <tr>
839 <td class="paramkey"></td>
840 <td></td>
841 <td class="paramtype">uint&#160;</td>
842 <td class="paramname"><em>input_stride_y</em>, </td>
843 </tr>
844 <tr>
845 <td class="paramkey"></td>
846 <td></td>
847 <td class="paramtype">uint&#160;</td>
848 <td class="paramname"><em>input_step_y</em>, </td>
849 </tr>
850 <tr>
851 <td class="paramkey"></td>
852 <td></td>
853 <td class="paramtype">uint&#160;</td>
854 <td class="paramname"><em>input_stride_z</em>, </td>
855 </tr>
856 <tr>
857 <td class="paramkey"></td>
858 <td></td>
859 <td class="paramtype">uint&#160;</td>
860 <td class="paramname"><em>input_step_z</em>, </td>
861 </tr>
862 <tr>
863 <td class="paramkey"></td>
864 <td></td>
865 <td class="paramtype">uint&#160;</td>
866 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
867 </tr>
868 <tr>
869 <td class="paramkey"></td>
870 <td></td>
871 <td class="paramtype">__global uchar *&#160;</td>
872 <td class="paramname"><em>output_ptr</em>, </td>
873 </tr>
874 <tr>
875 <td class="paramkey"></td>
876 <td></td>
877 <td class="paramtype">uint&#160;</td>
878 <td class="paramname"><em>output_stride_x</em>, </td>
879 </tr>
880 <tr>
881 <td class="paramkey"></td>
882 <td></td>
883 <td class="paramtype">uint&#160;</td>
884 <td class="paramname"><em>output_step_x</em>, </td>
885 </tr>
886 <tr>
887 <td class="paramkey"></td>
888 <td></td>
889 <td class="paramtype">uint&#160;</td>
890 <td class="paramname"><em>output_stride_y</em>, </td>
891 </tr>
892 <tr>
893 <td class="paramkey"></td>
894 <td></td>
895 <td class="paramtype">uint&#160;</td>
896 <td class="paramname"><em>output_step_y</em>, </td>
897 </tr>
898 <tr>
899 <td class="paramkey"></td>
900 <td></td>
901 <td class="paramtype">uint&#160;</td>
902 <td class="paramname"><em>output_stride_z</em>, </td>
903 </tr>
904 <tr>
905 <td class="paramkey"></td>
906 <td></td>
907 <td class="paramtype">uint&#160;</td>
908 <td class="paramname"><em>output_step_z</em>, </td>
909 </tr>
910 <tr>
911 <td class="paramkey"></td>
912 <td></td>
913 <td class="paramtype">uint&#160;</td>
914 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
915 </tr>
916 <tr>
917 <td class="paramkey"></td>
918 <td></td>
919 <td class="paramtype">uint&#160;</td>
920 <td class="paramname"><em>Nx</em>, </td>
921 </tr>
922 <tr>
923 <td class="paramkey"></td>
924 <td></td>
925 <td class="paramtype">uint&#160;</td>
926 <td class="paramname"><em>Ni</em>, </td>
927 </tr>
928 <tr>
929 <td class="paramkey"></td>
930 <td></td>
931 <td class="paramtype">float&#160;</td>
932 <td class="paramname"><em>exp_const</em>&#160;</td>
933 </tr>
934 <tr>
935 <td></td>
936 <td>)</td>
937 <td></td><td></td>
938 </tr>
939 </table>
940</div><div class="memdoc">
941
942<p>Computes a stage of a radix-2 FFT on axis 0. </p>
943<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
944<dl class="params"><dt>Parameters</dt><dd>
945 <table class="params">
946 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
947 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
948 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
949 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
950 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
951 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
952 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
953 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
954 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
955 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
956 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
957 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
958 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
959 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
960 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
961 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
962 <tr><td class="paramdir">[in]</td><td class="paramname">Nx</td><td>The butterfly span. Products of radix order of previous radix's stage </td></tr>
963 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
964 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
965 </table>
966 </dd>
967</dl>
968
969<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00855">855</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +0000970<div class="fragment"><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160;{</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; <span class="comment">// Each work-item computes a single radix-2</span></div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; uint kx = get_global_id(0);</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="comment">// Compute nx</span></div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; uint nx = kx % Nx;</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160;</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="comment">// Compute n index</span></div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; uint n = nx + (kx / Nx) * Ni;</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160;</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr += n * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_x + get_global_id(1) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_y + get_global_id(2) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_z;</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(output);</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> += n * output.<a class="code" href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">stride_x</a> + get_global_id(1) * output.<a class="code" href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">stride_y</a> + get_global_id(2) * output.<a class="code" href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">stride_z</a>;</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160;</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <span class="comment">// Load two complex input values</span></div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; float2 c0 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; float2 c1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, Nx, 0, 0));</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160;</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="comment">// Compute phi</span></div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <span class="keywordtype">float</span> phi = (float)nx * exp_const;</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160;</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <span class="comment">// Multiply by twiddle factor</span></div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(phi, c1);</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160;</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <span class="comment">// Compute DFT N = 2</span></div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <a class="code" href="fft_8cl.xhtml#a5a63ca1d5404d67d13382a90cfc9b6c3">DFT_2</a>(c0, c1);</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <span class="comment">// Store two complex output values</span></div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; vstore2(c0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; vstore2(c1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, Nx, 0, 0));</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_ad4dcc4a8b94f263cd19c59fdc2cec3d2"><div class="ttname"><a href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a></div><div class="ttdeci">#define TWIDDLE_FACTOR_MULTIPLICATION(phi, input)</div><div class="ttdoc">Calculates and applies the twiddle factor to a given input.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00031">fft.cl:31</a></div></div>
971<div class="ttc" id="struct_tensor3_d_xhtml_ad5ff7a2b2bd0eec50fe09c254b127d1c"><div class="ttname"><a href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">Tensor3D::stride_z</a></div><div class="ttdeci">int stride_z</div><div class="ttdoc">Stride of the image in Z dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">helpers.h:364</a></div></div>
972<div class="ttc" id="struct_tensor3_d_xhtml_ae01febbfd0689ef709f3ff6fdd2abc7e"><div class="ttname"><a href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">Tensor3D::stride_x</a></div><div class="ttdeci">int stride_x</div><div class="ttdoc">Stride of the image in X dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">helpers.h:362</a></div></div>
973<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
974<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +0100975<div class="ttc" id="fft_8cl_xhtml_a5a63ca1d5404d67d13382a90cfc9b6c3"><div class="ttname"><a href="fft_8cl.xhtml#a5a63ca1d5404d67d13382a90cfc9b6c3">DFT_2</a></div><div class="ttdeci">#define DFT_2(c0, c1)</div><div class="ttdoc">Computes radix-2 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00046">fft.cl:46</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +0000976<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a79e8e562daa6599317d2d1cd86ef1bf2"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT_NO_STEP(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">helpers.h:330</a></div></div>
977<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
978<div class="ttc" id="struct_tensor3_d_xhtml_a4f0b90c9ecd6e57ceb3f37332fefe8f1"><div class="ttname"><a href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">Tensor3D::stride_y</a></div><div class="ttdeci">int stride_y</div><div class="ttdoc">Stride of the image in Y dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">helpers.h:363</a></div></div>
979<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +0100980</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +0000981<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00046">DFT_2</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +0100982
983</div>
984</div>
985<a id="ad4c7557777731327f741ef848e2b28c2"></a>
986<h2 class="memtitle"><span class="permalink"><a href="#ad4c7557777731327f741ef848e2b28c2">&#9670;&nbsp;</a></span>fft_radix_2_axis_1()</h2>
987
988<div class="memitem">
989<div class="memproto">
990 <table class="memname">
991 <tr>
992 <td class="memname">kernel void fft_radix_2_axis_1 </td>
993 <td>(</td>
994 <td class="paramtype">__global uchar *&#160;</td>
995 <td class="paramname"><em>input_ptr</em>, </td>
996 </tr>
997 <tr>
998 <td class="paramkey"></td>
999 <td></td>
1000 <td class="paramtype">uint&#160;</td>
1001 <td class="paramname"><em>input_stride_x</em>, </td>
1002 </tr>
1003 <tr>
1004 <td class="paramkey"></td>
1005 <td></td>
1006 <td class="paramtype">uint&#160;</td>
1007 <td class="paramname"><em>input_step_x</em>, </td>
1008 </tr>
1009 <tr>
1010 <td class="paramkey"></td>
1011 <td></td>
1012 <td class="paramtype">uint&#160;</td>
1013 <td class="paramname"><em>input_stride_y</em>, </td>
1014 </tr>
1015 <tr>
1016 <td class="paramkey"></td>
1017 <td></td>
1018 <td class="paramtype">uint&#160;</td>
1019 <td class="paramname"><em>input_step_y</em>, </td>
1020 </tr>
1021 <tr>
1022 <td class="paramkey"></td>
1023 <td></td>
1024 <td class="paramtype">uint&#160;</td>
1025 <td class="paramname"><em>input_stride_z</em>, </td>
1026 </tr>
1027 <tr>
1028 <td class="paramkey"></td>
1029 <td></td>
1030 <td class="paramtype">uint&#160;</td>
1031 <td class="paramname"><em>input_step_z</em>, </td>
1032 </tr>
1033 <tr>
1034 <td class="paramkey"></td>
1035 <td></td>
1036 <td class="paramtype">uint&#160;</td>
1037 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
1038 </tr>
1039 <tr>
1040 <td class="paramkey"></td>
1041 <td></td>
1042 <td class="paramtype">__global uchar *&#160;</td>
1043 <td class="paramname"><em>output_ptr</em>, </td>
1044 </tr>
1045 <tr>
1046 <td class="paramkey"></td>
1047 <td></td>
1048 <td class="paramtype">uint&#160;</td>
1049 <td class="paramname"><em>output_stride_x</em>, </td>
1050 </tr>
1051 <tr>
1052 <td class="paramkey"></td>
1053 <td></td>
1054 <td class="paramtype">uint&#160;</td>
1055 <td class="paramname"><em>output_step_x</em>, </td>
1056 </tr>
1057 <tr>
1058 <td class="paramkey"></td>
1059 <td></td>
1060 <td class="paramtype">uint&#160;</td>
1061 <td class="paramname"><em>output_stride_y</em>, </td>
1062 </tr>
1063 <tr>
1064 <td class="paramkey"></td>
1065 <td></td>
1066 <td class="paramtype">uint&#160;</td>
1067 <td class="paramname"><em>output_step_y</em>, </td>
1068 </tr>
1069 <tr>
1070 <td class="paramkey"></td>
1071 <td></td>
1072 <td class="paramtype">uint&#160;</td>
1073 <td class="paramname"><em>output_stride_z</em>, </td>
1074 </tr>
1075 <tr>
1076 <td class="paramkey"></td>
1077 <td></td>
1078 <td class="paramtype">uint&#160;</td>
1079 <td class="paramname"><em>output_step_z</em>, </td>
1080 </tr>
1081 <tr>
1082 <td class="paramkey"></td>
1083 <td></td>
1084 <td class="paramtype">uint&#160;</td>
1085 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
1086 </tr>
1087 <tr>
1088 <td class="paramkey"></td>
1089 <td></td>
1090 <td class="paramtype">uint&#160;</td>
1091 <td class="paramname"><em>Nx</em>, </td>
1092 </tr>
1093 <tr>
1094 <td class="paramkey"></td>
1095 <td></td>
1096 <td class="paramtype">uint&#160;</td>
1097 <td class="paramname"><em>Ni</em>, </td>
1098 </tr>
1099 <tr>
1100 <td class="paramkey"></td>
1101 <td></td>
1102 <td class="paramtype">float&#160;</td>
1103 <td class="paramname"><em>exp_const</em>&#160;</td>
1104 </tr>
1105 <tr>
1106 <td></td>
1107 <td>)</td>
1108 <td></td><td></td>
1109 </tr>
1110 </table>
1111</div><div class="memdoc">
1112
1113<p>Computes a stage of a radix-2 FFT on axis 1. </p>
1114<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
1115<dl class="params"><dt>Parameters</dt><dd>
1116 <table class="params">
1117 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
1118 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
1119 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
1120 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
1121 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
1122 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
1123 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
1124 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
1125 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
1126 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
1127 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
1128 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
1129 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
1130 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
1131 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
1132 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
1133 <tr><td class="paramdir">[in]</td><td class="paramname">Nx</td><td>The butterfly span. Products of radix order of previous radix's stage </td></tr>
1134 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
1135 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
1136 </table>
1137 </dd>
1138</dl>
1139
1140<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00925">925</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00001141<div class="fragment"><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160;{</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="comment">// Each work-item computes a single radix-2</span></div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; uint kx = get_global_id(1);</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160;</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="comment">// Compute nx</span></div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; uint nx = kx % Nx;</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160;</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; <span class="comment">// Compute n index</span></div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; uint n = nx + (kx / Nx) * Ni;</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160;</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr += get_global_id(0) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_x + n * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_y + get_global_id(2) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_z;</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(output);</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> += get_global_id(0) * output.<a class="code" href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">stride_x</a> + n * output.<a class="code" href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">stride_y</a> + get_global_id(2) * output.<a class="code" href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">stride_z</a>;</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160;</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <span class="comment">// Load two complex input values</span></div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; float2 c0 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; float2 c1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, Nx, 0));</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160;</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="comment">// Compute phi</span></div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keywordtype">float</span> phi = (float)nx * exp_const;</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160;</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="comment">// Multiply by twiddle factor</span></div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(phi, c1);</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160;</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; <span class="comment">// Compute DFT N = 2</span></div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; <a class="code" href="fft_8cl.xhtml#a5a63ca1d5404d67d13382a90cfc9b6c3">DFT_2</a>(c0, c1);</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160;</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="comment">// Store two complex output values</span></div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; vstore2(c0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; vstore2(c1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, Nx, 0));</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_ad4dcc4a8b94f263cd19c59fdc2cec3d2"><div class="ttname"><a href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a></div><div class="ttdeci">#define TWIDDLE_FACTOR_MULTIPLICATION(phi, input)</div><div class="ttdoc">Calculates and applies the twiddle factor to a given input.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00031">fft.cl:31</a></div></div>
1142<div class="ttc" id="struct_tensor3_d_xhtml_ad5ff7a2b2bd0eec50fe09c254b127d1c"><div class="ttname"><a href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">Tensor3D::stride_z</a></div><div class="ttdeci">int stride_z</div><div class="ttdoc">Stride of the image in Z dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">helpers.h:364</a></div></div>
1143<div class="ttc" id="struct_tensor3_d_xhtml_ae01febbfd0689ef709f3ff6fdd2abc7e"><div class="ttname"><a href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">Tensor3D::stride_x</a></div><div class="ttdeci">int stride_x</div><div class="ttdoc">Stride of the image in X dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">helpers.h:362</a></div></div>
1144<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
1145<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001146<div class="ttc" id="fft_8cl_xhtml_a5a63ca1d5404d67d13382a90cfc9b6c3"><div class="ttname"><a href="fft_8cl.xhtml#a5a63ca1d5404d67d13382a90cfc9b6c3">DFT_2</a></div><div class="ttdeci">#define DFT_2(c0, c1)</div><div class="ttdoc">Computes radix-2 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00046">fft.cl:46</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +00001147<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a79e8e562daa6599317d2d1cd86ef1bf2"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT_NO_STEP(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">helpers.h:330</a></div></div>
1148<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
1149<div class="ttc" id="struct_tensor3_d_xhtml_a4f0b90c9ecd6e57ceb3f37332fefe8f1"><div class="ttname"><a href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">Tensor3D::stride_y</a></div><div class="ttdeci">int stride_y</div><div class="ttdoc">Stride of the image in Y dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">helpers.h:363</a></div></div>
1150<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001151</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00001152<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00046">DFT_2</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01001153
1154</div>
1155</div>
1156<a id="aea16049f33aa1fa59ca48e7092238bf0"></a>
1157<h2 class="memtitle"><span class="permalink"><a href="#aea16049f33aa1fa59ca48e7092238bf0">&#9670;&nbsp;</a></span>fft_radix_2_first_stage_axis_0()</h2>
1158
1159<div class="memitem">
1160<div class="memproto">
1161 <table class="memname">
1162 <tr>
1163 <td class="memname">kernel void fft_radix_2_first_stage_axis_0 </td>
1164 <td>(</td>
1165 <td class="paramtype">__global uchar *&#160;</td>
1166 <td class="paramname"><em>input_ptr</em>, </td>
1167 </tr>
1168 <tr>
1169 <td class="paramkey"></td>
1170 <td></td>
1171 <td class="paramtype">uint&#160;</td>
1172 <td class="paramname"><em>input_stride_x</em>, </td>
1173 </tr>
1174 <tr>
1175 <td class="paramkey"></td>
1176 <td></td>
1177 <td class="paramtype">uint&#160;</td>
1178 <td class="paramname"><em>input_step_x</em>, </td>
1179 </tr>
1180 <tr>
1181 <td class="paramkey"></td>
1182 <td></td>
1183 <td class="paramtype">uint&#160;</td>
1184 <td class="paramname"><em>input_stride_y</em>, </td>
1185 </tr>
1186 <tr>
1187 <td class="paramkey"></td>
1188 <td></td>
1189 <td class="paramtype">uint&#160;</td>
1190 <td class="paramname"><em>input_step_y</em>, </td>
1191 </tr>
1192 <tr>
1193 <td class="paramkey"></td>
1194 <td></td>
1195 <td class="paramtype">uint&#160;</td>
1196 <td class="paramname"><em>input_stride_z</em>, </td>
1197 </tr>
1198 <tr>
1199 <td class="paramkey"></td>
1200 <td></td>
1201 <td class="paramtype">uint&#160;</td>
1202 <td class="paramname"><em>input_step_z</em>, </td>
1203 </tr>
1204 <tr>
1205 <td class="paramkey"></td>
1206 <td></td>
1207 <td class="paramtype">uint&#160;</td>
1208 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
1209 </tr>
1210 <tr>
1211 <td class="paramkey"></td>
1212 <td></td>
1213 <td class="paramtype">__global uchar *&#160;</td>
1214 <td class="paramname"><em>output_ptr</em>, </td>
1215 </tr>
1216 <tr>
1217 <td class="paramkey"></td>
1218 <td></td>
1219 <td class="paramtype">uint&#160;</td>
1220 <td class="paramname"><em>output_stride_x</em>, </td>
1221 </tr>
1222 <tr>
1223 <td class="paramkey"></td>
1224 <td></td>
1225 <td class="paramtype">uint&#160;</td>
1226 <td class="paramname"><em>output_step_x</em>, </td>
1227 </tr>
1228 <tr>
1229 <td class="paramkey"></td>
1230 <td></td>
1231 <td class="paramtype">uint&#160;</td>
1232 <td class="paramname"><em>output_stride_y</em>, </td>
1233 </tr>
1234 <tr>
1235 <td class="paramkey"></td>
1236 <td></td>
1237 <td class="paramtype">uint&#160;</td>
1238 <td class="paramname"><em>output_step_y</em>, </td>
1239 </tr>
1240 <tr>
1241 <td class="paramkey"></td>
1242 <td></td>
1243 <td class="paramtype">uint&#160;</td>
1244 <td class="paramname"><em>output_stride_z</em>, </td>
1245 </tr>
1246 <tr>
1247 <td class="paramkey"></td>
1248 <td></td>
1249 <td class="paramtype">uint&#160;</td>
1250 <td class="paramname"><em>output_step_z</em>, </td>
1251 </tr>
1252 <tr>
1253 <td class="paramkey"></td>
1254 <td></td>
1255 <td class="paramtype">uint&#160;</td>
1256 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
1257 </tr>
1258 <tr>
1259 <td></td>
1260 <td>)</td>
1261 <td></td><td></td>
1262 </tr>
1263 </table>
1264</div><div class="memdoc">
1265
1266<p>Computes the first stage of a radix-2 DFT on axis 0. </p>
1267<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
1268<dl class="params"><dt>Parameters</dt><dd>
1269 <table class="params">
1270 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
1271 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
1272 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
1273 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
1274 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
1275 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
1276 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
1277 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
1278 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
1279 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
1280 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
1281 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
1282 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
1283 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
1284 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
1285 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
1286 </table>
1287 </dd>
1288</dl>
1289
1290<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00234">234</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00001291<div class="fragment"><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;{</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(output);</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">// Load two complex input values</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; float4 data = vload4(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">// Compute DFT N = 2</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <a class="code" href="fft_8cl.xhtml#a5a63ca1d5404d67d13382a90cfc9b6c3">DFT_2</a>(data.s01, data.s23);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// Store two complex output values</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; vstore4(data, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;}</div><div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
1292<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001293<div class="ttc" id="fft_8cl_xhtml_a5a63ca1d5404d67d13382a90cfc9b6c3"><div class="ttname"><a href="fft_8cl.xhtml#a5a63ca1d5404d67d13382a90cfc9b6c3">DFT_2</a></div><div class="ttdeci">#define DFT_2(c0, c1)</div><div class="ttdoc">Computes radix-2 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00046">fft.cl:46</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +00001294<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a31c8c760f08fb1a331b16b7c204321dc"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">helpers.h:326</a></div></div>
1295<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001296</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00001297<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00046">DFT_2</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01001298
1299</div>
1300</div>
1301<a id="ae919967e7eb2349552a120bd0ab40eb2"></a>
1302<h2 class="memtitle"><span class="permalink"><a href="#ae919967e7eb2349552a120bd0ab40eb2">&#9670;&nbsp;</a></span>fft_radix_2_first_stage_axis_1()</h2>
1303
1304<div class="memitem">
1305<div class="memproto">
1306 <table class="memname">
1307 <tr>
1308 <td class="memname">kernel void fft_radix_2_first_stage_axis_1 </td>
1309 <td>(</td>
1310 <td class="paramtype">__global uchar *&#160;</td>
1311 <td class="paramname"><em>input_ptr</em>, </td>
1312 </tr>
1313 <tr>
1314 <td class="paramkey"></td>
1315 <td></td>
1316 <td class="paramtype">uint&#160;</td>
1317 <td class="paramname"><em>input_stride_x</em>, </td>
1318 </tr>
1319 <tr>
1320 <td class="paramkey"></td>
1321 <td></td>
1322 <td class="paramtype">uint&#160;</td>
1323 <td class="paramname"><em>input_step_x</em>, </td>
1324 </tr>
1325 <tr>
1326 <td class="paramkey"></td>
1327 <td></td>
1328 <td class="paramtype">uint&#160;</td>
1329 <td class="paramname"><em>input_stride_y</em>, </td>
1330 </tr>
1331 <tr>
1332 <td class="paramkey"></td>
1333 <td></td>
1334 <td class="paramtype">uint&#160;</td>
1335 <td class="paramname"><em>input_step_y</em>, </td>
1336 </tr>
1337 <tr>
1338 <td class="paramkey"></td>
1339 <td></td>
1340 <td class="paramtype">uint&#160;</td>
1341 <td class="paramname"><em>input_stride_z</em>, </td>
1342 </tr>
1343 <tr>
1344 <td class="paramkey"></td>
1345 <td></td>
1346 <td class="paramtype">uint&#160;</td>
1347 <td class="paramname"><em>input_step_z</em>, </td>
1348 </tr>
1349 <tr>
1350 <td class="paramkey"></td>
1351 <td></td>
1352 <td class="paramtype">uint&#160;</td>
1353 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
1354 </tr>
1355 <tr>
1356 <td class="paramkey"></td>
1357 <td></td>
1358 <td class="paramtype">__global uchar *&#160;</td>
1359 <td class="paramname"><em>output_ptr</em>, </td>
1360 </tr>
1361 <tr>
1362 <td class="paramkey"></td>
1363 <td></td>
1364 <td class="paramtype">uint&#160;</td>
1365 <td class="paramname"><em>output_stride_x</em>, </td>
1366 </tr>
1367 <tr>
1368 <td class="paramkey"></td>
1369 <td></td>
1370 <td class="paramtype">uint&#160;</td>
1371 <td class="paramname"><em>output_step_x</em>, </td>
1372 </tr>
1373 <tr>
1374 <td class="paramkey"></td>
1375 <td></td>
1376 <td class="paramtype">uint&#160;</td>
1377 <td class="paramname"><em>output_stride_y</em>, </td>
1378 </tr>
1379 <tr>
1380 <td class="paramkey"></td>
1381 <td></td>
1382 <td class="paramtype">uint&#160;</td>
1383 <td class="paramname"><em>output_step_y</em>, </td>
1384 </tr>
1385 <tr>
1386 <td class="paramkey"></td>
1387 <td></td>
1388 <td class="paramtype">uint&#160;</td>
1389 <td class="paramname"><em>output_stride_z</em>, </td>
1390 </tr>
1391 <tr>
1392 <td class="paramkey"></td>
1393 <td></td>
1394 <td class="paramtype">uint&#160;</td>
1395 <td class="paramname"><em>output_step_z</em>, </td>
1396 </tr>
1397 <tr>
1398 <td class="paramkey"></td>
1399 <td></td>
1400 <td class="paramtype">uint&#160;</td>
1401 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
1402 </tr>
1403 <tr>
1404 <td></td>
1405 <td>)</td>
1406 <td></td><td></td>
1407 </tr>
1408 </table>
1409</div><div class="memdoc">
1410
1411<p>Computes the first stage of a radix-2 DFT on axis 1. </p>
1412<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
1413<dl class="params"><dt>Parameters</dt><dd>
1414 <table class="params">
1415 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
1416 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
1417 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
1418 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
1419 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
1420 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
1421 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
1422 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
1423 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
1424 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
1425 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
1426 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
1427 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
1428 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
1429 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
1430 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
1431 </table>
1432 </dd>
1433</dl>
1434
1435<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00281">281</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00001436<div class="fragment"><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;{</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(output);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="comment">// Load two complex input values</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; float2 data1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; float2 data2 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 1, 0));</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// Compute DFT N = 2</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <a class="code" href="fft_8cl.xhtml#a5a63ca1d5404d67d13382a90cfc9b6c3">DFT_2</a>(data1, data2);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="comment">// Store two complex output values</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; vstore2(data1, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; vstore2(data2, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 1, 0));</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;}</div><div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
1437<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001438<div class="ttc" id="fft_8cl_xhtml_a5a63ca1d5404d67d13382a90cfc9b6c3"><div class="ttname"><a href="fft_8cl.xhtml#a5a63ca1d5404d67d13382a90cfc9b6c3">DFT_2</a></div><div class="ttdeci">#define DFT_2(c0, c1)</div><div class="ttdoc">Computes radix-2 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00046">fft.cl:46</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +00001439<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a31c8c760f08fb1a331b16b7c204321dc"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">helpers.h:326</a></div></div>
1440<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
1441<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001442</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00001443<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00046">DFT_2</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01001444
1445</div>
1446</div>
1447<a id="af5d6a654bacf45355b1dcaacc6441691"></a>
1448<h2 class="memtitle"><span class="permalink"><a href="#af5d6a654bacf45355b1dcaacc6441691">&#9670;&nbsp;</a></span>fft_radix_3_axis_0()</h2>
1449
1450<div class="memitem">
1451<div class="memproto">
1452 <table class="memname">
1453 <tr>
1454 <td class="memname">kernel void fft_radix_3_axis_0 </td>
1455 <td>(</td>
1456 <td class="paramtype">__global uchar *&#160;</td>
1457 <td class="paramname"><em>input_ptr</em>, </td>
1458 </tr>
1459 <tr>
1460 <td class="paramkey"></td>
1461 <td></td>
1462 <td class="paramtype">uint&#160;</td>
1463 <td class="paramname"><em>input_stride_x</em>, </td>
1464 </tr>
1465 <tr>
1466 <td class="paramkey"></td>
1467 <td></td>
1468 <td class="paramtype">uint&#160;</td>
1469 <td class="paramname"><em>input_step_x</em>, </td>
1470 </tr>
1471 <tr>
1472 <td class="paramkey"></td>
1473 <td></td>
1474 <td class="paramtype">uint&#160;</td>
1475 <td class="paramname"><em>input_stride_y</em>, </td>
1476 </tr>
1477 <tr>
1478 <td class="paramkey"></td>
1479 <td></td>
1480 <td class="paramtype">uint&#160;</td>
1481 <td class="paramname"><em>input_step_y</em>, </td>
1482 </tr>
1483 <tr>
1484 <td class="paramkey"></td>
1485 <td></td>
1486 <td class="paramtype">uint&#160;</td>
1487 <td class="paramname"><em>input_stride_z</em>, </td>
1488 </tr>
1489 <tr>
1490 <td class="paramkey"></td>
1491 <td></td>
1492 <td class="paramtype">uint&#160;</td>
1493 <td class="paramname"><em>input_step_z</em>, </td>
1494 </tr>
1495 <tr>
1496 <td class="paramkey"></td>
1497 <td></td>
1498 <td class="paramtype">uint&#160;</td>
1499 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
1500 </tr>
1501 <tr>
1502 <td class="paramkey"></td>
1503 <td></td>
1504 <td class="paramtype">__global uchar *&#160;</td>
1505 <td class="paramname"><em>output_ptr</em>, </td>
1506 </tr>
1507 <tr>
1508 <td class="paramkey"></td>
1509 <td></td>
1510 <td class="paramtype">uint&#160;</td>
1511 <td class="paramname"><em>output_stride_x</em>, </td>
1512 </tr>
1513 <tr>
1514 <td class="paramkey"></td>
1515 <td></td>
1516 <td class="paramtype">uint&#160;</td>
1517 <td class="paramname"><em>output_step_x</em>, </td>
1518 </tr>
1519 <tr>
1520 <td class="paramkey"></td>
1521 <td></td>
1522 <td class="paramtype">uint&#160;</td>
1523 <td class="paramname"><em>output_stride_y</em>, </td>
1524 </tr>
1525 <tr>
1526 <td class="paramkey"></td>
1527 <td></td>
1528 <td class="paramtype">uint&#160;</td>
1529 <td class="paramname"><em>output_step_y</em>, </td>
1530 </tr>
1531 <tr>
1532 <td class="paramkey"></td>
1533 <td></td>
1534 <td class="paramtype">uint&#160;</td>
1535 <td class="paramname"><em>output_stride_z</em>, </td>
1536 </tr>
1537 <tr>
1538 <td class="paramkey"></td>
1539 <td></td>
1540 <td class="paramtype">uint&#160;</td>
1541 <td class="paramname"><em>output_step_z</em>, </td>
1542 </tr>
1543 <tr>
1544 <td class="paramkey"></td>
1545 <td></td>
1546 <td class="paramtype">uint&#160;</td>
1547 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
1548 </tr>
1549 <tr>
1550 <td class="paramkey"></td>
1551 <td></td>
1552 <td class="paramtype">uint&#160;</td>
1553 <td class="paramname"><em>Nx</em>, </td>
1554 </tr>
1555 <tr>
1556 <td class="paramkey"></td>
1557 <td></td>
1558 <td class="paramtype">uint&#160;</td>
1559 <td class="paramname"><em>Ni</em>, </td>
1560 </tr>
1561 <tr>
1562 <td class="paramkey"></td>
1563 <td></td>
1564 <td class="paramtype">float&#160;</td>
1565 <td class="paramname"><em>exp_const</em>&#160;</td>
1566 </tr>
1567 <tr>
1568 <td></td>
1569 <td>)</td>
1570 <td></td><td></td>
1571 </tr>
1572 </table>
1573</div><div class="memdoc">
1574
1575<p>Computes a stage of a radix-3 FFT on axis 0. </p>
1576<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
1577<dl class="params"><dt>Parameters</dt><dd>
1578 <table class="params">
1579 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
1580 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
1581 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
1582 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
1583 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
1584 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
1585 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
1586 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
1587 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
1588 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
1589 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
1590 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
1591 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
1592 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
1593 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
1594 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
1595 <tr><td class="paramdir">[in]</td><td class="paramname">Nx</td><td>The butterfly span. Products of radix order of previous radix's stage </td></tr>
1596 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
1597 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
1598 </table>
1599 </dd>
1600</dl>
1601
1602<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00995">995</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00001603<div class="fragment"><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;{</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <span class="comment">// Each work-item computes a single radix-3</span></div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; uint kx = get_global_id(0);</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <span class="comment">// Compute nx</span></div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; uint nx = kx % Nx;</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="comment">// Compute n index</span></div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; uint n = nx + (kx / Nx) * Ni;</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr += n * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_x + get_global_id(1) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_y + get_global_id(2) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_z;</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(output);</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> += n * output.<a class="code" href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">stride_x</a> + get_global_id(1) * output.<a class="code" href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">stride_y</a> + get_global_id(2) * output.<a class="code" href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">stride_z</a>;</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="comment">// Load three complex input values</span></div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; float2 c0 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; float2 c1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, Nx, 0, 0));</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; float2 c2 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 2 * Nx, 0, 0));</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="comment">// Compute phi</span></div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keywordtype">float</span> phi = (float)nx * exp_const;</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="comment">// Multiply by twiddle factor</span></div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(phi, c1);</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(2 * phi, c2);</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="comment">// Compute DFT N = 3</span></div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <a class="code" href="fft_8cl.xhtml#ac6ec77d2e41d56919c14c1483eee94ac">DFT_3</a>(c0, c1, c2);</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <span class="comment">// Store three complex output values</span></div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; vstore2(c0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; vstore2(c1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, Nx, 0, 0));</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; vstore2(c2, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 2 * Nx, 0, 0));</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_ad4dcc4a8b94f263cd19c59fdc2cec3d2"><div class="ttname"><a href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a></div><div class="ttdeci">#define TWIDDLE_FACTOR_MULTIPLICATION(phi, input)</div><div class="ttdoc">Calculates and applies the twiddle factor to a given input.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00031">fft.cl:31</a></div></div>
1604<div class="ttc" id="struct_tensor3_d_xhtml_ad5ff7a2b2bd0eec50fe09c254b127d1c"><div class="ttname"><a href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">Tensor3D::stride_z</a></div><div class="ttdeci">int stride_z</div><div class="ttdoc">Stride of the image in Z dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">helpers.h:364</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001605<div class="ttc" id="fft_8cl_xhtml_ac6ec77d2e41d56919c14c1483eee94ac"><div class="ttname"><a href="fft_8cl.xhtml#ac6ec77d2e41d56919c14c1483eee94ac">DFT_3</a></div><div class="ttdeci">#define DFT_3(c0, c1, c2)</div><div class="ttdoc">Computes radix-3 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00063">fft.cl:63</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +00001606<div class="ttc" id="struct_tensor3_d_xhtml_ae01febbfd0689ef709f3ff6fdd2abc7e"><div class="ttname"><a href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">Tensor3D::stride_x</a></div><div class="ttdeci">int stride_x</div><div class="ttdoc">Stride of the image in X dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">helpers.h:362</a></div></div>
1607<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
1608<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
1609<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a79e8e562daa6599317d2d1cd86ef1bf2"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT_NO_STEP(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">helpers.h:330</a></div></div>
1610<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
1611<div class="ttc" id="struct_tensor3_d_xhtml_a4f0b90c9ecd6e57ceb3f37332fefe8f1"><div class="ttname"><a href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">Tensor3D::stride_y</a></div><div class="ttdeci">int stride_y</div><div class="ttdoc">Stride of the image in Y dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">helpers.h:363</a></div></div>
1612<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001613</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00001614<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00063">DFT_3</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01001615
1616</div>
1617</div>
1618<a id="a6c378af2ec36adec6dd88b961151a057"></a>
1619<h2 class="memtitle"><span class="permalink"><a href="#a6c378af2ec36adec6dd88b961151a057">&#9670;&nbsp;</a></span>fft_radix_3_axis_1()</h2>
1620
1621<div class="memitem">
1622<div class="memproto">
1623 <table class="memname">
1624 <tr>
1625 <td class="memname">kernel void fft_radix_3_axis_1 </td>
1626 <td>(</td>
1627 <td class="paramtype">__global uchar *&#160;</td>
1628 <td class="paramname"><em>input_ptr</em>, </td>
1629 </tr>
1630 <tr>
1631 <td class="paramkey"></td>
1632 <td></td>
1633 <td class="paramtype">uint&#160;</td>
1634 <td class="paramname"><em>input_stride_x</em>, </td>
1635 </tr>
1636 <tr>
1637 <td class="paramkey"></td>
1638 <td></td>
1639 <td class="paramtype">uint&#160;</td>
1640 <td class="paramname"><em>input_step_x</em>, </td>
1641 </tr>
1642 <tr>
1643 <td class="paramkey"></td>
1644 <td></td>
1645 <td class="paramtype">uint&#160;</td>
1646 <td class="paramname"><em>input_stride_y</em>, </td>
1647 </tr>
1648 <tr>
1649 <td class="paramkey"></td>
1650 <td></td>
1651 <td class="paramtype">uint&#160;</td>
1652 <td class="paramname"><em>input_step_y</em>, </td>
1653 </tr>
1654 <tr>
1655 <td class="paramkey"></td>
1656 <td></td>
1657 <td class="paramtype">uint&#160;</td>
1658 <td class="paramname"><em>input_stride_z</em>, </td>
1659 </tr>
1660 <tr>
1661 <td class="paramkey"></td>
1662 <td></td>
1663 <td class="paramtype">uint&#160;</td>
1664 <td class="paramname"><em>input_step_z</em>, </td>
1665 </tr>
1666 <tr>
1667 <td class="paramkey"></td>
1668 <td></td>
1669 <td class="paramtype">uint&#160;</td>
1670 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
1671 </tr>
1672 <tr>
1673 <td class="paramkey"></td>
1674 <td></td>
1675 <td class="paramtype">__global uchar *&#160;</td>
1676 <td class="paramname"><em>output_ptr</em>, </td>
1677 </tr>
1678 <tr>
1679 <td class="paramkey"></td>
1680 <td></td>
1681 <td class="paramtype">uint&#160;</td>
1682 <td class="paramname"><em>output_stride_x</em>, </td>
1683 </tr>
1684 <tr>
1685 <td class="paramkey"></td>
1686 <td></td>
1687 <td class="paramtype">uint&#160;</td>
1688 <td class="paramname"><em>output_step_x</em>, </td>
1689 </tr>
1690 <tr>
1691 <td class="paramkey"></td>
1692 <td></td>
1693 <td class="paramtype">uint&#160;</td>
1694 <td class="paramname"><em>output_stride_y</em>, </td>
1695 </tr>
1696 <tr>
1697 <td class="paramkey"></td>
1698 <td></td>
1699 <td class="paramtype">uint&#160;</td>
1700 <td class="paramname"><em>output_step_y</em>, </td>
1701 </tr>
1702 <tr>
1703 <td class="paramkey"></td>
1704 <td></td>
1705 <td class="paramtype">uint&#160;</td>
1706 <td class="paramname"><em>output_stride_z</em>, </td>
1707 </tr>
1708 <tr>
1709 <td class="paramkey"></td>
1710 <td></td>
1711 <td class="paramtype">uint&#160;</td>
1712 <td class="paramname"><em>output_step_z</em>, </td>
1713 </tr>
1714 <tr>
1715 <td class="paramkey"></td>
1716 <td></td>
1717 <td class="paramtype">uint&#160;</td>
1718 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
1719 </tr>
1720 <tr>
1721 <td class="paramkey"></td>
1722 <td></td>
1723 <td class="paramtype">uint&#160;</td>
1724 <td class="paramname"><em>Nx</em>, </td>
1725 </tr>
1726 <tr>
1727 <td class="paramkey"></td>
1728 <td></td>
1729 <td class="paramtype">uint&#160;</td>
1730 <td class="paramname"><em>Ni</em>, </td>
1731 </tr>
1732 <tr>
1733 <td class="paramkey"></td>
1734 <td></td>
1735 <td class="paramtype">float&#160;</td>
1736 <td class="paramname"><em>exp_const</em>&#160;</td>
1737 </tr>
1738 <tr>
1739 <td></td>
1740 <td>)</td>
1741 <td></td><td></td>
1742 </tr>
1743 </table>
1744</div><div class="memdoc">
1745
1746<p>Computes a stage of a radix-3 FFT on axis 1. </p>
1747<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
1748<dl class="params"><dt>Parameters</dt><dd>
1749 <table class="params">
1750 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
1751 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
1752 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
1753 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
1754 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
1755 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
1756 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
1757 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
1758 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
1759 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
1760 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
1761 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
1762 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
1763 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
1764 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
1765 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
1766 <tr><td class="paramdir">[in]</td><td class="paramname">Nx</td><td>The butterfly span. Products of radix order of previous radix's stage </td></tr>
1767 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
1768 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
1769 </table>
1770 </dd>
1771</dl>
1772
1773<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l01068">1068</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00001774<div class="fragment"><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;{</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <span class="comment">// Each work-item computes a single radix-3</span></div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; uint kx = get_global_id(1);</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <span class="comment">// Compute nx</span></div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; uint nx = kx % Nx;</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="comment">// Compute n index</span></div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; uint n = nx + (kx / Nx) * Ni;</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr += get_global_id(0) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_x + n * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_y + get_global_id(2) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_z;</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(output);</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> += get_global_id(0) * output.<a class="code" href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">stride_x</a> + n * output.<a class="code" href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">stride_y</a> + get_global_id(2) * output.<a class="code" href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">stride_z</a>;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; <span class="comment">// Load three complex input values</span></div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; float2 c0 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; float2 c1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, Nx, 0));</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; float2 c2 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 2 * Nx, 0));</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <span class="comment">// Compute phi</span></div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="keywordtype">float</span> phi = (float)nx * exp_const;</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="comment">// Multiply by twiddle factor</span></div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(phi, c1);</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(2 * phi, c2);</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; <span class="comment">// Compute DFT N = 3</span></div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <a class="code" href="fft_8cl.xhtml#ac6ec77d2e41d56919c14c1483eee94ac">DFT_3</a>(c0, c1, c2);</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="comment">// Store three complex output values</span></div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; vstore2(c0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; vstore2(c1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, Nx, 0));</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; vstore2(c2, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 2 * Nx, 0));</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_ad4dcc4a8b94f263cd19c59fdc2cec3d2"><div class="ttname"><a href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a></div><div class="ttdeci">#define TWIDDLE_FACTOR_MULTIPLICATION(phi, input)</div><div class="ttdoc">Calculates and applies the twiddle factor to a given input.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00031">fft.cl:31</a></div></div>
1775<div class="ttc" id="struct_tensor3_d_xhtml_ad5ff7a2b2bd0eec50fe09c254b127d1c"><div class="ttname"><a href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">Tensor3D::stride_z</a></div><div class="ttdeci">int stride_z</div><div class="ttdoc">Stride of the image in Z dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">helpers.h:364</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001776<div class="ttc" id="fft_8cl_xhtml_ac6ec77d2e41d56919c14c1483eee94ac"><div class="ttname"><a href="fft_8cl.xhtml#ac6ec77d2e41d56919c14c1483eee94ac">DFT_3</a></div><div class="ttdeci">#define DFT_3(c0, c1, c2)</div><div class="ttdoc">Computes radix-3 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00063">fft.cl:63</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +00001777<div class="ttc" id="struct_tensor3_d_xhtml_ae01febbfd0689ef709f3ff6fdd2abc7e"><div class="ttname"><a href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">Tensor3D::stride_x</a></div><div class="ttdeci">int stride_x</div><div class="ttdoc">Stride of the image in X dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">helpers.h:362</a></div></div>
1778<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
1779<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
1780<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a79e8e562daa6599317d2d1cd86ef1bf2"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT_NO_STEP(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">helpers.h:330</a></div></div>
1781<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
1782<div class="ttc" id="struct_tensor3_d_xhtml_a4f0b90c9ecd6e57ceb3f37332fefe8f1"><div class="ttname"><a href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">Tensor3D::stride_y</a></div><div class="ttdeci">int stride_y</div><div class="ttdoc">Stride of the image in Y dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">helpers.h:363</a></div></div>
1783<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001784</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00001785<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00063">DFT_3</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01001786
1787</div>
1788</div>
1789<a id="a3a40d552a9d4c240e46db020bd606a2b"></a>
1790<h2 class="memtitle"><span class="permalink"><a href="#a3a40d552a9d4c240e46db020bd606a2b">&#9670;&nbsp;</a></span>fft_radix_3_first_stage_axis_0()</h2>
1791
1792<div class="memitem">
1793<div class="memproto">
1794 <table class="memname">
1795 <tr>
1796 <td class="memname">kernel void fft_radix_3_first_stage_axis_0 </td>
1797 <td>(</td>
1798 <td class="paramtype">__global uchar *&#160;</td>
1799 <td class="paramname"><em>input_ptr</em>, </td>
1800 </tr>
1801 <tr>
1802 <td class="paramkey"></td>
1803 <td></td>
1804 <td class="paramtype">uint&#160;</td>
1805 <td class="paramname"><em>input_stride_x</em>, </td>
1806 </tr>
1807 <tr>
1808 <td class="paramkey"></td>
1809 <td></td>
1810 <td class="paramtype">uint&#160;</td>
1811 <td class="paramname"><em>input_step_x</em>, </td>
1812 </tr>
1813 <tr>
1814 <td class="paramkey"></td>
1815 <td></td>
1816 <td class="paramtype">uint&#160;</td>
1817 <td class="paramname"><em>input_stride_y</em>, </td>
1818 </tr>
1819 <tr>
1820 <td class="paramkey"></td>
1821 <td></td>
1822 <td class="paramtype">uint&#160;</td>
1823 <td class="paramname"><em>input_step_y</em>, </td>
1824 </tr>
1825 <tr>
1826 <td class="paramkey"></td>
1827 <td></td>
1828 <td class="paramtype">uint&#160;</td>
1829 <td class="paramname"><em>input_stride_z</em>, </td>
1830 </tr>
1831 <tr>
1832 <td class="paramkey"></td>
1833 <td></td>
1834 <td class="paramtype">uint&#160;</td>
1835 <td class="paramname"><em>input_step_z</em>, </td>
1836 </tr>
1837 <tr>
1838 <td class="paramkey"></td>
1839 <td></td>
1840 <td class="paramtype">uint&#160;</td>
1841 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
1842 </tr>
1843 <tr>
1844 <td class="paramkey"></td>
1845 <td></td>
1846 <td class="paramtype">__global uchar *&#160;</td>
1847 <td class="paramname"><em>output_ptr</em>, </td>
1848 </tr>
1849 <tr>
1850 <td class="paramkey"></td>
1851 <td></td>
1852 <td class="paramtype">uint&#160;</td>
1853 <td class="paramname"><em>output_stride_x</em>, </td>
1854 </tr>
1855 <tr>
1856 <td class="paramkey"></td>
1857 <td></td>
1858 <td class="paramtype">uint&#160;</td>
1859 <td class="paramname"><em>output_step_x</em>, </td>
1860 </tr>
1861 <tr>
1862 <td class="paramkey"></td>
1863 <td></td>
1864 <td class="paramtype">uint&#160;</td>
1865 <td class="paramname"><em>output_stride_y</em>, </td>
1866 </tr>
1867 <tr>
1868 <td class="paramkey"></td>
1869 <td></td>
1870 <td class="paramtype">uint&#160;</td>
1871 <td class="paramname"><em>output_step_y</em>, </td>
1872 </tr>
1873 <tr>
1874 <td class="paramkey"></td>
1875 <td></td>
1876 <td class="paramtype">uint&#160;</td>
1877 <td class="paramname"><em>output_stride_z</em>, </td>
1878 </tr>
1879 <tr>
1880 <td class="paramkey"></td>
1881 <td></td>
1882 <td class="paramtype">uint&#160;</td>
1883 <td class="paramname"><em>output_step_z</em>, </td>
1884 </tr>
1885 <tr>
1886 <td class="paramkey"></td>
1887 <td></td>
1888 <td class="paramtype">uint&#160;</td>
1889 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
1890 </tr>
1891 <tr>
1892 <td></td>
1893 <td>)</td>
1894 <td></td><td></td>
1895 </tr>
1896 </table>
1897</div><div class="memdoc">
1898
1899<p>Computes the first stage of a radix-3 DFT on axis 0. </p>
1900<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
1901<dl class="params"><dt>Parameters</dt><dd>
1902 <table class="params">
1903 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
1904 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
1905 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
1906 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
1907 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
1908 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
1909 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
1910 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
1911 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
1912 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
1913 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
1914 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
1915 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
1916 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
1917 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
1918 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
1919 </table>
1920 </dd>
1921</dl>
1922
1923<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00330">330</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00001924<div class="fragment"><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;{</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(output);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="comment">// Load three complex input values</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; float4 data0 = vload4(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; float2 data1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 2, 0, 0));</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="comment">// Compute DFT N = 3</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <a class="code" href="fft_8cl.xhtml#ac6ec77d2e41d56919c14c1483eee94ac">DFT_3</a>(data0.s01, data0.s23, data1.s01);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="comment">// Store three complex output values</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; vstore4(data0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; vstore2(data1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 2, 0, 0));</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_ac6ec77d2e41d56919c14c1483eee94ac"><div class="ttname"><a href="fft_8cl.xhtml#ac6ec77d2e41d56919c14c1483eee94ac">DFT_3</a></div><div class="ttdeci">#define DFT_3(c0, c1, c2)</div><div class="ttdoc">Computes radix-3 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00063">fft.cl:63</a></div></div>
1925<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
1926<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
1927<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a31c8c760f08fb1a331b16b7c204321dc"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">helpers.h:326</a></div></div>
1928<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
1929<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001930</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00001931<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00063">DFT_3</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01001932
1933</div>
1934</div>
1935<a id="a45a776393b0fabafec290645e3d67010"></a>
1936<h2 class="memtitle"><span class="permalink"><a href="#a45a776393b0fabafec290645e3d67010">&#9670;&nbsp;</a></span>fft_radix_3_first_stage_axis_1()</h2>
1937
1938<div class="memitem">
1939<div class="memproto">
1940 <table class="memname">
1941 <tr>
1942 <td class="memname">kernel void fft_radix_3_first_stage_axis_1 </td>
1943 <td>(</td>
1944 <td class="paramtype">__global uchar *&#160;</td>
1945 <td class="paramname"><em>input_ptr</em>, </td>
1946 </tr>
1947 <tr>
1948 <td class="paramkey"></td>
1949 <td></td>
1950 <td class="paramtype">uint&#160;</td>
1951 <td class="paramname"><em>input_stride_x</em>, </td>
1952 </tr>
1953 <tr>
1954 <td class="paramkey"></td>
1955 <td></td>
1956 <td class="paramtype">uint&#160;</td>
1957 <td class="paramname"><em>input_step_x</em>, </td>
1958 </tr>
1959 <tr>
1960 <td class="paramkey"></td>
1961 <td></td>
1962 <td class="paramtype">uint&#160;</td>
1963 <td class="paramname"><em>input_stride_y</em>, </td>
1964 </tr>
1965 <tr>
1966 <td class="paramkey"></td>
1967 <td></td>
1968 <td class="paramtype">uint&#160;</td>
1969 <td class="paramname"><em>input_step_y</em>, </td>
1970 </tr>
1971 <tr>
1972 <td class="paramkey"></td>
1973 <td></td>
1974 <td class="paramtype">uint&#160;</td>
1975 <td class="paramname"><em>input_stride_z</em>, </td>
1976 </tr>
1977 <tr>
1978 <td class="paramkey"></td>
1979 <td></td>
1980 <td class="paramtype">uint&#160;</td>
1981 <td class="paramname"><em>input_step_z</em>, </td>
1982 </tr>
1983 <tr>
1984 <td class="paramkey"></td>
1985 <td></td>
1986 <td class="paramtype">uint&#160;</td>
1987 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
1988 </tr>
1989 <tr>
1990 <td class="paramkey"></td>
1991 <td></td>
1992 <td class="paramtype">__global uchar *&#160;</td>
1993 <td class="paramname"><em>output_ptr</em>, </td>
1994 </tr>
1995 <tr>
1996 <td class="paramkey"></td>
1997 <td></td>
1998 <td class="paramtype">uint&#160;</td>
1999 <td class="paramname"><em>output_stride_x</em>, </td>
2000 </tr>
2001 <tr>
2002 <td class="paramkey"></td>
2003 <td></td>
2004 <td class="paramtype">uint&#160;</td>
2005 <td class="paramname"><em>output_step_x</em>, </td>
2006 </tr>
2007 <tr>
2008 <td class="paramkey"></td>
2009 <td></td>
2010 <td class="paramtype">uint&#160;</td>
2011 <td class="paramname"><em>output_stride_y</em>, </td>
2012 </tr>
2013 <tr>
2014 <td class="paramkey"></td>
2015 <td></td>
2016 <td class="paramtype">uint&#160;</td>
2017 <td class="paramname"><em>output_step_y</em>, </td>
2018 </tr>
2019 <tr>
2020 <td class="paramkey"></td>
2021 <td></td>
2022 <td class="paramtype">uint&#160;</td>
2023 <td class="paramname"><em>output_stride_z</em>, </td>
2024 </tr>
2025 <tr>
2026 <td class="paramkey"></td>
2027 <td></td>
2028 <td class="paramtype">uint&#160;</td>
2029 <td class="paramname"><em>output_step_z</em>, </td>
2030 </tr>
2031 <tr>
2032 <td class="paramkey"></td>
2033 <td></td>
2034 <td class="paramtype">uint&#160;</td>
2035 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
2036 </tr>
2037 <tr>
2038 <td></td>
2039 <td>)</td>
2040 <td></td><td></td>
2041 </tr>
2042 </table>
2043</div><div class="memdoc">
2044
2045<p>Computes the first stage of a radix-3 DFT on axis 1. </p>
2046<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
2047<dl class="params"><dt>Parameters</dt><dd>
2048 <table class="params">
2049 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
2050 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
2051 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
2052 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
2053 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
2054 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
2055 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
2056 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
2057 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
2058 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
2059 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
2060 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
2061 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
2062 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
2063 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
2064 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
2065 </table>
2066 </dd>
2067</dl>
2068
2069<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00379">379</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00002070<div class="fragment"><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;{</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(output);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="comment">// Load three complex input values</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; float2 data0 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; float2 data1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 1, 0));</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; float2 data2 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 2, 0));</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="comment">// Compute DFT N = 3</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <a class="code" href="fft_8cl.xhtml#ac6ec77d2e41d56919c14c1483eee94ac">DFT_3</a>(data0, data1, data2);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="comment">// Store three complex output values</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; vstore2(data0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; vstore2(data1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 1, 0));</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; vstore2(data2, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 2, 0));</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_ac6ec77d2e41d56919c14c1483eee94ac"><div class="ttname"><a href="fft_8cl.xhtml#ac6ec77d2e41d56919c14c1483eee94ac">DFT_3</a></div><div class="ttdeci">#define DFT_3(c0, c1, c2)</div><div class="ttdoc">Computes radix-3 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00063">fft.cl:63</a></div></div>
2071<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
2072<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
2073<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a31c8c760f08fb1a331b16b7c204321dc"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">helpers.h:326</a></div></div>
2074<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
2075<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002076</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00002077<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00063">DFT_3</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01002078
2079</div>
2080</div>
2081<a id="a2f47b83634d50eb65c421bb579c7f056"></a>
2082<h2 class="memtitle"><span class="permalink"><a href="#a2f47b83634d50eb65c421bb579c7f056">&#9670;&nbsp;</a></span>fft_radix_4_axis_0()</h2>
2083
2084<div class="memitem">
2085<div class="memproto">
2086 <table class="memname">
2087 <tr>
2088 <td class="memname">kernel void fft_radix_4_axis_0 </td>
2089 <td>(</td>
2090 <td class="paramtype">__global uchar *&#160;</td>
2091 <td class="paramname"><em>input_ptr</em>, </td>
2092 </tr>
2093 <tr>
2094 <td class="paramkey"></td>
2095 <td></td>
2096 <td class="paramtype">uint&#160;</td>
2097 <td class="paramname"><em>input_stride_x</em>, </td>
2098 </tr>
2099 <tr>
2100 <td class="paramkey"></td>
2101 <td></td>
2102 <td class="paramtype">uint&#160;</td>
2103 <td class="paramname"><em>input_step_x</em>, </td>
2104 </tr>
2105 <tr>
2106 <td class="paramkey"></td>
2107 <td></td>
2108 <td class="paramtype">uint&#160;</td>
2109 <td class="paramname"><em>input_stride_y</em>, </td>
2110 </tr>
2111 <tr>
2112 <td class="paramkey"></td>
2113 <td></td>
2114 <td class="paramtype">uint&#160;</td>
2115 <td class="paramname"><em>input_step_y</em>, </td>
2116 </tr>
2117 <tr>
2118 <td class="paramkey"></td>
2119 <td></td>
2120 <td class="paramtype">uint&#160;</td>
2121 <td class="paramname"><em>input_stride_z</em>, </td>
2122 </tr>
2123 <tr>
2124 <td class="paramkey"></td>
2125 <td></td>
2126 <td class="paramtype">uint&#160;</td>
2127 <td class="paramname"><em>input_step_z</em>, </td>
2128 </tr>
2129 <tr>
2130 <td class="paramkey"></td>
2131 <td></td>
2132 <td class="paramtype">uint&#160;</td>
2133 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
2134 </tr>
2135 <tr>
2136 <td class="paramkey"></td>
2137 <td></td>
2138 <td class="paramtype">__global uchar *&#160;</td>
2139 <td class="paramname"><em>output_ptr</em>, </td>
2140 </tr>
2141 <tr>
2142 <td class="paramkey"></td>
2143 <td></td>
2144 <td class="paramtype">uint&#160;</td>
2145 <td class="paramname"><em>output_stride_x</em>, </td>
2146 </tr>
2147 <tr>
2148 <td class="paramkey"></td>
2149 <td></td>
2150 <td class="paramtype">uint&#160;</td>
2151 <td class="paramname"><em>output_step_x</em>, </td>
2152 </tr>
2153 <tr>
2154 <td class="paramkey"></td>
2155 <td></td>
2156 <td class="paramtype">uint&#160;</td>
2157 <td class="paramname"><em>output_stride_y</em>, </td>
2158 </tr>
2159 <tr>
2160 <td class="paramkey"></td>
2161 <td></td>
2162 <td class="paramtype">uint&#160;</td>
2163 <td class="paramname"><em>output_step_y</em>, </td>
2164 </tr>
2165 <tr>
2166 <td class="paramkey"></td>
2167 <td></td>
2168 <td class="paramtype">uint&#160;</td>
2169 <td class="paramname"><em>output_stride_z</em>, </td>
2170 </tr>
2171 <tr>
2172 <td class="paramkey"></td>
2173 <td></td>
2174 <td class="paramtype">uint&#160;</td>
2175 <td class="paramname"><em>output_step_z</em>, </td>
2176 </tr>
2177 <tr>
2178 <td class="paramkey"></td>
2179 <td></td>
2180 <td class="paramtype">uint&#160;</td>
2181 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
2182 </tr>
2183 <tr>
2184 <td class="paramkey"></td>
2185 <td></td>
2186 <td class="paramtype">uint&#160;</td>
2187 <td class="paramname"><em>Nx</em>, </td>
2188 </tr>
2189 <tr>
2190 <td class="paramkey"></td>
2191 <td></td>
2192 <td class="paramtype">uint&#160;</td>
2193 <td class="paramname"><em>Ni</em>, </td>
2194 </tr>
2195 <tr>
2196 <td class="paramkey"></td>
2197 <td></td>
2198 <td class="paramtype">float&#160;</td>
2199 <td class="paramname"><em>exp_const</em>&#160;</td>
2200 </tr>
2201 <tr>
2202 <td></td>
2203 <td>)</td>
2204 <td></td><td></td>
2205 </tr>
2206 </table>
2207</div><div class="memdoc">
2208
2209<p>Computes a stage of a radix-4 FFT on axis 0. </p>
2210<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
2211<dl class="params"><dt>Parameters</dt><dd>
2212 <table class="params">
2213 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
2214 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
2215 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
2216 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
2217 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
2218 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
2219 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
2220 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
2221 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
2222 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
2223 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
2224 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
2225 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
2226 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
2227 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
2228 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
2229 <tr><td class="paramdir">[in]</td><td class="paramname">Nx</td><td>The butterfly span. Products of radix order of previous radix's stage </td></tr>
2230 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
2231 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
2232 </table>
2233 </dd>
2234</dl>
2235
2236<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l01141">1141</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00002237<div class="fragment"><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;{</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <span class="comment">// Each work-item computes a single radix-4</span></div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; uint kx = get_global_id(0);</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; <span class="comment">// Compute nx</span></div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; uint nx = kx % Nx;</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; <span class="comment">// Compute n index</span></div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; uint n = nx + (kx / Nx) * Ni;</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr += n * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_x + get_global_id(1) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_y + get_global_id(2) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_z;</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(output);</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> += n * output.<a class="code" href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">stride_x</a> + get_global_id(1) * output.<a class="code" href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">stride_y</a> + get_global_id(2) * output.<a class="code" href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">stride_z</a>;</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; <span class="comment">// Load four complex input values</span></div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; float2 c0 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; float2 c1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, Nx, 0, 0));</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; float2 c2 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 2 * Nx, 0, 0));</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; float2 c3 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 3 * Nx, 0, 0));</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <span class="comment">// Compute phi</span></div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="keywordtype">float</span> phi = (float)nx * exp_const;</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="comment">// Multiply by twiddle factor</span></div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(phi, c1);</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(2 * phi, c2);</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(3 * phi, c3);</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="comment">// Compute DFT N = 4</span></div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; <a class="code" href="fft_8cl.xhtml#af97e6d43f8b70bcf009d521f8909db25">DFT_4</a>(c0, c1, c2, c3);</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; <span class="comment">// Store four complex output values</span></div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; vstore2(c0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; vstore2(c1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, Nx, 0, 0));</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; vstore2(c2, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 2 * Nx, 0, 0));</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; vstore2(c3, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 3 * Nx, 0, 0));</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_ad4dcc4a8b94f263cd19c59fdc2cec3d2"><div class="ttname"><a href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a></div><div class="ttdeci">#define TWIDDLE_FACTOR_MULTIPLICATION(phi, input)</div><div class="ttdoc">Calculates and applies the twiddle factor to a given input.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00031">fft.cl:31</a></div></div>
2238<div class="ttc" id="struct_tensor3_d_xhtml_ad5ff7a2b2bd0eec50fe09c254b127d1c"><div class="ttname"><a href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">Tensor3D::stride_z</a></div><div class="ttdeci">int stride_z</div><div class="ttdoc">Stride of the image in Z dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">helpers.h:364</a></div></div>
2239<div class="ttc" id="struct_tensor3_d_xhtml_ae01febbfd0689ef709f3ff6fdd2abc7e"><div class="ttname"><a href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">Tensor3D::stride_x</a></div><div class="ttdeci">int stride_x</div><div class="ttdoc">Stride of the image in X dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">helpers.h:362</a></div></div>
2240<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
2241<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
2242<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a79e8e562daa6599317d2d1cd86ef1bf2"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT_NO_STEP(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">helpers.h:330</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002243<div class="ttc" id="fft_8cl_xhtml_af97e6d43f8b70bcf009d521f8909db25"><div class="ttname"><a href="fft_8cl.xhtml#af97e6d43f8b70bcf009d521f8909db25">DFT_4</a></div><div class="ttdeci">#define DFT_4(c0, c1, c2, c3)</div><div class="ttdoc">Computes radix-4 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00081">fft.cl:81</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +00002244<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
2245<div class="ttc" id="struct_tensor3_d_xhtml_a4f0b90c9ecd6e57ceb3f37332fefe8f1"><div class="ttname"><a href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">Tensor3D::stride_y</a></div><div class="ttdeci">int stride_y</div><div class="ttdoc">Stride of the image in Y dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">helpers.h:363</a></div></div>
2246<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002247</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00002248<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00081">DFT_4</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01002249
2250</div>
2251</div>
2252<a id="a1ab2cb321d9d68ffb9158faf4f4694ff"></a>
2253<h2 class="memtitle"><span class="permalink"><a href="#a1ab2cb321d9d68ffb9158faf4f4694ff">&#9670;&nbsp;</a></span>fft_radix_4_axis_1()</h2>
2254
2255<div class="memitem">
2256<div class="memproto">
2257 <table class="memname">
2258 <tr>
2259 <td class="memname">kernel void fft_radix_4_axis_1 </td>
2260 <td>(</td>
2261 <td class="paramtype">__global uchar *&#160;</td>
2262 <td class="paramname"><em>input_ptr</em>, </td>
2263 </tr>
2264 <tr>
2265 <td class="paramkey"></td>
2266 <td></td>
2267 <td class="paramtype">uint&#160;</td>
2268 <td class="paramname"><em>input_stride_x</em>, </td>
2269 </tr>
2270 <tr>
2271 <td class="paramkey"></td>
2272 <td></td>
2273 <td class="paramtype">uint&#160;</td>
2274 <td class="paramname"><em>input_step_x</em>, </td>
2275 </tr>
2276 <tr>
2277 <td class="paramkey"></td>
2278 <td></td>
2279 <td class="paramtype">uint&#160;</td>
2280 <td class="paramname"><em>input_stride_y</em>, </td>
2281 </tr>
2282 <tr>
2283 <td class="paramkey"></td>
2284 <td></td>
2285 <td class="paramtype">uint&#160;</td>
2286 <td class="paramname"><em>input_step_y</em>, </td>
2287 </tr>
2288 <tr>
2289 <td class="paramkey"></td>
2290 <td></td>
2291 <td class="paramtype">uint&#160;</td>
2292 <td class="paramname"><em>input_stride_z</em>, </td>
2293 </tr>
2294 <tr>
2295 <td class="paramkey"></td>
2296 <td></td>
2297 <td class="paramtype">uint&#160;</td>
2298 <td class="paramname"><em>input_step_z</em>, </td>
2299 </tr>
2300 <tr>
2301 <td class="paramkey"></td>
2302 <td></td>
2303 <td class="paramtype">uint&#160;</td>
2304 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
2305 </tr>
2306 <tr>
2307 <td class="paramkey"></td>
2308 <td></td>
2309 <td class="paramtype">__global uchar *&#160;</td>
2310 <td class="paramname"><em>output_ptr</em>, </td>
2311 </tr>
2312 <tr>
2313 <td class="paramkey"></td>
2314 <td></td>
2315 <td class="paramtype">uint&#160;</td>
2316 <td class="paramname"><em>output_stride_x</em>, </td>
2317 </tr>
2318 <tr>
2319 <td class="paramkey"></td>
2320 <td></td>
2321 <td class="paramtype">uint&#160;</td>
2322 <td class="paramname"><em>output_step_x</em>, </td>
2323 </tr>
2324 <tr>
2325 <td class="paramkey"></td>
2326 <td></td>
2327 <td class="paramtype">uint&#160;</td>
2328 <td class="paramname"><em>output_stride_y</em>, </td>
2329 </tr>
2330 <tr>
2331 <td class="paramkey"></td>
2332 <td></td>
2333 <td class="paramtype">uint&#160;</td>
2334 <td class="paramname"><em>output_step_y</em>, </td>
2335 </tr>
2336 <tr>
2337 <td class="paramkey"></td>
2338 <td></td>
2339 <td class="paramtype">uint&#160;</td>
2340 <td class="paramname"><em>output_stride_z</em>, </td>
2341 </tr>
2342 <tr>
2343 <td class="paramkey"></td>
2344 <td></td>
2345 <td class="paramtype">uint&#160;</td>
2346 <td class="paramname"><em>output_step_z</em>, </td>
2347 </tr>
2348 <tr>
2349 <td class="paramkey"></td>
2350 <td></td>
2351 <td class="paramtype">uint&#160;</td>
2352 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
2353 </tr>
2354 <tr>
2355 <td class="paramkey"></td>
2356 <td></td>
2357 <td class="paramtype">uint&#160;</td>
2358 <td class="paramname"><em>Nx</em>, </td>
2359 </tr>
2360 <tr>
2361 <td class="paramkey"></td>
2362 <td></td>
2363 <td class="paramtype">uint&#160;</td>
2364 <td class="paramname"><em>Ni</em>, </td>
2365 </tr>
2366 <tr>
2367 <td class="paramkey"></td>
2368 <td></td>
2369 <td class="paramtype">float&#160;</td>
2370 <td class="paramname"><em>exp_const</em>&#160;</td>
2371 </tr>
2372 <tr>
2373 <td></td>
2374 <td>)</td>
2375 <td></td><td></td>
2376 </tr>
2377 </table>
2378</div><div class="memdoc">
2379
2380<p>Computes a stage of a radix-4 FFT on axis 1. </p>
2381<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
2382<dl class="params"><dt>Parameters</dt><dd>
2383 <table class="params">
2384 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
2385 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
2386 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
2387 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
2388 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
2389 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
2390 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
2391 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
2392 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
2393 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
2394 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
2395 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
2396 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
2397 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
2398 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
2399 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
2400 <tr><td class="paramdir">[in]</td><td class="paramname">Nx</td><td>The butterfly span. Products of radix order of previous radix's stage </td></tr>
2401 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
2402 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
2403 </table>
2404 </dd>
2405</dl>
2406
2407<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l01217">1217</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00002408<div class="fragment"><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;{</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; <span class="comment">// Each work-item computes a single radix-4</span></div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; uint kx = get_global_id(1);</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; <span class="comment">// Compute nx</span></div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; uint nx = kx % Nx;</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; <span class="comment">// Compute n index</span></div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; uint n = nx + (kx / Nx) * Ni;</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr += get_global_id(0) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_x + n * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_y + get_global_id(2) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_z;</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(output);</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> += get_global_id(0) * output.<a class="code" href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">stride_x</a> + n * output.<a class="code" href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">stride_y</a> + get_global_id(2) * output.<a class="code" href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">stride_z</a>;</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; <span class="comment">// Load four complex input values</span></div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; float2 c0 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; float2 c1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, Nx, 0));</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; float2 c2 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 2 * Nx, 0));</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; float2 c3 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 3 * Nx, 0));</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <span class="comment">// Compute phi</span></div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <span class="keywordtype">float</span> phi = (float)nx * exp_const;</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; <span class="comment">// Multiply by twiddle factor</span></div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(phi, c1);</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(2 * phi, c2);</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(3 * phi, c3);</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; <span class="comment">// Compute DFT N = 4</span></div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <a class="code" href="fft_8cl.xhtml#af97e6d43f8b70bcf009d521f8909db25">DFT_4</a>(c0, c1, c2, c3);</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; <span class="comment">// Store four complex output values</span></div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; vstore2(c0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; vstore2(c1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, Nx, 0));</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; vstore2(c2, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 2 * Nx, 0));</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; vstore2(c3, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 3 * Nx, 0));</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_ad4dcc4a8b94f263cd19c59fdc2cec3d2"><div class="ttname"><a href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a></div><div class="ttdeci">#define TWIDDLE_FACTOR_MULTIPLICATION(phi, input)</div><div class="ttdoc">Calculates and applies the twiddle factor to a given input.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00031">fft.cl:31</a></div></div>
2409<div class="ttc" id="struct_tensor3_d_xhtml_ad5ff7a2b2bd0eec50fe09c254b127d1c"><div class="ttname"><a href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">Tensor3D::stride_z</a></div><div class="ttdeci">int stride_z</div><div class="ttdoc">Stride of the image in Z dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">helpers.h:364</a></div></div>
2410<div class="ttc" id="struct_tensor3_d_xhtml_ae01febbfd0689ef709f3ff6fdd2abc7e"><div class="ttname"><a href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">Tensor3D::stride_x</a></div><div class="ttdeci">int stride_x</div><div class="ttdoc">Stride of the image in X dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">helpers.h:362</a></div></div>
2411<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
2412<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
2413<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a79e8e562daa6599317d2d1cd86ef1bf2"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT_NO_STEP(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">helpers.h:330</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002414<div class="ttc" id="fft_8cl_xhtml_af97e6d43f8b70bcf009d521f8909db25"><div class="ttname"><a href="fft_8cl.xhtml#af97e6d43f8b70bcf009d521f8909db25">DFT_4</a></div><div class="ttdeci">#define DFT_4(c0, c1, c2, c3)</div><div class="ttdoc">Computes radix-4 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00081">fft.cl:81</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +00002415<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
2416<div class="ttc" id="struct_tensor3_d_xhtml_a4f0b90c9ecd6e57ceb3f37332fefe8f1"><div class="ttname"><a href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">Tensor3D::stride_y</a></div><div class="ttdeci">int stride_y</div><div class="ttdoc">Stride of the image in Y dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">helpers.h:363</a></div></div>
2417<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002418</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00002419<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00081">DFT_4</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01002420
2421</div>
2422</div>
2423<a id="a67f435359dc175539c7d04d27c4bebb4"></a>
2424<h2 class="memtitle"><span class="permalink"><a href="#a67f435359dc175539c7d04d27c4bebb4">&#9670;&nbsp;</a></span>fft_radix_4_first_stage_axis_0()</h2>
2425
2426<div class="memitem">
2427<div class="memproto">
2428 <table class="memname">
2429 <tr>
2430 <td class="memname">kernel void fft_radix_4_first_stage_axis_0 </td>
2431 <td>(</td>
2432 <td class="paramtype">__global uchar *&#160;</td>
2433 <td class="paramname"><em>input_ptr</em>, </td>
2434 </tr>
2435 <tr>
2436 <td class="paramkey"></td>
2437 <td></td>
2438 <td class="paramtype">uint&#160;</td>
2439 <td class="paramname"><em>input_stride_x</em>, </td>
2440 </tr>
2441 <tr>
2442 <td class="paramkey"></td>
2443 <td></td>
2444 <td class="paramtype">uint&#160;</td>
2445 <td class="paramname"><em>input_step_x</em>, </td>
2446 </tr>
2447 <tr>
2448 <td class="paramkey"></td>
2449 <td></td>
2450 <td class="paramtype">uint&#160;</td>
2451 <td class="paramname"><em>input_stride_y</em>, </td>
2452 </tr>
2453 <tr>
2454 <td class="paramkey"></td>
2455 <td></td>
2456 <td class="paramtype">uint&#160;</td>
2457 <td class="paramname"><em>input_step_y</em>, </td>
2458 </tr>
2459 <tr>
2460 <td class="paramkey"></td>
2461 <td></td>
2462 <td class="paramtype">uint&#160;</td>
2463 <td class="paramname"><em>input_stride_z</em>, </td>
2464 </tr>
2465 <tr>
2466 <td class="paramkey"></td>
2467 <td></td>
2468 <td class="paramtype">uint&#160;</td>
2469 <td class="paramname"><em>input_step_z</em>, </td>
2470 </tr>
2471 <tr>
2472 <td class="paramkey"></td>
2473 <td></td>
2474 <td class="paramtype">uint&#160;</td>
2475 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
2476 </tr>
2477 <tr>
2478 <td class="paramkey"></td>
2479 <td></td>
2480 <td class="paramtype">__global uchar *&#160;</td>
2481 <td class="paramname"><em>output_ptr</em>, </td>
2482 </tr>
2483 <tr>
2484 <td class="paramkey"></td>
2485 <td></td>
2486 <td class="paramtype">uint&#160;</td>
2487 <td class="paramname"><em>output_stride_x</em>, </td>
2488 </tr>
2489 <tr>
2490 <td class="paramkey"></td>
2491 <td></td>
2492 <td class="paramtype">uint&#160;</td>
2493 <td class="paramname"><em>output_step_x</em>, </td>
2494 </tr>
2495 <tr>
2496 <td class="paramkey"></td>
2497 <td></td>
2498 <td class="paramtype">uint&#160;</td>
2499 <td class="paramname"><em>output_stride_y</em>, </td>
2500 </tr>
2501 <tr>
2502 <td class="paramkey"></td>
2503 <td></td>
2504 <td class="paramtype">uint&#160;</td>
2505 <td class="paramname"><em>output_step_y</em>, </td>
2506 </tr>
2507 <tr>
2508 <td class="paramkey"></td>
2509 <td></td>
2510 <td class="paramtype">uint&#160;</td>
2511 <td class="paramname"><em>output_stride_z</em>, </td>
2512 </tr>
2513 <tr>
2514 <td class="paramkey"></td>
2515 <td></td>
2516 <td class="paramtype">uint&#160;</td>
2517 <td class="paramname"><em>output_step_z</em>, </td>
2518 </tr>
2519 <tr>
2520 <td class="paramkey"></td>
2521 <td></td>
2522 <td class="paramtype">uint&#160;</td>
2523 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
2524 </tr>
2525 <tr>
2526 <td></td>
2527 <td>)</td>
2528 <td></td><td></td>
2529 </tr>
2530 </table>
2531</div><div class="memdoc">
2532
2533<p>Computes the first stage of a radix-4 DFT on axis 0. </p>
2534<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
2535<dl class="params"><dt>Parameters</dt><dd>
2536 <table class="params">
2537 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
2538 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
2539 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
2540 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
2541 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
2542 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
2543 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
2544 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
2545 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
2546 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
2547 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
2548 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
2549 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
2550 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
2551 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
2552 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
2553 </table>
2554 </dd>
2555</dl>
2556
2557<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00430">430</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00002558<div class="fragment"><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;{</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(output);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="comment">// Load four complex input values</span></div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; float8 data = vload8(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="comment">// Compute DFT N = 4</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <a class="code" href="fft_8cl.xhtml#af97e6d43f8b70bcf009d521f8909db25">DFT_4</a>(data.s01, data.s23, data.s45, data.s67);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="comment">// Store four complex output values</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; vstore8(data, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;}</div><div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
2559<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
2560<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a31c8c760f08fb1a331b16b7c204321dc"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">helpers.h:326</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002561<div class="ttc" id="fft_8cl_xhtml_af97e6d43f8b70bcf009d521f8909db25"><div class="ttname"><a href="fft_8cl.xhtml#af97e6d43f8b70bcf009d521f8909db25">DFT_4</a></div><div class="ttdeci">#define DFT_4(c0, c1, c2, c3)</div><div class="ttdoc">Computes radix-4 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00081">fft.cl:81</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +00002562<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002563</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00002564<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00081">DFT_4</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01002565
2566</div>
2567</div>
2568<a id="aa9b7071c5ccacded46ca51f250807be5"></a>
2569<h2 class="memtitle"><span class="permalink"><a href="#aa9b7071c5ccacded46ca51f250807be5">&#9670;&nbsp;</a></span>fft_radix_4_first_stage_axis_1()</h2>
2570
2571<div class="memitem">
2572<div class="memproto">
2573 <table class="memname">
2574 <tr>
2575 <td class="memname">kernel void fft_radix_4_first_stage_axis_1 </td>
2576 <td>(</td>
2577 <td class="paramtype">__global uchar *&#160;</td>
2578 <td class="paramname"><em>input_ptr</em>, </td>
2579 </tr>
2580 <tr>
2581 <td class="paramkey"></td>
2582 <td></td>
2583 <td class="paramtype">uint&#160;</td>
2584 <td class="paramname"><em>input_stride_x</em>, </td>
2585 </tr>
2586 <tr>
2587 <td class="paramkey"></td>
2588 <td></td>
2589 <td class="paramtype">uint&#160;</td>
2590 <td class="paramname"><em>input_step_x</em>, </td>
2591 </tr>
2592 <tr>
2593 <td class="paramkey"></td>
2594 <td></td>
2595 <td class="paramtype">uint&#160;</td>
2596 <td class="paramname"><em>input_stride_y</em>, </td>
2597 </tr>
2598 <tr>
2599 <td class="paramkey"></td>
2600 <td></td>
2601 <td class="paramtype">uint&#160;</td>
2602 <td class="paramname"><em>input_step_y</em>, </td>
2603 </tr>
2604 <tr>
2605 <td class="paramkey"></td>
2606 <td></td>
2607 <td class="paramtype">uint&#160;</td>
2608 <td class="paramname"><em>input_stride_z</em>, </td>
2609 </tr>
2610 <tr>
2611 <td class="paramkey"></td>
2612 <td></td>
2613 <td class="paramtype">uint&#160;</td>
2614 <td class="paramname"><em>input_step_z</em>, </td>
2615 </tr>
2616 <tr>
2617 <td class="paramkey"></td>
2618 <td></td>
2619 <td class="paramtype">uint&#160;</td>
2620 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
2621 </tr>
2622 <tr>
2623 <td class="paramkey"></td>
2624 <td></td>
2625 <td class="paramtype">__global uchar *&#160;</td>
2626 <td class="paramname"><em>output_ptr</em>, </td>
2627 </tr>
2628 <tr>
2629 <td class="paramkey"></td>
2630 <td></td>
2631 <td class="paramtype">uint&#160;</td>
2632 <td class="paramname"><em>output_stride_x</em>, </td>
2633 </tr>
2634 <tr>
2635 <td class="paramkey"></td>
2636 <td></td>
2637 <td class="paramtype">uint&#160;</td>
2638 <td class="paramname"><em>output_step_x</em>, </td>
2639 </tr>
2640 <tr>
2641 <td class="paramkey"></td>
2642 <td></td>
2643 <td class="paramtype">uint&#160;</td>
2644 <td class="paramname"><em>output_stride_y</em>, </td>
2645 </tr>
2646 <tr>
2647 <td class="paramkey"></td>
2648 <td></td>
2649 <td class="paramtype">uint&#160;</td>
2650 <td class="paramname"><em>output_step_y</em>, </td>
2651 </tr>
2652 <tr>
2653 <td class="paramkey"></td>
2654 <td></td>
2655 <td class="paramtype">uint&#160;</td>
2656 <td class="paramname"><em>output_stride_z</em>, </td>
2657 </tr>
2658 <tr>
2659 <td class="paramkey"></td>
2660 <td></td>
2661 <td class="paramtype">uint&#160;</td>
2662 <td class="paramname"><em>output_step_z</em>, </td>
2663 </tr>
2664 <tr>
2665 <td class="paramkey"></td>
2666 <td></td>
2667 <td class="paramtype">uint&#160;</td>
2668 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
2669 </tr>
2670 <tr>
2671 <td></td>
2672 <td>)</td>
2673 <td></td><td></td>
2674 </tr>
2675 </table>
2676</div><div class="memdoc">
2677
2678<p>Computes the first stage of a radix-4 DFT on axis 1. </p>
2679<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
2680<dl class="params"><dt>Parameters</dt><dd>
2681 <table class="params">
2682 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
2683 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
2684 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
2685 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
2686 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
2687 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
2688 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
2689 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
2690 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
2691 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
2692 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
2693 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
2694 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
2695 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
2696 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
2697 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
2698 </table>
2699 </dd>
2700</dl>
2701
2702<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00477">477</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00002703<div class="fragment"><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;{</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(output);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="comment">// Load four complex input values</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; float2 data0 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; float2 data1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 1, 0));</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; float2 data2 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 2, 0));</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; float2 data3 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 3, 0));</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="comment">// Compute DFT N = 4</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <a class="code" href="fft_8cl.xhtml#af97e6d43f8b70bcf009d521f8909db25">DFT_4</a>(data0, data1, data2, data3);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="comment">// Store four complex output values</span></div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; vstore2(data0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; vstore2(data1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 1, 0));</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; vstore2(data2, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 2, 0));</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; vstore2(data3, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 3, 0));</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;}</div><div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
2704<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
2705<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a31c8c760f08fb1a331b16b7c204321dc"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">helpers.h:326</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002706<div class="ttc" id="fft_8cl_xhtml_af97e6d43f8b70bcf009d521f8909db25"><div class="ttname"><a href="fft_8cl.xhtml#af97e6d43f8b70bcf009d521f8909db25">DFT_4</a></div><div class="ttdeci">#define DFT_4(c0, c1, c2, c3)</div><div class="ttdoc">Computes radix-4 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00081">fft.cl:81</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +00002707<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
2708<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002709</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00002710<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00081">DFT_4</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01002711
2712</div>
2713</div>
2714<a id="a4eb2e93f73d6b6409b675b4b2f56dcd0"></a>
2715<h2 class="memtitle"><span class="permalink"><a href="#a4eb2e93f73d6b6409b675b4b2f56dcd0">&#9670;&nbsp;</a></span>fft_radix_5_axis_0()</h2>
2716
2717<div class="memitem">
2718<div class="memproto">
2719 <table class="memname">
2720 <tr>
2721 <td class="memname">kernel void fft_radix_5_axis_0 </td>
2722 <td>(</td>
2723 <td class="paramtype">__global uchar *&#160;</td>
2724 <td class="paramname"><em>input_ptr</em>, </td>
2725 </tr>
2726 <tr>
2727 <td class="paramkey"></td>
2728 <td></td>
2729 <td class="paramtype">uint&#160;</td>
2730 <td class="paramname"><em>input_stride_x</em>, </td>
2731 </tr>
2732 <tr>
2733 <td class="paramkey"></td>
2734 <td></td>
2735 <td class="paramtype">uint&#160;</td>
2736 <td class="paramname"><em>input_step_x</em>, </td>
2737 </tr>
2738 <tr>
2739 <td class="paramkey"></td>
2740 <td></td>
2741 <td class="paramtype">uint&#160;</td>
2742 <td class="paramname"><em>input_stride_y</em>, </td>
2743 </tr>
2744 <tr>
2745 <td class="paramkey"></td>
2746 <td></td>
2747 <td class="paramtype">uint&#160;</td>
2748 <td class="paramname"><em>input_step_y</em>, </td>
2749 </tr>
2750 <tr>
2751 <td class="paramkey"></td>
2752 <td></td>
2753 <td class="paramtype">uint&#160;</td>
2754 <td class="paramname"><em>input_stride_z</em>, </td>
2755 </tr>
2756 <tr>
2757 <td class="paramkey"></td>
2758 <td></td>
2759 <td class="paramtype">uint&#160;</td>
2760 <td class="paramname"><em>input_step_z</em>, </td>
2761 </tr>
2762 <tr>
2763 <td class="paramkey"></td>
2764 <td></td>
2765 <td class="paramtype">uint&#160;</td>
2766 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
2767 </tr>
2768 <tr>
2769 <td class="paramkey"></td>
2770 <td></td>
2771 <td class="paramtype">__global uchar *&#160;</td>
2772 <td class="paramname"><em>output_ptr</em>, </td>
2773 </tr>
2774 <tr>
2775 <td class="paramkey"></td>
2776 <td></td>
2777 <td class="paramtype">uint&#160;</td>
2778 <td class="paramname"><em>output_stride_x</em>, </td>
2779 </tr>
2780 <tr>
2781 <td class="paramkey"></td>
2782 <td></td>
2783 <td class="paramtype">uint&#160;</td>
2784 <td class="paramname"><em>output_step_x</em>, </td>
2785 </tr>
2786 <tr>
2787 <td class="paramkey"></td>
2788 <td></td>
2789 <td class="paramtype">uint&#160;</td>
2790 <td class="paramname"><em>output_stride_y</em>, </td>
2791 </tr>
2792 <tr>
2793 <td class="paramkey"></td>
2794 <td></td>
2795 <td class="paramtype">uint&#160;</td>
2796 <td class="paramname"><em>output_step_y</em>, </td>
2797 </tr>
2798 <tr>
2799 <td class="paramkey"></td>
2800 <td></td>
2801 <td class="paramtype">uint&#160;</td>
2802 <td class="paramname"><em>output_stride_z</em>, </td>
2803 </tr>
2804 <tr>
2805 <td class="paramkey"></td>
2806 <td></td>
2807 <td class="paramtype">uint&#160;</td>
2808 <td class="paramname"><em>output_step_z</em>, </td>
2809 </tr>
2810 <tr>
2811 <td class="paramkey"></td>
2812 <td></td>
2813 <td class="paramtype">uint&#160;</td>
2814 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
2815 </tr>
2816 <tr>
2817 <td class="paramkey"></td>
2818 <td></td>
2819 <td class="paramtype">uint&#160;</td>
2820 <td class="paramname"><em>Nx</em>, </td>
2821 </tr>
2822 <tr>
2823 <td class="paramkey"></td>
2824 <td></td>
2825 <td class="paramtype">uint&#160;</td>
2826 <td class="paramname"><em>Ni</em>, </td>
2827 </tr>
2828 <tr>
2829 <td class="paramkey"></td>
2830 <td></td>
2831 <td class="paramtype">float&#160;</td>
2832 <td class="paramname"><em>exp_const</em>&#160;</td>
2833 </tr>
2834 <tr>
2835 <td></td>
2836 <td>)</td>
2837 <td></td><td></td>
2838 </tr>
2839 </table>
2840</div><div class="memdoc">
2841
2842<p>Computes a stage of a radix-5 FFT on axis 0. </p>
2843<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
2844<dl class="params"><dt>Parameters</dt><dd>
2845 <table class="params">
2846 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
2847 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
2848 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
2849 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
2850 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
2851 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
2852 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
2853 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
2854 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
2855 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
2856 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
2857 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
2858 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
2859 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
2860 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
2861 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
2862 <tr><td class="paramdir">[in]</td><td class="paramname">Nx</td><td>The butterfly span. Products of radix order of previous radix's stage </td></tr>
2863 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
2864 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
2865 </table>
2866 </dd>
2867</dl>
2868
2869<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l01293">1293</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00002870<div class="fragment"><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;{</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; <span class="comment">// Each work-item computes a single radix-5</span></div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; uint kx = get_global_id(0);</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <span class="comment">// Compute nx</span></div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; uint nx = kx % Nx;</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="comment">// Compute n index</span></div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; uint n = nx + (kx / Nx) * Ni;</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr += n * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_x + get_global_id(1) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_y + get_global_id(2) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_z;</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(output);</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> += n * output.<a class="code" href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">stride_x</a> + get_global_id(1) * output.<a class="code" href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">stride_y</a> + get_global_id(2) * output.<a class="code" href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">stride_z</a>;</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; <span class="comment">// Load five complex input values</span></div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; float2 c0 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; float2 c1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, Nx, 0, 0));</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; float2 c2 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 2 * Nx, 0, 0));</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; float2 c3 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 3 * Nx, 0, 0));</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; float2 c4 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 4 * Nx, 0, 0));</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; <span class="comment">// Compute phi</span></div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; <span class="keywordtype">float</span> phi = (float)nx * exp_const;</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; <span class="comment">// Multiply by twiddle factor</span></div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(phi, c1);</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(2 * phi, c2);</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(3 * phi, c3);</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(4 * phi, c4);</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <span class="comment">// Compute DFT N = 5</span></div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; <a class="code" href="fft_8cl.xhtml#a565f17c6fe3e9462057bb523e0127280">DFT_5</a>(c0, c1, c2, c3, c4);</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; <span class="comment">// Store five complex output values</span></div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; vstore2(c0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; vstore2(c1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, Nx, 0, 0));</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; vstore2(c2, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 2 * Nx, 0, 0));</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; vstore2(c3, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 3 * Nx, 0, 0));</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; vstore2(c4, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 4 * Nx, 0, 0));</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_ad4dcc4a8b94f263cd19c59fdc2cec3d2"><div class="ttname"><a href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a></div><div class="ttdeci">#define TWIDDLE_FACTOR_MULTIPLICATION(phi, input)</div><div class="ttdoc">Calculates and applies the twiddle factor to a given input.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00031">fft.cl:31</a></div></div>
2871<div class="ttc" id="struct_tensor3_d_xhtml_ad5ff7a2b2bd0eec50fe09c254b127d1c"><div class="ttname"><a href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">Tensor3D::stride_z</a></div><div class="ttdeci">int stride_z</div><div class="ttdoc">Stride of the image in Z dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">helpers.h:364</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002872<div class="ttc" id="fft_8cl_xhtml_a565f17c6fe3e9462057bb523e0127280"><div class="ttname"><a href="fft_8cl.xhtml#a565f17c6fe3e9462057bb523e0127280">DFT_5</a></div><div class="ttdeci">#define DFT_5(c0, c1, c2, c3, c4)</div><div class="ttdoc">Computes radix-5 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00109">fft.cl:109</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +00002873<div class="ttc" id="struct_tensor3_d_xhtml_ae01febbfd0689ef709f3ff6fdd2abc7e"><div class="ttname"><a href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">Tensor3D::stride_x</a></div><div class="ttdeci">int stride_x</div><div class="ttdoc">Stride of the image in X dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">helpers.h:362</a></div></div>
2874<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
2875<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
2876<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a79e8e562daa6599317d2d1cd86ef1bf2"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT_NO_STEP(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">helpers.h:330</a></div></div>
2877<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
2878<div class="ttc" id="struct_tensor3_d_xhtml_a4f0b90c9ecd6e57ceb3f37332fefe8f1"><div class="ttname"><a href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">Tensor3D::stride_y</a></div><div class="ttdeci">int stride_y</div><div class="ttdoc">Stride of the image in Y dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">helpers.h:363</a></div></div>
2879<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002880</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00002881<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00109">DFT_5</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01002882
2883</div>
2884</div>
2885<a id="abb1a1c12ab2c72bbb439051b7ff5481b"></a>
2886<h2 class="memtitle"><span class="permalink"><a href="#abb1a1c12ab2c72bbb439051b7ff5481b">&#9670;&nbsp;</a></span>fft_radix_5_axis_1()</h2>
2887
2888<div class="memitem">
2889<div class="memproto">
2890 <table class="memname">
2891 <tr>
2892 <td class="memname">kernel void fft_radix_5_axis_1 </td>
2893 <td>(</td>
2894 <td class="paramtype">__global uchar *&#160;</td>
2895 <td class="paramname"><em>input_ptr</em>, </td>
2896 </tr>
2897 <tr>
2898 <td class="paramkey"></td>
2899 <td></td>
2900 <td class="paramtype">uint&#160;</td>
2901 <td class="paramname"><em>input_stride_x</em>, </td>
2902 </tr>
2903 <tr>
2904 <td class="paramkey"></td>
2905 <td></td>
2906 <td class="paramtype">uint&#160;</td>
2907 <td class="paramname"><em>input_step_x</em>, </td>
2908 </tr>
2909 <tr>
2910 <td class="paramkey"></td>
2911 <td></td>
2912 <td class="paramtype">uint&#160;</td>
2913 <td class="paramname"><em>input_stride_y</em>, </td>
2914 </tr>
2915 <tr>
2916 <td class="paramkey"></td>
2917 <td></td>
2918 <td class="paramtype">uint&#160;</td>
2919 <td class="paramname"><em>input_step_y</em>, </td>
2920 </tr>
2921 <tr>
2922 <td class="paramkey"></td>
2923 <td></td>
2924 <td class="paramtype">uint&#160;</td>
2925 <td class="paramname"><em>input_stride_z</em>, </td>
2926 </tr>
2927 <tr>
2928 <td class="paramkey"></td>
2929 <td></td>
2930 <td class="paramtype">uint&#160;</td>
2931 <td class="paramname"><em>input_step_z</em>, </td>
2932 </tr>
2933 <tr>
2934 <td class="paramkey"></td>
2935 <td></td>
2936 <td class="paramtype">uint&#160;</td>
2937 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
2938 </tr>
2939 <tr>
2940 <td class="paramkey"></td>
2941 <td></td>
2942 <td class="paramtype">__global uchar *&#160;</td>
2943 <td class="paramname"><em>output_ptr</em>, </td>
2944 </tr>
2945 <tr>
2946 <td class="paramkey"></td>
2947 <td></td>
2948 <td class="paramtype">uint&#160;</td>
2949 <td class="paramname"><em>output_stride_x</em>, </td>
2950 </tr>
2951 <tr>
2952 <td class="paramkey"></td>
2953 <td></td>
2954 <td class="paramtype">uint&#160;</td>
2955 <td class="paramname"><em>output_step_x</em>, </td>
2956 </tr>
2957 <tr>
2958 <td class="paramkey"></td>
2959 <td></td>
2960 <td class="paramtype">uint&#160;</td>
2961 <td class="paramname"><em>output_stride_y</em>, </td>
2962 </tr>
2963 <tr>
2964 <td class="paramkey"></td>
2965 <td></td>
2966 <td class="paramtype">uint&#160;</td>
2967 <td class="paramname"><em>output_step_y</em>, </td>
2968 </tr>
2969 <tr>
2970 <td class="paramkey"></td>
2971 <td></td>
2972 <td class="paramtype">uint&#160;</td>
2973 <td class="paramname"><em>output_stride_z</em>, </td>
2974 </tr>
2975 <tr>
2976 <td class="paramkey"></td>
2977 <td></td>
2978 <td class="paramtype">uint&#160;</td>
2979 <td class="paramname"><em>output_step_z</em>, </td>
2980 </tr>
2981 <tr>
2982 <td class="paramkey"></td>
2983 <td></td>
2984 <td class="paramtype">uint&#160;</td>
2985 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
2986 </tr>
2987 <tr>
2988 <td class="paramkey"></td>
2989 <td></td>
2990 <td class="paramtype">uint&#160;</td>
2991 <td class="paramname"><em>Nx</em>, </td>
2992 </tr>
2993 <tr>
2994 <td class="paramkey"></td>
2995 <td></td>
2996 <td class="paramtype">uint&#160;</td>
2997 <td class="paramname"><em>Ni</em>, </td>
2998 </tr>
2999 <tr>
3000 <td class="paramkey"></td>
3001 <td></td>
3002 <td class="paramtype">float&#160;</td>
3003 <td class="paramname"><em>exp_const</em>&#160;</td>
3004 </tr>
3005 <tr>
3006 <td></td>
3007 <td>)</td>
3008 <td></td><td></td>
3009 </tr>
3010 </table>
3011</div><div class="memdoc">
3012
3013<p>Computes a stage of a radix-5 FFT on axis 1. </p>
3014<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
3015<dl class="params"><dt>Parameters</dt><dd>
3016 <table class="params">
3017 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
3018 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
3019 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
3020 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
3021 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
3022 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
3023 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
3024 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
3025 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
3026 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
3027 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
3028 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
3029 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
3030 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
3031 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
3032 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
3033 <tr><td class="paramdir">[in]</td><td class="paramname">Nx</td><td>The butterfly span. Products of radix order of previous radix's stage </td></tr>
3034 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
3035 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
3036 </table>
3037 </dd>
3038</dl>
3039
3040<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l01372">1372</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00003041<div class="fragment"><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;{</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; <span class="comment">// Each work-item computes a single radix-5</span></div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; uint kx = get_global_id(1);</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; <span class="comment">// Compute nx</span></div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; uint nx = kx % Nx;</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; <span class="comment">// Compute n index</span></div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; uint n = nx + (kx / Nx) * Ni;</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr += get_global_id(0) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_x + n * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_y + get_global_id(2) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_z;</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(output);</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> += get_global_id(0) * output.<a class="code" href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">stride_x</a> + n * output.<a class="code" href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">stride_y</a> + get_global_id(2) * output.<a class="code" href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">stride_z</a>;</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; <span class="comment">// Load five complex input values</span></div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; float2 c0 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; float2 c1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, Nx, 0));</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; float2 c2 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 2 * Nx, 0));</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; float2 c3 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 3 * Nx, 0));</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; float2 c4 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 4 * Nx, 0));</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; <span class="comment">// Compute phi</span></div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; <span class="keywordtype">float</span> phi = (float)nx * exp_const;</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; <span class="comment">// Multiply by twiddle factor</span></div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(phi, c1);</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(2 * phi, c2);</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(3 * phi, c3);</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(4 * phi, c4);</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; <span class="comment">// Compute DFT N = 5</span></div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; <a class="code" href="fft_8cl.xhtml#a565f17c6fe3e9462057bb523e0127280">DFT_5</a>(c0, c1, c2, c3, c4);</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; <span class="comment">// Store five complex output values</span></div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; vstore2(c0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; vstore2(c1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, Nx, 0));</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; vstore2(c2, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 2 * Nx, 0));</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; vstore2(c3, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 3 * Nx, 0));</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; vstore2(c4, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 4 * Nx, 0));</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_ad4dcc4a8b94f263cd19c59fdc2cec3d2"><div class="ttname"><a href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a></div><div class="ttdeci">#define TWIDDLE_FACTOR_MULTIPLICATION(phi, input)</div><div class="ttdoc">Calculates and applies the twiddle factor to a given input.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00031">fft.cl:31</a></div></div>
3042<div class="ttc" id="struct_tensor3_d_xhtml_ad5ff7a2b2bd0eec50fe09c254b127d1c"><div class="ttname"><a href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">Tensor3D::stride_z</a></div><div class="ttdeci">int stride_z</div><div class="ttdoc">Stride of the image in Z dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">helpers.h:364</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003043<div class="ttc" id="fft_8cl_xhtml_a565f17c6fe3e9462057bb523e0127280"><div class="ttname"><a href="fft_8cl.xhtml#a565f17c6fe3e9462057bb523e0127280">DFT_5</a></div><div class="ttdeci">#define DFT_5(c0, c1, c2, c3, c4)</div><div class="ttdoc">Computes radix-5 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00109">fft.cl:109</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +00003044<div class="ttc" id="struct_tensor3_d_xhtml_ae01febbfd0689ef709f3ff6fdd2abc7e"><div class="ttname"><a href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">Tensor3D::stride_x</a></div><div class="ttdeci">int stride_x</div><div class="ttdoc">Stride of the image in X dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">helpers.h:362</a></div></div>
3045<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
3046<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
3047<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a79e8e562daa6599317d2d1cd86ef1bf2"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT_NO_STEP(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">helpers.h:330</a></div></div>
3048<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
3049<div class="ttc" id="struct_tensor3_d_xhtml_a4f0b90c9ecd6e57ceb3f37332fefe8f1"><div class="ttname"><a href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">Tensor3D::stride_y</a></div><div class="ttdeci">int stride_y</div><div class="ttdoc">Stride of the image in Y dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">helpers.h:363</a></div></div>
3050<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003051</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00003052<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00109">DFT_5</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01003053
3054</div>
3055</div>
3056<a id="a11794801d4e717905406446d14cd313b"></a>
3057<h2 class="memtitle"><span class="permalink"><a href="#a11794801d4e717905406446d14cd313b">&#9670;&nbsp;</a></span>fft_radix_5_first_stage_axis_0()</h2>
3058
3059<div class="memitem">
3060<div class="memproto">
3061 <table class="memname">
3062 <tr>
3063 <td class="memname">kernel void fft_radix_5_first_stage_axis_0 </td>
3064 <td>(</td>
3065 <td class="paramtype">__global uchar *&#160;</td>
3066 <td class="paramname"><em>input_ptr</em>, </td>
3067 </tr>
3068 <tr>
3069 <td class="paramkey"></td>
3070 <td></td>
3071 <td class="paramtype">uint&#160;</td>
3072 <td class="paramname"><em>input_stride_x</em>, </td>
3073 </tr>
3074 <tr>
3075 <td class="paramkey"></td>
3076 <td></td>
3077 <td class="paramtype">uint&#160;</td>
3078 <td class="paramname"><em>input_step_x</em>, </td>
3079 </tr>
3080 <tr>
3081 <td class="paramkey"></td>
3082 <td></td>
3083 <td class="paramtype">uint&#160;</td>
3084 <td class="paramname"><em>input_stride_y</em>, </td>
3085 </tr>
3086 <tr>
3087 <td class="paramkey"></td>
3088 <td></td>
3089 <td class="paramtype">uint&#160;</td>
3090 <td class="paramname"><em>input_step_y</em>, </td>
3091 </tr>
3092 <tr>
3093 <td class="paramkey"></td>
3094 <td></td>
3095 <td class="paramtype">uint&#160;</td>
3096 <td class="paramname"><em>input_stride_z</em>, </td>
3097 </tr>
3098 <tr>
3099 <td class="paramkey"></td>
3100 <td></td>
3101 <td class="paramtype">uint&#160;</td>
3102 <td class="paramname"><em>input_step_z</em>, </td>
3103 </tr>
3104 <tr>
3105 <td class="paramkey"></td>
3106 <td></td>
3107 <td class="paramtype">uint&#160;</td>
3108 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
3109 </tr>
3110 <tr>
3111 <td class="paramkey"></td>
3112 <td></td>
3113 <td class="paramtype">__global uchar *&#160;</td>
3114 <td class="paramname"><em>output_ptr</em>, </td>
3115 </tr>
3116 <tr>
3117 <td class="paramkey"></td>
3118 <td></td>
3119 <td class="paramtype">uint&#160;</td>
3120 <td class="paramname"><em>output_stride_x</em>, </td>
3121 </tr>
3122 <tr>
3123 <td class="paramkey"></td>
3124 <td></td>
3125 <td class="paramtype">uint&#160;</td>
3126 <td class="paramname"><em>output_step_x</em>, </td>
3127 </tr>
3128 <tr>
3129 <td class="paramkey"></td>
3130 <td></td>
3131 <td class="paramtype">uint&#160;</td>
3132 <td class="paramname"><em>output_stride_y</em>, </td>
3133 </tr>
3134 <tr>
3135 <td class="paramkey"></td>
3136 <td></td>
3137 <td class="paramtype">uint&#160;</td>
3138 <td class="paramname"><em>output_step_y</em>, </td>
3139 </tr>
3140 <tr>
3141 <td class="paramkey"></td>
3142 <td></td>
3143 <td class="paramtype">uint&#160;</td>
3144 <td class="paramname"><em>output_stride_z</em>, </td>
3145 </tr>
3146 <tr>
3147 <td class="paramkey"></td>
3148 <td></td>
3149 <td class="paramtype">uint&#160;</td>
3150 <td class="paramname"><em>output_step_z</em>, </td>
3151 </tr>
3152 <tr>
3153 <td class="paramkey"></td>
3154 <td></td>
3155 <td class="paramtype">uint&#160;</td>
3156 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
3157 </tr>
3158 <tr>
3159 <td></td>
3160 <td>)</td>
3161 <td></td><td></td>
3162 </tr>
3163 </table>
3164</div><div class="memdoc">
3165
3166<p>Computes the first stage of a radix-5 DFT on axis 0. </p>
3167<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
3168<dl class="params"><dt>Parameters</dt><dd>
3169 <table class="params">
3170 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
3171 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
3172 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
3173 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
3174 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
3175 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
3176 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
3177 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
3178 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
3179 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
3180 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
3181 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
3182 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
3183 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
3184 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
3185 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
3186 </table>
3187 </dd>
3188</dl>
3189
3190<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00530">530</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00003191<div class="fragment"><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;{</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(output);</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></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="comment">// Load five complex input values</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; float8 data0 = vload8(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; float2 data1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 4, 0, 0));</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="comment">// Compute DFT N = 5</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <a class="code" href="fft_8cl.xhtml#a565f17c6fe3e9462057bb523e0127280">DFT_5</a>(data0.s01, data0.s23, data0.s45, data0.s67, data1.s01);</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="comment">// Store five complex output values</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; vstore8(data0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; vstore2(data1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 4, 0, 0));</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_a565f17c6fe3e9462057bb523e0127280"><div class="ttname"><a href="fft_8cl.xhtml#a565f17c6fe3e9462057bb523e0127280">DFT_5</a></div><div class="ttdeci">#define DFT_5(c0, c1, c2, c3, c4)</div><div class="ttdoc">Computes radix-5 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00109">fft.cl:109</a></div></div>
3192<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
3193<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
3194<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a31c8c760f08fb1a331b16b7c204321dc"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">helpers.h:326</a></div></div>
3195<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
3196<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003197</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00003198<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00109">DFT_5</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01003199
3200</div>
3201</div>
3202<a id="a6f8673fc7472554bb672ef796f6b91b7"></a>
3203<h2 class="memtitle"><span class="permalink"><a href="#a6f8673fc7472554bb672ef796f6b91b7">&#9670;&nbsp;</a></span>fft_radix_5_first_stage_axis_1()</h2>
3204
3205<div class="memitem">
3206<div class="memproto">
3207 <table class="memname">
3208 <tr>
3209 <td class="memname">kernel void fft_radix_5_first_stage_axis_1 </td>
3210 <td>(</td>
3211 <td class="paramtype">__global uchar *&#160;</td>
3212 <td class="paramname"><em>input_ptr</em>, </td>
3213 </tr>
3214 <tr>
3215 <td class="paramkey"></td>
3216 <td></td>
3217 <td class="paramtype">uint&#160;</td>
3218 <td class="paramname"><em>input_stride_x</em>, </td>
3219 </tr>
3220 <tr>
3221 <td class="paramkey"></td>
3222 <td></td>
3223 <td class="paramtype">uint&#160;</td>
3224 <td class="paramname"><em>input_step_x</em>, </td>
3225 </tr>
3226 <tr>
3227 <td class="paramkey"></td>
3228 <td></td>
3229 <td class="paramtype">uint&#160;</td>
3230 <td class="paramname"><em>input_stride_y</em>, </td>
3231 </tr>
3232 <tr>
3233 <td class="paramkey"></td>
3234 <td></td>
3235 <td class="paramtype">uint&#160;</td>
3236 <td class="paramname"><em>input_step_y</em>, </td>
3237 </tr>
3238 <tr>
3239 <td class="paramkey"></td>
3240 <td></td>
3241 <td class="paramtype">uint&#160;</td>
3242 <td class="paramname"><em>input_stride_z</em>, </td>
3243 </tr>
3244 <tr>
3245 <td class="paramkey"></td>
3246 <td></td>
3247 <td class="paramtype">uint&#160;</td>
3248 <td class="paramname"><em>input_step_z</em>, </td>
3249 </tr>
3250 <tr>
3251 <td class="paramkey"></td>
3252 <td></td>
3253 <td class="paramtype">uint&#160;</td>
3254 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
3255 </tr>
3256 <tr>
3257 <td class="paramkey"></td>
3258 <td></td>
3259 <td class="paramtype">__global uchar *&#160;</td>
3260 <td class="paramname"><em>output_ptr</em>, </td>
3261 </tr>
3262 <tr>
3263 <td class="paramkey"></td>
3264 <td></td>
3265 <td class="paramtype">uint&#160;</td>
3266 <td class="paramname"><em>output_stride_x</em>, </td>
3267 </tr>
3268 <tr>
3269 <td class="paramkey"></td>
3270 <td></td>
3271 <td class="paramtype">uint&#160;</td>
3272 <td class="paramname"><em>output_step_x</em>, </td>
3273 </tr>
3274 <tr>
3275 <td class="paramkey"></td>
3276 <td></td>
3277 <td class="paramtype">uint&#160;</td>
3278 <td class="paramname"><em>output_stride_y</em>, </td>
3279 </tr>
3280 <tr>
3281 <td class="paramkey"></td>
3282 <td></td>
3283 <td class="paramtype">uint&#160;</td>
3284 <td class="paramname"><em>output_step_y</em>, </td>
3285 </tr>
3286 <tr>
3287 <td class="paramkey"></td>
3288 <td></td>
3289 <td class="paramtype">uint&#160;</td>
3290 <td class="paramname"><em>output_stride_z</em>, </td>
3291 </tr>
3292 <tr>
3293 <td class="paramkey"></td>
3294 <td></td>
3295 <td class="paramtype">uint&#160;</td>
3296 <td class="paramname"><em>output_step_z</em>, </td>
3297 </tr>
3298 <tr>
3299 <td class="paramkey"></td>
3300 <td></td>
3301 <td class="paramtype">uint&#160;</td>
3302 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
3303 </tr>
3304 <tr>
3305 <td></td>
3306 <td>)</td>
3307 <td></td><td></td>
3308 </tr>
3309 </table>
3310</div><div class="memdoc">
3311
3312<p>Computes the first stage of a radix-5 DFT on axis 1. </p>
3313<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
3314<dl class="params"><dt>Parameters</dt><dd>
3315 <table class="params">
3316 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
3317 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
3318 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
3319 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
3320 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
3321 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
3322 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
3323 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
3324 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
3325 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
3326 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
3327 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
3328 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
3329 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
3330 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
3331 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
3332 </table>
3333 </dd>
3334</dl>
3335
3336<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00579">579</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00003337<div class="fragment"><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;{</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(output);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="comment">// Load five complex input values</span></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; float2 data0 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; float2 data1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 1, 0));</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; float2 data2 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 2, 0));</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; float2 data3 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 3, 0));</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; float2 data4 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 4, 0));</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="comment">// Compute DFT N = 5</span></div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <a class="code" href="fft_8cl.xhtml#a565f17c6fe3e9462057bb523e0127280">DFT_5</a>(data0, data1, data2, data3, data4);</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="comment">// Store five complex output values</span></div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; vstore2(data0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; vstore2(data1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 1, 0));</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; vstore2(data2, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 2, 0));</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; vstore2(data3, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 3, 0));</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; vstore2(data4, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 4, 0));</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_a565f17c6fe3e9462057bb523e0127280"><div class="ttname"><a href="fft_8cl.xhtml#a565f17c6fe3e9462057bb523e0127280">DFT_5</a></div><div class="ttdeci">#define DFT_5(c0, c1, c2, c3, c4)</div><div class="ttdoc">Computes radix-5 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00109">fft.cl:109</a></div></div>
3338<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
3339<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
3340<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a31c8c760f08fb1a331b16b7c204321dc"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">helpers.h:326</a></div></div>
3341<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
3342<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003343</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00003344<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00109">DFT_5</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01003345
3346</div>
3347</div>
3348<a id="ab6b1ce916618012474a0fa938fa69c6c"></a>
3349<h2 class="memtitle"><span class="permalink"><a href="#ab6b1ce916618012474a0fa938fa69c6c">&#9670;&nbsp;</a></span>fft_radix_7_axis_0()</h2>
3350
3351<div class="memitem">
3352<div class="memproto">
3353 <table class="memname">
3354 <tr>
3355 <td class="memname">kernel void fft_radix_7_axis_0 </td>
3356 <td>(</td>
3357 <td class="paramtype">__global uchar *&#160;</td>
3358 <td class="paramname"><em>input_ptr</em>, </td>
3359 </tr>
3360 <tr>
3361 <td class="paramkey"></td>
3362 <td></td>
3363 <td class="paramtype">uint&#160;</td>
3364 <td class="paramname"><em>input_stride_x</em>, </td>
3365 </tr>
3366 <tr>
3367 <td class="paramkey"></td>
3368 <td></td>
3369 <td class="paramtype">uint&#160;</td>
3370 <td class="paramname"><em>input_step_x</em>, </td>
3371 </tr>
3372 <tr>
3373 <td class="paramkey"></td>
3374 <td></td>
3375 <td class="paramtype">uint&#160;</td>
3376 <td class="paramname"><em>input_stride_y</em>, </td>
3377 </tr>
3378 <tr>
3379 <td class="paramkey"></td>
3380 <td></td>
3381 <td class="paramtype">uint&#160;</td>
3382 <td class="paramname"><em>input_step_y</em>, </td>
3383 </tr>
3384 <tr>
3385 <td class="paramkey"></td>
3386 <td></td>
3387 <td class="paramtype">uint&#160;</td>
3388 <td class="paramname"><em>input_stride_z</em>, </td>
3389 </tr>
3390 <tr>
3391 <td class="paramkey"></td>
3392 <td></td>
3393 <td class="paramtype">uint&#160;</td>
3394 <td class="paramname"><em>input_step_z</em>, </td>
3395 </tr>
3396 <tr>
3397 <td class="paramkey"></td>
3398 <td></td>
3399 <td class="paramtype">uint&#160;</td>
3400 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
3401 </tr>
3402 <tr>
3403 <td class="paramkey"></td>
3404 <td></td>
3405 <td class="paramtype">__global uchar *&#160;</td>
3406 <td class="paramname"><em>output_ptr</em>, </td>
3407 </tr>
3408 <tr>
3409 <td class="paramkey"></td>
3410 <td></td>
3411 <td class="paramtype">uint&#160;</td>
3412 <td class="paramname"><em>output_stride_x</em>, </td>
3413 </tr>
3414 <tr>
3415 <td class="paramkey"></td>
3416 <td></td>
3417 <td class="paramtype">uint&#160;</td>
3418 <td class="paramname"><em>output_step_x</em>, </td>
3419 </tr>
3420 <tr>
3421 <td class="paramkey"></td>
3422 <td></td>
3423 <td class="paramtype">uint&#160;</td>
3424 <td class="paramname"><em>output_stride_y</em>, </td>
3425 </tr>
3426 <tr>
3427 <td class="paramkey"></td>
3428 <td></td>
3429 <td class="paramtype">uint&#160;</td>
3430 <td class="paramname"><em>output_step_y</em>, </td>
3431 </tr>
3432 <tr>
3433 <td class="paramkey"></td>
3434 <td></td>
3435 <td class="paramtype">uint&#160;</td>
3436 <td class="paramname"><em>output_stride_z</em>, </td>
3437 </tr>
3438 <tr>
3439 <td class="paramkey"></td>
3440 <td></td>
3441 <td class="paramtype">uint&#160;</td>
3442 <td class="paramname"><em>output_step_z</em>, </td>
3443 </tr>
3444 <tr>
3445 <td class="paramkey"></td>
3446 <td></td>
3447 <td class="paramtype">uint&#160;</td>
3448 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
3449 </tr>
3450 <tr>
3451 <td class="paramkey"></td>
3452 <td></td>
3453 <td class="paramtype">uint&#160;</td>
3454 <td class="paramname"><em>Nx</em>, </td>
3455 </tr>
3456 <tr>
3457 <td class="paramkey"></td>
3458 <td></td>
3459 <td class="paramtype">uint&#160;</td>
3460 <td class="paramname"><em>Ni</em>, </td>
3461 </tr>
3462 <tr>
3463 <td class="paramkey"></td>
3464 <td></td>
3465 <td class="paramtype">float&#160;</td>
3466 <td class="paramname"><em>exp_const</em>&#160;</td>
3467 </tr>
3468 <tr>
3469 <td></td>
3470 <td>)</td>
3471 <td></td><td></td>
3472 </tr>
3473 </table>
3474</div><div class="memdoc">
3475
3476<p>Computes a stage of a radix-7 FFT on axis 0. </p>
3477<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
3478<dl class="params"><dt>Parameters</dt><dd>
3479 <table class="params">
3480 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
3481 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
3482 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
3483 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
3484 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
3485 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
3486 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
3487 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
3488 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
3489 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
3490 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
3491 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
3492 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
3493 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
3494 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
3495 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
3496 <tr><td class="paramdir">[in]</td><td class="paramname">Nx</td><td>The butterfly span. Products of radix order of previous radix's stage </td></tr>
3497 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
3498 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
3499 </table>
3500 </dd>
3501</dl>
3502
3503<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l01451">1451</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00003504<div class="fragment"><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;{</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; <span class="comment">// Each work-item computes a single radix-7</span></div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; uint kx = get_global_id(0);</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; <span class="comment">// Compute nx</span></div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; uint nx = kx % Nx;</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; <span class="comment">// Compute n index</span></div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; uint n = nx + (kx / Nx) * Ni;</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr += n * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_x + get_global_id(1) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_y + get_global_id(2) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_z;</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(output);</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> += n * output.<a class="code" href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">stride_x</a> + get_global_id(1) * output.<a class="code" href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">stride_y</a> + get_global_id(2) * output.<a class="code" href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">stride_z</a>;</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; <span class="comment">// Load seven complex input values</span></div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; float2 c0 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; float2 c1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, Nx, 0, 0));</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; float2 c2 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 2 * Nx, 0, 0));</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; float2 c3 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 3 * Nx, 0, 0));</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160; float2 c4 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 4 * Nx, 0, 0));</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; float2 c5 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 5 * Nx, 0, 0));</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; float2 c6 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 6 * Nx, 0, 0));</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; <span class="comment">// Compute phi</span></div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; <span class="keywordtype">float</span> phi = (float)nx * exp_const;</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; <span class="comment">// Multiply by twiddle factor</span></div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(phi, c1);</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(2 * phi, c2);</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(3 * phi, c3);</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(4 * phi, c4);</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(5 * phi, c5);</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(6 * phi, c6);</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; <span class="comment">// Compute DFT N = 7</span></div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; <a class="code" href="fft_8cl.xhtml#ad04a4028658f997aaca067742c2e8a49">DFT_7</a>(c0, c1, c2, c3, c4, c5, c6);</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160; <span class="comment">// Store seven complex output values</span></div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160; vstore2(c0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; vstore2(c1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, Nx, 0, 0));</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; vstore2(c2, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 2 * Nx, 0, 0));</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; vstore2(c3, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 3 * Nx, 0, 0));</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; vstore2(c4, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 4 * Nx, 0, 0));</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; vstore2(c5, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 5 * Nx, 0, 0));</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; vstore2(c6, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 6 * Nx, 0, 0));</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_ad4dcc4a8b94f263cd19c59fdc2cec3d2"><div class="ttname"><a href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a></div><div class="ttdeci">#define TWIDDLE_FACTOR_MULTIPLICATION(phi, input)</div><div class="ttdoc">Calculates and applies the twiddle factor to a given input.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00031">fft.cl:31</a></div></div>
3505<div class="ttc" id="struct_tensor3_d_xhtml_ad5ff7a2b2bd0eec50fe09c254b127d1c"><div class="ttname"><a href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">Tensor3D::stride_z</a></div><div class="ttdeci">int stride_z</div><div class="ttdoc">Stride of the image in Z dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">helpers.h:364</a></div></div>
3506<div class="ttc" id="struct_tensor3_d_xhtml_ae01febbfd0689ef709f3ff6fdd2abc7e"><div class="ttname"><a href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">Tensor3D::stride_x</a></div><div class="ttdeci">int stride_x</div><div class="ttdoc">Stride of the image in X dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">helpers.h:362</a></div></div>
3507<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003508<div class="ttc" id="fft_8cl_xhtml_ad04a4028658f997aaca067742c2e8a49"><div class="ttname"><a href="fft_8cl.xhtml#ad04a4028658f997aaca067742c2e8a49">DFT_7</a></div><div class="ttdeci">#define DFT_7(c0, c1, c2, c3, c4, c5, c6)</div><div class="ttdoc">Computes radix-7 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00142">fft.cl:142</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +00003509<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
3510<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a79e8e562daa6599317d2d1cd86ef1bf2"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT_NO_STEP(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">helpers.h:330</a></div></div>
3511<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
3512<div class="ttc" id="struct_tensor3_d_xhtml_a4f0b90c9ecd6e57ceb3f37332fefe8f1"><div class="ttname"><a href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">Tensor3D::stride_y</a></div><div class="ttdeci">int stride_y</div><div class="ttdoc">Stride of the image in Y dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">helpers.h:363</a></div></div>
3513<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003514</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00003515<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00142">DFT_7</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01003516
3517</div>
3518</div>
3519<a id="a76f9319802469601e05d6624e9d8d67c"></a>
3520<h2 class="memtitle"><span class="permalink"><a href="#a76f9319802469601e05d6624e9d8d67c">&#9670;&nbsp;</a></span>fft_radix_7_axis_1()</h2>
3521
3522<div class="memitem">
3523<div class="memproto">
3524 <table class="memname">
3525 <tr>
3526 <td class="memname">kernel void fft_radix_7_axis_1 </td>
3527 <td>(</td>
3528 <td class="paramtype">__global uchar *&#160;</td>
3529 <td class="paramname"><em>input_ptr</em>, </td>
3530 </tr>
3531 <tr>
3532 <td class="paramkey"></td>
3533 <td></td>
3534 <td class="paramtype">uint&#160;</td>
3535 <td class="paramname"><em>input_stride_x</em>, </td>
3536 </tr>
3537 <tr>
3538 <td class="paramkey"></td>
3539 <td></td>
3540 <td class="paramtype">uint&#160;</td>
3541 <td class="paramname"><em>input_step_x</em>, </td>
3542 </tr>
3543 <tr>
3544 <td class="paramkey"></td>
3545 <td></td>
3546 <td class="paramtype">uint&#160;</td>
3547 <td class="paramname"><em>input_stride_y</em>, </td>
3548 </tr>
3549 <tr>
3550 <td class="paramkey"></td>
3551 <td></td>
3552 <td class="paramtype">uint&#160;</td>
3553 <td class="paramname"><em>input_step_y</em>, </td>
3554 </tr>
3555 <tr>
3556 <td class="paramkey"></td>
3557 <td></td>
3558 <td class="paramtype">uint&#160;</td>
3559 <td class="paramname"><em>input_stride_z</em>, </td>
3560 </tr>
3561 <tr>
3562 <td class="paramkey"></td>
3563 <td></td>
3564 <td class="paramtype">uint&#160;</td>
3565 <td class="paramname"><em>input_step_z</em>, </td>
3566 </tr>
3567 <tr>
3568 <td class="paramkey"></td>
3569 <td></td>
3570 <td class="paramtype">uint&#160;</td>
3571 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
3572 </tr>
3573 <tr>
3574 <td class="paramkey"></td>
3575 <td></td>
3576 <td class="paramtype">__global uchar *&#160;</td>
3577 <td class="paramname"><em>output_ptr</em>, </td>
3578 </tr>
3579 <tr>
3580 <td class="paramkey"></td>
3581 <td></td>
3582 <td class="paramtype">uint&#160;</td>
3583 <td class="paramname"><em>output_stride_x</em>, </td>
3584 </tr>
3585 <tr>
3586 <td class="paramkey"></td>
3587 <td></td>
3588 <td class="paramtype">uint&#160;</td>
3589 <td class="paramname"><em>output_step_x</em>, </td>
3590 </tr>
3591 <tr>
3592 <td class="paramkey"></td>
3593 <td></td>
3594 <td class="paramtype">uint&#160;</td>
3595 <td class="paramname"><em>output_stride_y</em>, </td>
3596 </tr>
3597 <tr>
3598 <td class="paramkey"></td>
3599 <td></td>
3600 <td class="paramtype">uint&#160;</td>
3601 <td class="paramname"><em>output_step_y</em>, </td>
3602 </tr>
3603 <tr>
3604 <td class="paramkey"></td>
3605 <td></td>
3606 <td class="paramtype">uint&#160;</td>
3607 <td class="paramname"><em>output_stride_z</em>, </td>
3608 </tr>
3609 <tr>
3610 <td class="paramkey"></td>
3611 <td></td>
3612 <td class="paramtype">uint&#160;</td>
3613 <td class="paramname"><em>output_step_z</em>, </td>
3614 </tr>
3615 <tr>
3616 <td class="paramkey"></td>
3617 <td></td>
3618 <td class="paramtype">uint&#160;</td>
3619 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
3620 </tr>
3621 <tr>
3622 <td class="paramkey"></td>
3623 <td></td>
3624 <td class="paramtype">uint&#160;</td>
3625 <td class="paramname"><em>Nx</em>, </td>
3626 </tr>
3627 <tr>
3628 <td class="paramkey"></td>
3629 <td></td>
3630 <td class="paramtype">uint&#160;</td>
3631 <td class="paramname"><em>Ni</em>, </td>
3632 </tr>
3633 <tr>
3634 <td class="paramkey"></td>
3635 <td></td>
3636 <td class="paramtype">float&#160;</td>
3637 <td class="paramname"><em>exp_const</em>&#160;</td>
3638 </tr>
3639 <tr>
3640 <td></td>
3641 <td>)</td>
3642 <td></td><td></td>
3643 </tr>
3644 </table>
3645</div><div class="memdoc">
3646
3647<p>Computes a stage of a radix-7 FFT on axis 1. </p>
3648<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
3649<dl class="params"><dt>Parameters</dt><dd>
3650 <table class="params">
3651 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
3652 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
3653 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
3654 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
3655 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
3656 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
3657 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
3658 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
3659 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
3660 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
3661 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
3662 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
3663 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
3664 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
3665 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
3666 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
3667 <tr><td class="paramdir">[in]</td><td class="paramname">Nx</td><td>The butterfly span. Products of radix order of previous radix's stage </td></tr>
3668 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
3669 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
3670 </table>
3671 </dd>
3672</dl>
3673
3674<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l01536">1536</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00003675<div class="fragment"><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;{</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; <span class="comment">// Each work-item computes a single radix-7</span></div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; uint kx = get_global_id(1);</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; <span class="comment">// Compute nx</span></div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; uint nx = kx % Nx;</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160;</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; <span class="comment">// Compute n index</span></div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; uint n = nx + (kx / Nx) * Ni;</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr += get_global_id(0) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_x + n * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_y + get_global_id(2) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_z;</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(output);</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> += get_global_id(0) * output.<a class="code" href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">stride_x</a> + n * output.<a class="code" href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">stride_y</a> + get_global_id(2) * output.<a class="code" href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">stride_z</a>;</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; <span class="comment">// Load seven complex input values</span></div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; float2 c0 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; float2 c1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, Nx, 0));</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; float2 c2 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 2 * Nx, 0));</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; float2 c3 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 3 * Nx, 0));</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; float2 c4 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 4 * Nx, 0));</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; float2 c5 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 5 * Nx, 0));</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; float2 c6 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 6 * Nx, 0));</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; <span class="comment">// Compute phi</span></div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; <span class="keywordtype">float</span> phi = (float)nx * exp_const;</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; <span class="comment">// Multiply by twiddle factor</span></div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(phi, c1);</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(2 * phi, c2);</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(3 * phi, c3);</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(4 * phi, c4);</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(5 * phi, c5);</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(6 * phi, c6);</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; <span class="comment">// Compute DFT N = 7</span></div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; <a class="code" href="fft_8cl.xhtml#ad04a4028658f997aaca067742c2e8a49">DFT_7</a>(c0, c1, c2, c3, c4, c5, c6);</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; <span class="comment">// Store seven complex output values</span></div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; vstore2(c0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; vstore2(c1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, Nx, 0));</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; vstore2(c2, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 2 * Nx, 0));</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; vstore2(c3, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 3 * Nx, 0));</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; vstore2(c4, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 4 * Nx, 0));</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; vstore2(c5, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 5 * Nx, 0));</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; vstore2(c6, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 6 * Nx, 0));</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_ad4dcc4a8b94f263cd19c59fdc2cec3d2"><div class="ttname"><a href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a></div><div class="ttdeci">#define TWIDDLE_FACTOR_MULTIPLICATION(phi, input)</div><div class="ttdoc">Calculates and applies the twiddle factor to a given input.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00031">fft.cl:31</a></div></div>
3676<div class="ttc" id="struct_tensor3_d_xhtml_ad5ff7a2b2bd0eec50fe09c254b127d1c"><div class="ttname"><a href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">Tensor3D::stride_z</a></div><div class="ttdeci">int stride_z</div><div class="ttdoc">Stride of the image in Z dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">helpers.h:364</a></div></div>
3677<div class="ttc" id="struct_tensor3_d_xhtml_ae01febbfd0689ef709f3ff6fdd2abc7e"><div class="ttname"><a href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">Tensor3D::stride_x</a></div><div class="ttdeci">int stride_x</div><div class="ttdoc">Stride of the image in X dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">helpers.h:362</a></div></div>
3678<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003679<div class="ttc" id="fft_8cl_xhtml_ad04a4028658f997aaca067742c2e8a49"><div class="ttname"><a href="fft_8cl.xhtml#ad04a4028658f997aaca067742c2e8a49">DFT_7</a></div><div class="ttdeci">#define DFT_7(c0, c1, c2, c3, c4, c5, c6)</div><div class="ttdoc">Computes radix-7 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00142">fft.cl:142</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +00003680<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
3681<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a79e8e562daa6599317d2d1cd86ef1bf2"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT_NO_STEP(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">helpers.h:330</a></div></div>
3682<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
3683<div class="ttc" id="struct_tensor3_d_xhtml_a4f0b90c9ecd6e57ceb3f37332fefe8f1"><div class="ttname"><a href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">Tensor3D::stride_y</a></div><div class="ttdeci">int stride_y</div><div class="ttdoc">Stride of the image in Y dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">helpers.h:363</a></div></div>
3684<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003685</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00003686<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00142">DFT_7</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01003687
3688</div>
3689</div>
3690<a id="aba8f7b960aa49b876ac266447a78c416"></a>
3691<h2 class="memtitle"><span class="permalink"><a href="#aba8f7b960aa49b876ac266447a78c416">&#9670;&nbsp;</a></span>fft_radix_7_first_stage_axis_0()</h2>
3692
3693<div class="memitem">
3694<div class="memproto">
3695 <table class="memname">
3696 <tr>
3697 <td class="memname">kernel void fft_radix_7_first_stage_axis_0 </td>
3698 <td>(</td>
3699 <td class="paramtype">__global uchar *&#160;</td>
3700 <td class="paramname"><em>input_ptr</em>, </td>
3701 </tr>
3702 <tr>
3703 <td class="paramkey"></td>
3704 <td></td>
3705 <td class="paramtype">uint&#160;</td>
3706 <td class="paramname"><em>input_stride_x</em>, </td>
3707 </tr>
3708 <tr>
3709 <td class="paramkey"></td>
3710 <td></td>
3711 <td class="paramtype">uint&#160;</td>
3712 <td class="paramname"><em>input_step_x</em>, </td>
3713 </tr>
3714 <tr>
3715 <td class="paramkey"></td>
3716 <td></td>
3717 <td class="paramtype">uint&#160;</td>
3718 <td class="paramname"><em>input_stride_y</em>, </td>
3719 </tr>
3720 <tr>
3721 <td class="paramkey"></td>
3722 <td></td>
3723 <td class="paramtype">uint&#160;</td>
3724 <td class="paramname"><em>input_step_y</em>, </td>
3725 </tr>
3726 <tr>
3727 <td class="paramkey"></td>
3728 <td></td>
3729 <td class="paramtype">uint&#160;</td>
3730 <td class="paramname"><em>input_stride_z</em>, </td>
3731 </tr>
3732 <tr>
3733 <td class="paramkey"></td>
3734 <td></td>
3735 <td class="paramtype">uint&#160;</td>
3736 <td class="paramname"><em>input_step_z</em>, </td>
3737 </tr>
3738 <tr>
3739 <td class="paramkey"></td>
3740 <td></td>
3741 <td class="paramtype">uint&#160;</td>
3742 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
3743 </tr>
3744 <tr>
3745 <td class="paramkey"></td>
3746 <td></td>
3747 <td class="paramtype">__global uchar *&#160;</td>
3748 <td class="paramname"><em>output_ptr</em>, </td>
3749 </tr>
3750 <tr>
3751 <td class="paramkey"></td>
3752 <td></td>
3753 <td class="paramtype">uint&#160;</td>
3754 <td class="paramname"><em>output_stride_x</em>, </td>
3755 </tr>
3756 <tr>
3757 <td class="paramkey"></td>
3758 <td></td>
3759 <td class="paramtype">uint&#160;</td>
3760 <td class="paramname"><em>output_step_x</em>, </td>
3761 </tr>
3762 <tr>
3763 <td class="paramkey"></td>
3764 <td></td>
3765 <td class="paramtype">uint&#160;</td>
3766 <td class="paramname"><em>output_stride_y</em>, </td>
3767 </tr>
3768 <tr>
3769 <td class="paramkey"></td>
3770 <td></td>
3771 <td class="paramtype">uint&#160;</td>
3772 <td class="paramname"><em>output_step_y</em>, </td>
3773 </tr>
3774 <tr>
3775 <td class="paramkey"></td>
3776 <td></td>
3777 <td class="paramtype">uint&#160;</td>
3778 <td class="paramname"><em>output_stride_z</em>, </td>
3779 </tr>
3780 <tr>
3781 <td class="paramkey"></td>
3782 <td></td>
3783 <td class="paramtype">uint&#160;</td>
3784 <td class="paramname"><em>output_step_z</em>, </td>
3785 </tr>
3786 <tr>
3787 <td class="paramkey"></td>
3788 <td></td>
3789 <td class="paramtype">uint&#160;</td>
3790 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
3791 </tr>
3792 <tr>
3793 <td></td>
3794 <td>)</td>
3795 <td></td><td></td>
3796 </tr>
3797 </table>
3798</div><div class="memdoc">
3799
3800<p>Computes the first stage of a radix-7 DFT on axis 0. </p>
3801<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
3802<dl class="params"><dt>Parameters</dt><dd>
3803 <table class="params">
3804 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
3805 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
3806 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
3807 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
3808 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
3809 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
3810 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
3811 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
3812 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
3813 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
3814 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
3815 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
3816 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
3817 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
3818 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
3819 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
3820 </table>
3821 </dd>
3822</dl>
3823
3824<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00634">634</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00003825<div class="fragment"><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;{</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(output);</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="comment">// Load seven complex input values</span></div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; float8 data0 = vload8(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; float4 data1 = vload4(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 4, 0, 0));</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; float2 data2 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 6, 0, 0));</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="comment">// Compute DFT N = 7</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <a class="code" href="fft_8cl.xhtml#ad04a4028658f997aaca067742c2e8a49">DFT_7</a>(data0.s01, data0.s23, data0.s45, data0.s67, data1.s01, data1.s23, data2.s01);</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="comment">// Store seven complex output values</span></div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; vstore8(data0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; vstore4(data1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 4, 0, 0));</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; vstore2(data2, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 6, 0, 0));</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160;}</div><div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003826<div class="ttc" id="fft_8cl_xhtml_ad04a4028658f997aaca067742c2e8a49"><div class="ttname"><a href="fft_8cl.xhtml#ad04a4028658f997aaca067742c2e8a49">DFT_7</a></div><div class="ttdeci">#define DFT_7(c0, c1, c2, c3, c4, c5, c6)</div><div class="ttdoc">Computes radix-7 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00142">fft.cl:142</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +00003827<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
3828<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a31c8c760f08fb1a331b16b7c204321dc"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">helpers.h:326</a></div></div>
3829<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
3830<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003831</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00003832<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00142">DFT_7</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01003833
3834</div>
3835</div>
3836<a id="a3f65de85962b99e35c4bd9abcbc7e660"></a>
3837<h2 class="memtitle"><span class="permalink"><a href="#a3f65de85962b99e35c4bd9abcbc7e660">&#9670;&nbsp;</a></span>fft_radix_7_first_stage_axis_1()</h2>
3838
3839<div class="memitem">
3840<div class="memproto">
3841 <table class="memname">
3842 <tr>
3843 <td class="memname">kernel void fft_radix_7_first_stage_axis_1 </td>
3844 <td>(</td>
3845 <td class="paramtype">__global uchar *&#160;</td>
3846 <td class="paramname"><em>input_ptr</em>, </td>
3847 </tr>
3848 <tr>
3849 <td class="paramkey"></td>
3850 <td></td>
3851 <td class="paramtype">uint&#160;</td>
3852 <td class="paramname"><em>input_stride_x</em>, </td>
3853 </tr>
3854 <tr>
3855 <td class="paramkey"></td>
3856 <td></td>
3857 <td class="paramtype">uint&#160;</td>
3858 <td class="paramname"><em>input_step_x</em>, </td>
3859 </tr>
3860 <tr>
3861 <td class="paramkey"></td>
3862 <td></td>
3863 <td class="paramtype">uint&#160;</td>
3864 <td class="paramname"><em>input_stride_y</em>, </td>
3865 </tr>
3866 <tr>
3867 <td class="paramkey"></td>
3868 <td></td>
3869 <td class="paramtype">uint&#160;</td>
3870 <td class="paramname"><em>input_step_y</em>, </td>
3871 </tr>
3872 <tr>
3873 <td class="paramkey"></td>
3874 <td></td>
3875 <td class="paramtype">uint&#160;</td>
3876 <td class="paramname"><em>input_stride_z</em>, </td>
3877 </tr>
3878 <tr>
3879 <td class="paramkey"></td>
3880 <td></td>
3881 <td class="paramtype">uint&#160;</td>
3882 <td class="paramname"><em>input_step_z</em>, </td>
3883 </tr>
3884 <tr>
3885 <td class="paramkey"></td>
3886 <td></td>
3887 <td class="paramtype">uint&#160;</td>
3888 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
3889 </tr>
3890 <tr>
3891 <td class="paramkey"></td>
3892 <td></td>
3893 <td class="paramtype">__global uchar *&#160;</td>
3894 <td class="paramname"><em>output_ptr</em>, </td>
3895 </tr>
3896 <tr>
3897 <td class="paramkey"></td>
3898 <td></td>
3899 <td class="paramtype">uint&#160;</td>
3900 <td class="paramname"><em>output_stride_x</em>, </td>
3901 </tr>
3902 <tr>
3903 <td class="paramkey"></td>
3904 <td></td>
3905 <td class="paramtype">uint&#160;</td>
3906 <td class="paramname"><em>output_step_x</em>, </td>
3907 </tr>
3908 <tr>
3909 <td class="paramkey"></td>
3910 <td></td>
3911 <td class="paramtype">uint&#160;</td>
3912 <td class="paramname"><em>output_stride_y</em>, </td>
3913 </tr>
3914 <tr>
3915 <td class="paramkey"></td>
3916 <td></td>
3917 <td class="paramtype">uint&#160;</td>
3918 <td class="paramname"><em>output_step_y</em>, </td>
3919 </tr>
3920 <tr>
3921 <td class="paramkey"></td>
3922 <td></td>
3923 <td class="paramtype">uint&#160;</td>
3924 <td class="paramname"><em>output_stride_z</em>, </td>
3925 </tr>
3926 <tr>
3927 <td class="paramkey"></td>
3928 <td></td>
3929 <td class="paramtype">uint&#160;</td>
3930 <td class="paramname"><em>output_step_z</em>, </td>
3931 </tr>
3932 <tr>
3933 <td class="paramkey"></td>
3934 <td></td>
3935 <td class="paramtype">uint&#160;</td>
3936 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
3937 </tr>
3938 <tr>
3939 <td></td>
3940 <td>)</td>
3941 <td></td><td></td>
3942 </tr>
3943 </table>
3944</div><div class="memdoc">
3945
3946<p>Computes the first stage of a radix-7 DFT on axis 1. </p>
3947<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
3948<dl class="params"><dt>Parameters</dt><dd>
3949 <table class="params">
3950 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
3951 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
3952 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
3953 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
3954 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
3955 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
3956 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
3957 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
3958 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
3959 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
3960 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
3961 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
3962 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
3963 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
3964 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
3965 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
3966 </table>
3967 </dd>
3968</dl>
3969
3970<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00685">685</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00003971<div class="fragment"><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;{</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(output);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="comment">// Load seven complex input values</span></div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; float2 data0 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; float2 data1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 1, 0));</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; float2 data2 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 2, 0));</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; float2 data3 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 3, 0));</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; float2 data4 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 4, 0));</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; float2 data5 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 5, 0));</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; float2 data6 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 6, 0));</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="comment">// Compute DFT N = 7</span></div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <a class="code" href="fft_8cl.xhtml#ad04a4028658f997aaca067742c2e8a49">DFT_7</a>(data0, data1, data2, data3, data4, data5, data6);</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160;</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="comment">// Store seven complex output values</span></div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; vstore2(data0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; vstore2(data1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 1, 0));</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; vstore2(data2, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 2, 0));</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; vstore2(data3, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 3, 0));</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; vstore2(data4, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 4, 0));</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; vstore2(data5, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 5, 0));</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; vstore2(data6, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 6, 0));</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160;}</div><div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003972<div class="ttc" id="fft_8cl_xhtml_ad04a4028658f997aaca067742c2e8a49"><div class="ttname"><a href="fft_8cl.xhtml#ad04a4028658f997aaca067742c2e8a49">DFT_7</a></div><div class="ttdeci">#define DFT_7(c0, c1, c2, c3, c4, c5, c6)</div><div class="ttdoc">Computes radix-7 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00142">fft.cl:142</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +00003973<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
3974<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a31c8c760f08fb1a331b16b7c204321dc"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">helpers.h:326</a></div></div>
3975<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
3976<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003977</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00003978<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00142">DFT_7</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01003979
3980</div>
3981</div>
3982<a id="a73b5ddb25a62a1505d20c02aab7f69cd"></a>
3983<h2 class="memtitle"><span class="permalink"><a href="#a73b5ddb25a62a1505d20c02aab7f69cd">&#9670;&nbsp;</a></span>fft_radix_8_axis_0()</h2>
3984
3985<div class="memitem">
3986<div class="memproto">
3987 <table class="memname">
3988 <tr>
3989 <td class="memname">kernel void fft_radix_8_axis_0 </td>
3990 <td>(</td>
3991 <td class="paramtype">__global uchar *&#160;</td>
3992 <td class="paramname"><em>input_ptr</em>, </td>
3993 </tr>
3994 <tr>
3995 <td class="paramkey"></td>
3996 <td></td>
3997 <td class="paramtype">uint&#160;</td>
3998 <td class="paramname"><em>input_stride_x</em>, </td>
3999 </tr>
4000 <tr>
4001 <td class="paramkey"></td>
4002 <td></td>
4003 <td class="paramtype">uint&#160;</td>
4004 <td class="paramname"><em>input_step_x</em>, </td>
4005 </tr>
4006 <tr>
4007 <td class="paramkey"></td>
4008 <td></td>
4009 <td class="paramtype">uint&#160;</td>
4010 <td class="paramname"><em>input_stride_y</em>, </td>
4011 </tr>
4012 <tr>
4013 <td class="paramkey"></td>
4014 <td></td>
4015 <td class="paramtype">uint&#160;</td>
4016 <td class="paramname"><em>input_step_y</em>, </td>
4017 </tr>
4018 <tr>
4019 <td class="paramkey"></td>
4020 <td></td>
4021 <td class="paramtype">uint&#160;</td>
4022 <td class="paramname"><em>input_stride_z</em>, </td>
4023 </tr>
4024 <tr>
4025 <td class="paramkey"></td>
4026 <td></td>
4027 <td class="paramtype">uint&#160;</td>
4028 <td class="paramname"><em>input_step_z</em>, </td>
4029 </tr>
4030 <tr>
4031 <td class="paramkey"></td>
4032 <td></td>
4033 <td class="paramtype">uint&#160;</td>
4034 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
4035 </tr>
4036 <tr>
4037 <td class="paramkey"></td>
4038 <td></td>
4039 <td class="paramtype">__global uchar *&#160;</td>
4040 <td class="paramname"><em>output_ptr</em>, </td>
4041 </tr>
4042 <tr>
4043 <td class="paramkey"></td>
4044 <td></td>
4045 <td class="paramtype">uint&#160;</td>
4046 <td class="paramname"><em>output_stride_x</em>, </td>
4047 </tr>
4048 <tr>
4049 <td class="paramkey"></td>
4050 <td></td>
4051 <td class="paramtype">uint&#160;</td>
4052 <td class="paramname"><em>output_step_x</em>, </td>
4053 </tr>
4054 <tr>
4055 <td class="paramkey"></td>
4056 <td></td>
4057 <td class="paramtype">uint&#160;</td>
4058 <td class="paramname"><em>output_stride_y</em>, </td>
4059 </tr>
4060 <tr>
4061 <td class="paramkey"></td>
4062 <td></td>
4063 <td class="paramtype">uint&#160;</td>
4064 <td class="paramname"><em>output_step_y</em>, </td>
4065 </tr>
4066 <tr>
4067 <td class="paramkey"></td>
4068 <td></td>
4069 <td class="paramtype">uint&#160;</td>
4070 <td class="paramname"><em>output_stride_z</em>, </td>
4071 </tr>
4072 <tr>
4073 <td class="paramkey"></td>
4074 <td></td>
4075 <td class="paramtype">uint&#160;</td>
4076 <td class="paramname"><em>output_step_z</em>, </td>
4077 </tr>
4078 <tr>
4079 <td class="paramkey"></td>
4080 <td></td>
4081 <td class="paramtype">uint&#160;</td>
4082 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
4083 </tr>
4084 <tr>
4085 <td class="paramkey"></td>
4086 <td></td>
4087 <td class="paramtype">uint&#160;</td>
4088 <td class="paramname"><em>Nx</em>, </td>
4089 </tr>
4090 <tr>
4091 <td class="paramkey"></td>
4092 <td></td>
4093 <td class="paramtype">uint&#160;</td>
4094 <td class="paramname"><em>Ni</em>, </td>
4095 </tr>
4096 <tr>
4097 <td class="paramkey"></td>
4098 <td></td>
4099 <td class="paramtype">float&#160;</td>
4100 <td class="paramname"><em>exp_const</em>&#160;</td>
4101 </tr>
4102 <tr>
4103 <td></td>
4104 <td>)</td>
4105 <td></td><td></td>
4106 </tr>
4107 </table>
4108</div><div class="memdoc">
4109
4110<p>Computes a stage of a radix-8 FFT on axis 0. </p>
4111<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
4112<dl class="params"><dt>Parameters</dt><dd>
4113 <table class="params">
4114 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
4115 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
4116 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
4117 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
4118 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
4119 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
4120 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
4121 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
4122 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
4123 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
4124 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
4125 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
4126 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
4127 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
4128 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
4129 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
4130 <tr><td class="paramdir">[in]</td><td class="paramname">Nx</td><td>The butterfly span. Products of radix order of previous radix's stage </td></tr>
4131 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
4132 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
4133 </table>
4134 </dd>
4135</dl>
4136
4137<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l01621">1621</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00004138<div class="fragment"><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;{</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; <span class="comment">// Each work-item computes a single radix-8</span></div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; uint kx = get_global_id(0);</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; <span class="comment">// Compute nx</span></div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; uint nx = kx % Nx;</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; <span class="comment">// Compute n index</span></div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; uint n = nx + (kx / Nx) * Ni;</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr += n * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_x + get_global_id(1) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_y + get_global_id(2) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_z;</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(output);</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> += n * output.<a class="code" href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">stride_x</a> + get_global_id(1) * output.<a class="code" href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">stride_y</a> + get_global_id(2) * output.<a class="code" href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">stride_z</a>;</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; <span class="comment">// Load eight complex input values</span></div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; float2 c0 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; float2 c1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, Nx, 0, 0));</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; float2 c2 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 2 * Nx, 0, 0));</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; float2 c3 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 3 * Nx, 0, 0));</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; float2 c4 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 4 * Nx, 0, 0));</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; float2 c5 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 5 * Nx, 0, 0));</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; float2 c6 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 6 * Nx, 0, 0));</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; float2 c7 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 7 * Nx, 0, 0));</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; <span class="comment">// Compute phi</span></div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; <span class="keywordtype">float</span> phi = (float)nx * exp_const;</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160;</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; <span class="comment">// Multiply by twiddle factor</span></div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(phi, c1);</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(2 * phi, c2);</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(3 * phi, c3);</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(4 * phi, c4);</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(5 * phi, c5);</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(6 * phi, c6);</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(7 * phi, c7);</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; <span class="comment">// Compute DFT N = 8</span></div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; <a class="code" href="fft_8cl.xhtml#a4c4ce3f10939dd4237d0adee00086a53">DFT_8</a>(c0, c1, c2, c3, c4, c5, c6, c7);</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160;</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; <span class="comment">// Store eight complex output values</span></div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160; vstore2(c0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; vstore2(c1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, Nx, 0, 0));</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; vstore2(c2, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 2 * Nx, 0, 0));</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; vstore2(c3, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 3 * Nx, 0, 0));</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; vstore2(c4, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 4 * Nx, 0, 0));</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; vstore2(c5, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 5 * Nx, 0, 0));</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160; vstore2(c6, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 6 * Nx, 0, 0));</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; vstore2(c7, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 7 * Nx, 0, 0));</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_ad4dcc4a8b94f263cd19c59fdc2cec3d2"><div class="ttname"><a href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a></div><div class="ttdeci">#define TWIDDLE_FACTOR_MULTIPLICATION(phi, input)</div><div class="ttdoc">Calculates and applies the twiddle factor to a given input.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00031">fft.cl:31</a></div></div>
4139<div class="ttc" id="struct_tensor3_d_xhtml_ad5ff7a2b2bd0eec50fe09c254b127d1c"><div class="ttname"><a href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">Tensor3D::stride_z</a></div><div class="ttdeci">int stride_z</div><div class="ttdoc">Stride of the image in Z dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">helpers.h:364</a></div></div>
4140<div class="ttc" id="struct_tensor3_d_xhtml_ae01febbfd0689ef709f3ff6fdd2abc7e"><div class="ttname"><a href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">Tensor3D::stride_x</a></div><div class="ttdeci">int stride_x</div><div class="ttdoc">Stride of the image in X dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">helpers.h:362</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01004141<div class="ttc" id="fft_8cl_xhtml_a4c4ce3f10939dd4237d0adee00086a53"><div class="ttname"><a href="fft_8cl.xhtml#a4c4ce3f10939dd4237d0adee00086a53">DFT_8</a></div><div class="ttdeci">#define DFT_8(c0, c1, c2, c3, c4, c5, c6, c7)</div><div class="ttdoc">Computes radix-8 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00172">fft.cl:172</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +00004142<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
4143<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
4144<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a79e8e562daa6599317d2d1cd86ef1bf2"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT_NO_STEP(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">helpers.h:330</a></div></div>
4145<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
4146<div class="ttc" id="struct_tensor3_d_xhtml_a4f0b90c9ecd6e57ceb3f37332fefe8f1"><div class="ttname"><a href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">Tensor3D::stride_y</a></div><div class="ttdeci">int stride_y</div><div class="ttdoc">Stride of the image in Y dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">helpers.h:363</a></div></div>
4147<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01004148</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00004149<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00172">DFT_8</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01004150
4151</div>
4152</div>
4153<a id="aa056502bc3783dce7428acc17ce9ee94"></a>
4154<h2 class="memtitle"><span class="permalink"><a href="#aa056502bc3783dce7428acc17ce9ee94">&#9670;&nbsp;</a></span>fft_radix_8_axis_1()</h2>
4155
4156<div class="memitem">
4157<div class="memproto">
4158 <table class="memname">
4159 <tr>
4160 <td class="memname">kernel void fft_radix_8_axis_1 </td>
4161 <td>(</td>
4162 <td class="paramtype">__global uchar *&#160;</td>
4163 <td class="paramname"><em>input_ptr</em>, </td>
4164 </tr>
4165 <tr>
4166 <td class="paramkey"></td>
4167 <td></td>
4168 <td class="paramtype">uint&#160;</td>
4169 <td class="paramname"><em>input_stride_x</em>, </td>
4170 </tr>
4171 <tr>
4172 <td class="paramkey"></td>
4173 <td></td>
4174 <td class="paramtype">uint&#160;</td>
4175 <td class="paramname"><em>input_step_x</em>, </td>
4176 </tr>
4177 <tr>
4178 <td class="paramkey"></td>
4179 <td></td>
4180 <td class="paramtype">uint&#160;</td>
4181 <td class="paramname"><em>input_stride_y</em>, </td>
4182 </tr>
4183 <tr>
4184 <td class="paramkey"></td>
4185 <td></td>
4186 <td class="paramtype">uint&#160;</td>
4187 <td class="paramname"><em>input_step_y</em>, </td>
4188 </tr>
4189 <tr>
4190 <td class="paramkey"></td>
4191 <td></td>
4192 <td class="paramtype">uint&#160;</td>
4193 <td class="paramname"><em>input_stride_z</em>, </td>
4194 </tr>
4195 <tr>
4196 <td class="paramkey"></td>
4197 <td></td>
4198 <td class="paramtype">uint&#160;</td>
4199 <td class="paramname"><em>input_step_z</em>, </td>
4200 </tr>
4201 <tr>
4202 <td class="paramkey"></td>
4203 <td></td>
4204 <td class="paramtype">uint&#160;</td>
4205 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
4206 </tr>
4207 <tr>
4208 <td class="paramkey"></td>
4209 <td></td>
4210 <td class="paramtype">__global uchar *&#160;</td>
4211 <td class="paramname"><em>output_ptr</em>, </td>
4212 </tr>
4213 <tr>
4214 <td class="paramkey"></td>
4215 <td></td>
4216 <td class="paramtype">uint&#160;</td>
4217 <td class="paramname"><em>output_stride_x</em>, </td>
4218 </tr>
4219 <tr>
4220 <td class="paramkey"></td>
4221 <td></td>
4222 <td class="paramtype">uint&#160;</td>
4223 <td class="paramname"><em>output_step_x</em>, </td>
4224 </tr>
4225 <tr>
4226 <td class="paramkey"></td>
4227 <td></td>
4228 <td class="paramtype">uint&#160;</td>
4229 <td class="paramname"><em>output_stride_y</em>, </td>
4230 </tr>
4231 <tr>
4232 <td class="paramkey"></td>
4233 <td></td>
4234 <td class="paramtype">uint&#160;</td>
4235 <td class="paramname"><em>output_step_y</em>, </td>
4236 </tr>
4237 <tr>
4238 <td class="paramkey"></td>
4239 <td></td>
4240 <td class="paramtype">uint&#160;</td>
4241 <td class="paramname"><em>output_stride_z</em>, </td>
4242 </tr>
4243 <tr>
4244 <td class="paramkey"></td>
4245 <td></td>
4246 <td class="paramtype">uint&#160;</td>
4247 <td class="paramname"><em>output_step_z</em>, </td>
4248 </tr>
4249 <tr>
4250 <td class="paramkey"></td>
4251 <td></td>
4252 <td class="paramtype">uint&#160;</td>
4253 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
4254 </tr>
4255 <tr>
4256 <td class="paramkey"></td>
4257 <td></td>
4258 <td class="paramtype">uint&#160;</td>
4259 <td class="paramname"><em>Nx</em>, </td>
4260 </tr>
4261 <tr>
4262 <td class="paramkey"></td>
4263 <td></td>
4264 <td class="paramtype">uint&#160;</td>
4265 <td class="paramname"><em>Ni</em>, </td>
4266 </tr>
4267 <tr>
4268 <td class="paramkey"></td>
4269 <td></td>
4270 <td class="paramtype">float&#160;</td>
4271 <td class="paramname"><em>exp_const</em>&#160;</td>
4272 </tr>
4273 <tr>
4274 <td></td>
4275 <td>)</td>
4276 <td></td><td></td>
4277 </tr>
4278 </table>
4279</div><div class="memdoc">
4280
4281<p>Computes a stage of a radix-8 FFT on axis 1. </p>
4282<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
4283<dl class="params"><dt>Parameters</dt><dd>
4284 <table class="params">
4285 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
4286 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
4287 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
4288 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
4289 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
4290 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
4291 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
4292 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
4293 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
4294 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
4295 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
4296 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
4297 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
4298 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
4299 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
4300 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
4301 <tr><td class="paramdir">[in]</td><td class="paramname">Nx</td><td>The butterfly span. Products of radix order of previous radix's stage </td></tr>
4302 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
4303 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
4304 </table>
4305 </dd>
4306</dl>
4307
4308<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l01709">1709</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00004309<div class="fragment"><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160;{</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; <span class="comment">// Each work-item computes a single radix-8</span></div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160; uint kx = get_global_id(1);</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160;</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; <span class="comment">// Compute nx</span></div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160; uint nx = kx % Nx;</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; <span class="comment">// Compute n index</span></div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160; uint n = nx + (kx / Nx) * Ni;</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160; <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr += get_global_id(0) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_x + n * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_y + get_global_id(2) * <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.stride_z;</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(output);</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> += get_global_id(0) * output.<a class="code" href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">stride_x</a> + n * output.<a class="code" href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">stride_y</a> + get_global_id(2) * output.<a class="code" href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">stride_z</a>;</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160;</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; <span class="comment">// Load eight complex input values</span></div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; float2 c0 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; float2 c1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, Nx, 0));</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160; float2 c2 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 2 * Nx, 0));</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; float2 c3 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 3 * Nx, 0));</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; float2 c4 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 4 * Nx, 0));</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; float2 c5 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 5 * Nx, 0));</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; float2 c6 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 6 * Nx, 0));</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; float2 c7 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 7 * Nx, 0));</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160;</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; <span class="comment">// Compute phi</span></div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160; <span class="keywordtype">float</span> phi = (float)nx * exp_const;</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160; <span class="comment">// Multiply by twiddle factor</span></div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(phi, c1);</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(2 * phi, c2);</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(3 * phi, c3);</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(4 * phi, c4);</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(5 * phi, c5);</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(6 * phi, c6);</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160; <a class="code" href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a>(7 * phi, c7);</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; <span class="comment">// Compute DFT N = 8</span></div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; <a class="code" href="fft_8cl.xhtml#a4c4ce3f10939dd4237d0adee00086a53">DFT_8</a>(c0, c1, c2, c3, c4, c5, c6, c7);</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160; <span class="comment">// Store eight complex output values</span></div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; vstore2(c0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160; vstore2(c1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, Nx, 0));</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160; vstore2(c2, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 2 * Nx, 0));</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160; vstore2(c3, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 3 * Nx, 0));</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160; vstore2(c4, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 4 * Nx, 0));</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160; vstore2(c5, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 5 * Nx, 0));</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160; vstore2(c6, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 6 * Nx, 0));</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; vstore2(c7, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 7 * Nx, 0));</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_ad4dcc4a8b94f263cd19c59fdc2cec3d2"><div class="ttname"><a href="fft_8cl.xhtml#ad4dcc4a8b94f263cd19c59fdc2cec3d2">TWIDDLE_FACTOR_MULTIPLICATION</a></div><div class="ttdeci">#define TWIDDLE_FACTOR_MULTIPLICATION(phi, input)</div><div class="ttdoc">Calculates and applies the twiddle factor to a given input.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00031">fft.cl:31</a></div></div>
4310<div class="ttc" id="struct_tensor3_d_xhtml_ad5ff7a2b2bd0eec50fe09c254b127d1c"><div class="ttname"><a href="struct_tensor3_d.xhtml#ad5ff7a2b2bd0eec50fe09c254b127d1c">Tensor3D::stride_z</a></div><div class="ttdeci">int stride_z</div><div class="ttdoc">Stride of the image in Z dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">helpers.h:364</a></div></div>
4311<div class="ttc" id="struct_tensor3_d_xhtml_ae01febbfd0689ef709f3ff6fdd2abc7e"><div class="ttname"><a href="struct_tensor3_d.xhtml#ae01febbfd0689ef709f3ff6fdd2abc7e">Tensor3D::stride_x</a></div><div class="ttdeci">int stride_x</div><div class="ttdoc">Stride of the image in X dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">helpers.h:362</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01004312<div class="ttc" id="fft_8cl_xhtml_a4c4ce3f10939dd4237d0adee00086a53"><div class="ttname"><a href="fft_8cl.xhtml#a4c4ce3f10939dd4237d0adee00086a53">DFT_8</a></div><div class="ttdeci">#define DFT_8(c0, c1, c2, c3, c4, c5, c6, c7)</div><div class="ttdoc">Computes radix-8 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00172">fft.cl:172</a></div></div>
Jenkins0e205f72019-11-28 16:53:35 +00004313<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
4314<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
4315<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a79e8e562daa6599317d2d1cd86ef1bf2"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT_NO_STEP(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">helpers.h:330</a></div></div>
4316<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
4317<div class="ttc" id="struct_tensor3_d_xhtml_a4f0b90c9ecd6e57ceb3f37332fefe8f1"><div class="ttname"><a href="struct_tensor3_d.xhtml#a4f0b90c9ecd6e57ceb3f37332fefe8f1">Tensor3D::stride_y</a></div><div class="ttdeci">int stride_y</div><div class="ttdoc">Stride of the image in Y dimension (in bytes)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">helpers.h:363</a></div></div>
4318<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01004319</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00004320<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00330">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00172">DFT_8</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00362">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00363">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00364">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01004321
4322</div>
4323</div>
4324<a id="a008d11872b90493790f933f82c9f05b5"></a>
4325<h2 class="memtitle"><span class="permalink"><a href="#a008d11872b90493790f933f82c9f05b5">&#9670;&nbsp;</a></span>fft_radix_8_first_stage_axis_0()</h2>
4326
4327<div class="memitem">
4328<div class="memproto">
4329 <table class="memname">
4330 <tr>
4331 <td class="memname">kernel void fft_radix_8_first_stage_axis_0 </td>
4332 <td>(</td>
4333 <td class="paramtype">__global uchar *&#160;</td>
4334 <td class="paramname"><em>input_ptr</em>, </td>
4335 </tr>
4336 <tr>
4337 <td class="paramkey"></td>
4338 <td></td>
4339 <td class="paramtype">uint&#160;</td>
4340 <td class="paramname"><em>input_stride_x</em>, </td>
4341 </tr>
4342 <tr>
4343 <td class="paramkey"></td>
4344 <td></td>
4345 <td class="paramtype">uint&#160;</td>
4346 <td class="paramname"><em>input_step_x</em>, </td>
4347 </tr>
4348 <tr>
4349 <td class="paramkey"></td>
4350 <td></td>
4351 <td class="paramtype">uint&#160;</td>
4352 <td class="paramname"><em>input_stride_y</em>, </td>
4353 </tr>
4354 <tr>
4355 <td class="paramkey"></td>
4356 <td></td>
4357 <td class="paramtype">uint&#160;</td>
4358 <td class="paramname"><em>input_step_y</em>, </td>
4359 </tr>
4360 <tr>
4361 <td class="paramkey"></td>
4362 <td></td>
4363 <td class="paramtype">uint&#160;</td>
4364 <td class="paramname"><em>input_stride_z</em>, </td>
4365 </tr>
4366 <tr>
4367 <td class="paramkey"></td>
4368 <td></td>
4369 <td class="paramtype">uint&#160;</td>
4370 <td class="paramname"><em>input_step_z</em>, </td>
4371 </tr>
4372 <tr>
4373 <td class="paramkey"></td>
4374 <td></td>
4375 <td class="paramtype">uint&#160;</td>
4376 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
4377 </tr>
4378 <tr>
4379 <td class="paramkey"></td>
4380 <td></td>
4381 <td class="paramtype">__global uchar *&#160;</td>
4382 <td class="paramname"><em>output_ptr</em>, </td>
4383 </tr>
4384 <tr>
4385 <td class="paramkey"></td>
4386 <td></td>
4387 <td class="paramtype">uint&#160;</td>
4388 <td class="paramname"><em>output_stride_x</em>, </td>
4389 </tr>
4390 <tr>
4391 <td class="paramkey"></td>
4392 <td></td>
4393 <td class="paramtype">uint&#160;</td>
4394 <td class="paramname"><em>output_step_x</em>, </td>
4395 </tr>
4396 <tr>
4397 <td class="paramkey"></td>
4398 <td></td>
4399 <td class="paramtype">uint&#160;</td>
4400 <td class="paramname"><em>output_stride_y</em>, </td>
4401 </tr>
4402 <tr>
4403 <td class="paramkey"></td>
4404 <td></td>
4405 <td class="paramtype">uint&#160;</td>
4406 <td class="paramname"><em>output_step_y</em>, </td>
4407 </tr>
4408 <tr>
4409 <td class="paramkey"></td>
4410 <td></td>
4411 <td class="paramtype">uint&#160;</td>
4412 <td class="paramname"><em>output_stride_z</em>, </td>
4413 </tr>
4414 <tr>
4415 <td class="paramkey"></td>
4416 <td></td>
4417 <td class="paramtype">uint&#160;</td>
4418 <td class="paramname"><em>output_step_z</em>, </td>
4419 </tr>
4420 <tr>
4421 <td class="paramkey"></td>
4422 <td></td>
4423 <td class="paramtype">uint&#160;</td>
4424 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
4425 </tr>
4426 <tr>
4427 <td></td>
4428 <td>)</td>
4429 <td></td><td></td>
4430 </tr>
4431 </table>
4432</div><div class="memdoc">
4433
4434<p>Computes the first stage of a radix-8 DFT on axis 0. </p>
4435<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
4436<dl class="params"><dt>Parameters</dt><dd>
4437 <table class="params">
4438 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
4439 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
4440 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
4441 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
4442 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
4443 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
4444 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
4445 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
4446 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
4447 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
4448 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
4449 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
4450 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
4451 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
4452 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
4453 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
4454 </table>
4455 </dd>
4456</dl>
4457
4458<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00744">744</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00004459<div class="fragment"><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160;{</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(output);</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160;</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="comment">// Load eight complex input values</span></div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; float16 data = vload16(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160;</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="comment">// Compute DFT N = 8</span></div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <a class="code" href="fft_8cl.xhtml#a4c4ce3f10939dd4237d0adee00086a53">DFT_8</a>(data.s01, data.s23, data.s45, data.s67, data.s89, data.sAB, data.sCD, data.sEF);</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="comment">// Store eight complex output values</span></div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; vstore16(data, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_a4c4ce3f10939dd4237d0adee00086a53"><div class="ttname"><a href="fft_8cl.xhtml#a4c4ce3f10939dd4237d0adee00086a53">DFT_8</a></div><div class="ttdeci">#define DFT_8(c0, c1, c2, c3, c4, c5, c6, c7)</div><div class="ttdoc">Computes radix-8 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00172">fft.cl:172</a></div></div>
4460<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
4461<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
4462<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a31c8c760f08fb1a331b16b7c204321dc"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">helpers.h:326</a></div></div>
4463<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01004464</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00004465<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00172">DFT_8</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01004466
4467</div>
4468</div>
4469<a id="a76f788853ef70fc0220ae4bb55db6d11"></a>
4470<h2 class="memtitle"><span class="permalink"><a href="#a76f788853ef70fc0220ae4bb55db6d11">&#9670;&nbsp;</a></span>fft_radix_8_first_stage_axis_1()</h2>
4471
4472<div class="memitem">
4473<div class="memproto">
4474 <table class="memname">
4475 <tr>
4476 <td class="memname">kernel void fft_radix_8_first_stage_axis_1 </td>
4477 <td>(</td>
4478 <td class="paramtype">__global uchar *&#160;</td>
4479 <td class="paramname"><em>input_ptr</em>, </td>
4480 </tr>
4481 <tr>
4482 <td class="paramkey"></td>
4483 <td></td>
4484 <td class="paramtype">uint&#160;</td>
4485 <td class="paramname"><em>input_stride_x</em>, </td>
4486 </tr>
4487 <tr>
4488 <td class="paramkey"></td>
4489 <td></td>
4490 <td class="paramtype">uint&#160;</td>
4491 <td class="paramname"><em>input_step_x</em>, </td>
4492 </tr>
4493 <tr>
4494 <td class="paramkey"></td>
4495 <td></td>
4496 <td class="paramtype">uint&#160;</td>
4497 <td class="paramname"><em>input_stride_y</em>, </td>
4498 </tr>
4499 <tr>
4500 <td class="paramkey"></td>
4501 <td></td>
4502 <td class="paramtype">uint&#160;</td>
4503 <td class="paramname"><em>input_step_y</em>, </td>
4504 </tr>
4505 <tr>
4506 <td class="paramkey"></td>
4507 <td></td>
4508 <td class="paramtype">uint&#160;</td>
4509 <td class="paramname"><em>input_stride_z</em>, </td>
4510 </tr>
4511 <tr>
4512 <td class="paramkey"></td>
4513 <td></td>
4514 <td class="paramtype">uint&#160;</td>
4515 <td class="paramname"><em>input_step_z</em>, </td>
4516 </tr>
4517 <tr>
4518 <td class="paramkey"></td>
4519 <td></td>
4520 <td class="paramtype">uint&#160;</td>
4521 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
4522 </tr>
4523 <tr>
4524 <td class="paramkey"></td>
4525 <td></td>
4526 <td class="paramtype">__global uchar *&#160;</td>
4527 <td class="paramname"><em>output_ptr</em>, </td>
4528 </tr>
4529 <tr>
4530 <td class="paramkey"></td>
4531 <td></td>
4532 <td class="paramtype">uint&#160;</td>
4533 <td class="paramname"><em>output_stride_x</em>, </td>
4534 </tr>
4535 <tr>
4536 <td class="paramkey"></td>
4537 <td></td>
4538 <td class="paramtype">uint&#160;</td>
4539 <td class="paramname"><em>output_step_x</em>, </td>
4540 </tr>
4541 <tr>
4542 <td class="paramkey"></td>
4543 <td></td>
4544 <td class="paramtype">uint&#160;</td>
4545 <td class="paramname"><em>output_stride_y</em>, </td>
4546 </tr>
4547 <tr>
4548 <td class="paramkey"></td>
4549 <td></td>
4550 <td class="paramtype">uint&#160;</td>
4551 <td class="paramname"><em>output_step_y</em>, </td>
4552 </tr>
4553 <tr>
4554 <td class="paramkey"></td>
4555 <td></td>
4556 <td class="paramtype">uint&#160;</td>
4557 <td class="paramname"><em>output_stride_z</em>, </td>
4558 </tr>
4559 <tr>
4560 <td class="paramkey"></td>
4561 <td></td>
4562 <td class="paramtype">uint&#160;</td>
4563 <td class="paramname"><em>output_step_z</em>, </td>
4564 </tr>
4565 <tr>
4566 <td class="paramkey"></td>
4567 <td></td>
4568 <td class="paramtype">uint&#160;</td>
4569 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
4570 </tr>
4571 <tr>
4572 <td></td>
4573 <td>)</td>
4574 <td></td><td></td>
4575 </tr>
4576 </table>
4577</div><div class="memdoc">
4578
4579<p>Computes the first stage of a radix-8 DFT on axis 1. </p>
4580<dl class="section note"><dt>Note</dt><dd>In order to perform the FFT function "in-place", the pre-processor -DIN_PLACE must be passed at compile time</dd></dl>
4581<dl class="params"><dt>Parameters</dt><dd>
4582 <table class="params">
4583 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_ptr</td><td>Pointer to the source tensor. Supported data types: F32 </td></tr>
4584 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_x</td><td>Stride of the source tensor in X dimension (in bytes) </td></tr>
4585 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
4586 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_y</td><td>Stride of the source tensor in Y dimension (in bytes) </td></tr>
4587 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
4588 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_stride_z</td><td>Stride of the source tensor in Z dimension (in bytes) </td></tr>
4589 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_step_z</td><td>input_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
4590 <tr><td class="paramdir">[in,out]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the source tensor </td></tr>
4591 <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>(Optional) Pointer to the destination image. Supported data types: same as <code>input_ptr</code> </td></tr>
4592 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>(Optional) Stride of the destination image in X dimension (in bytes) </td></tr>
4593 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>(Optional) output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
4594 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>(Optional) Stride of the destination image in Y dimension (in bytes) </td></tr>
4595 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>(Optional) output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
4596 <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_z</td><td>(Optional) Stride of the source tensor in Z dimension (in bytes) </td></tr>
4597 <tr><td class="paramdir">[in]</td><td class="paramname">output_step_z</td><td>(Optional) output_stride_z * number of elements along Z processed per workitem(in bytes) </td></tr>
4598 <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>(Optional) The offset of the first element in the destination image </td></tr>
4599 </table>
4600 </dd>
4601</dl>
4602
4603<p class="definition">Definition at line <a class="el" href="fft_8cl_source.xhtml#l00791">791</a> of file <a class="el" href="fft_8cl_source.xhtml">fft.cl</a>.</p>
Jenkins0e205f72019-11-28 16:53:35 +00004604<div class="fragment"><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160;{</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="comment">// Get tensor pointers</span></div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a> = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>);</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;<span class="preprocessor">#ifdef IN_PLACE</span></div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>;</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <a class="code" href="struct_tensor3_d.xhtml">Tensor3D</a> output = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(output);</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* IN_PLACE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="comment">// Load eight complex input values</span></div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; float2 data0 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>.ptr);</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; float2 data1 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 1, 0));</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; float2 data2 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 2, 0));</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; float2 data3 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 3, 0));</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; float2 data4 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 4, 0));</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; float2 data5 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 5, 0));</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; float2 data6 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 6, 0));</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; float2 data7 = vload2(0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">input</a>, 0, 7, 0));</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160;</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="comment">// Compute DFT N = 8</span></div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <a class="code" href="fft_8cl.xhtml#a4c4ce3f10939dd4237d0adee00086a53">DFT_8</a>(data0, data1, data2, data3, data4, data5, data6, data7);</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160;</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="comment">// Store eight complex output values</span></div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; vstore2(data0, 0, (__global <span class="keywordtype">float</span> *)output.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; vstore2(data1, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 1, 0));</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; vstore2(data2, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 2, 0));</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; vstore2(data3, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 3, 0));</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; vstore2(data4, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 4, 0));</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; vstore2(data5, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 5, 0));</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; vstore2(data6, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 6, 0));</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; vstore2(data7, 0, (__global <span class="keywordtype">float</span> *)<a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a>(&amp;output, 0, 7, 0));</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;}</div><div class="ttc" id="fft_8cl_xhtml_a4c4ce3f10939dd4237d0adee00086a53"><div class="ttname"><a href="fft_8cl.xhtml#a4c4ce3f10939dd4237d0adee00086a53">DFT_8</a></div><div class="ttdeci">#define DFT_8(c0, c1, c2, c3, c4, c5, c6, c7)</div><div class="ttdoc">Computes radix-8 butterfly unit.</div><div class="ttdef"><b>Definition:</b> <a href="fft_8cl_source.xhtml#l00172">fft.cl:172</a></div></div>
4605<div class="ttc" id="struct_tensor3_d_xhtml"><div class="ttname"><a href="struct_tensor3_d.xhtml">Tensor3D</a></div><div class="ttdoc">Structure to hold 3D tensor information.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00358">helpers.h:358</a></div></div>
4606<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a8fcf2ddd9a1d58b1b280f5c0aed71845"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a8fcf2ddd9a1d58b1b280f5c0aed71845">arm_compute::test::validation::input</a></div><div class="ttdeci">auto input</div><div class="ttdef"><b>Definition:</b> <a href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">LSTMLayerQuantized.cpp:487</a></div></div>
4607<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a31c8c760f08fb1a331b16b7c204321dc"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a></div><div class="ttdeci">#define CONVERT_TO_TENSOR3D_STRUCT(name)</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">helpers.h:326</a></div></div>
4608<div class="ttc" id="struct_tensor3_d_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">Tensor3D::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">helpers.h:360</a></div></div>
4609<div class="ttc" id="src_2core_2_c_l_2cl__kernels_2_helpers_8h_xhtml_a2101b2fe0193ce227ae4e0945e321d85"><div class="ttname"><a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a2101b2fe0193ce227ae4e0945e321d85">tensor3D_offset</a></div><div class="ttdeci">__global const uchar * tensor3D_offset(const Tensor3D *tensor, int x, int y, int z)</div><div class="ttdoc">Get the pointer position of a Tensor3D.</div><div class="ttdef"><b>Definition:</b> <a href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">helpers.h:522</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01004610</div><!-- fragment -->
Jenkins0e205f72019-11-28 16:53:35 +00004611<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00326">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00172">DFT_8</a>, <a class="el" href="_c_l_2_l_s_t_m_layer_quantized_8cpp_source.xhtml#l00487">arm_compute::test::validation::input</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00360">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00522">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01004612
4613</div>
4614</div>
4615</div><!-- contents -->
4616</div><!-- doc-content -->
4617<!-- start footer part -->
4618<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
4619 <ul>
4620 <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.xhtml">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.xhtml">core</a></li><li class="navelem"><a class="el" href="dir_8c278f79c760e5c5fbd911f9870614c1.xhtml">CL</a></li><li class="navelem"><a class="el" href="dir_25885286e9dad4fa105b7b25a8031bbf.xhtml">cl_kernels</a></li><li class="navelem"><a class="el" href="fft_8cl.xhtml">fft.cl</a></li>
Jenkins7f09cf72020-01-22 18:08:16 +00004621 <li class="footer">Generated on Wed Jan 22 2020 18:07:47 for Compute Library by
Jenkins4ba87db2019-05-23 17:11:51 +01004622 <a href="http://www.doxygen.org/index.html">
4623 <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
4624 </ul>
4625</div>
4626</body>
4627</html>